123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807 |
- """Integration tests for var operations."""
- from typing import Generator
- import pytest
- from selenium.webdriver.common.by import By
- from reflex.testing import AppHarness
- # pyright: reportOptionalMemberAccess=false, reportGeneralTypeIssues=false, reportUnknownMemberType=false
- def VarOperations():
- """App with var operations."""
- from typing import Dict, List
- import reflex as rx
- from reflex.vars.base import LiteralVar
- from reflex.vars.sequence import ArrayVar
- class Object(rx.Base):
- str: str = "hello"
- class VarOperationState(rx.State):
- int_var1: int = 10
- int_var2: int = 5
- int_var3: int = 7
- float_var1: float = 10.5
- float_var2: float = 5.5
- list1: List = [1, 2]
- list2: List = [3, 4]
- list3: List = ["first", "second", "third"]
- list4: List = [Object(name="obj_1"), Object(name="obj_2")]
- str_var1: str = "first"
- str_var2: str = "second"
- str_var3: str = "ThIrD"
- str_var4: str = "a long string"
- dict1: Dict[int, int] = {1: 2}
- dict2: Dict[int, int] = {3: 4}
- html_str: str = "<div>hello</div>"
- app = rx.App(state=rx.State)
- @rx.memo
- def memo_comp(list1: List[int], int_var1: int, id: str):
- return rx.text(list1, int_var1, id=id)
- @rx.memo
- def memo_comp_nested(int_var2: int, id: str):
- return memo_comp(list1=[3, 4], int_var1=int_var2, id=id)
- @app.add_page
- def index():
- return rx.vstack(
- rx.el.input(
- id="token",
- value=VarOperationState.router.session.client_token,
- is_read_only=True,
- ),
- # INT INT
- rx.text(
- VarOperationState.int_var1 + VarOperationState.int_var2,
- id="int_add_int",
- ),
- rx.text(
- VarOperationState.int_var1 * VarOperationState.int_var2,
- id="int_mult_int",
- ),
- rx.text(
- VarOperationState.int_var1 - VarOperationState.int_var2,
- id="int_sub_int",
- ),
- rx.text(
- VarOperationState.int_var1**VarOperationState.int_var2,
- id="int_exp_int",
- ),
- rx.text(
- VarOperationState.int_var1 / VarOperationState.int_var2,
- id="int_div_int",
- ),
- rx.text(
- VarOperationState.int_var1 // VarOperationState.int_var3,
- id="int_floor_int",
- ),
- rx.text(
- VarOperationState.int_var1 % VarOperationState.int_var2,
- id="int_mod_int",
- ),
- rx.text(
- VarOperationState.int_var1 | VarOperationState.int_var2,
- id="int_or_int",
- ),
- rx.text(
- (VarOperationState.int_var1 > VarOperationState.int_var2).to_string(),
- id="int_gt_int",
- ),
- rx.text(
- (VarOperationState.int_var1 < VarOperationState.int_var2).to_string(),
- id="int_lt_int",
- ),
- rx.text(
- (VarOperationState.int_var1 >= VarOperationState.int_var2).to_string(),
- id="int_gte_int",
- ),
- rx.text(
- (VarOperationState.int_var1 <= VarOperationState.int_var2).to_string(),
- id="int_lte_int",
- ),
- rx.text(
- VarOperationState.int_var1 & VarOperationState.int_var2,
- id="int_and_int",
- ),
- rx.text(
- (VarOperationState.int_var1 | VarOperationState.int_var2).to_string(),
- id="int_or_int",
- ),
- rx.text(
- (VarOperationState.int_var1 == VarOperationState.int_var2).to_string(),
- id="int_eq_int",
- ),
- rx.text(
- (VarOperationState.int_var1 != VarOperationState.int_var2).to_string(),
- id="int_neq_int",
- ),
- # INT FLOAT OR FLOAT INT
- rx.text(
- VarOperationState.float_var1 + VarOperationState.int_var2,
- id="float_add_int",
- ),
- rx.text(
- VarOperationState.float_var1 * VarOperationState.int_var2,
- id="float_mult_int",
- ),
- rx.text(
- VarOperationState.float_var1 - VarOperationState.int_var2,
- id="float_sub_int",
- ),
- rx.text(
- VarOperationState.float_var1**VarOperationState.int_var2,
- id="float_exp_int",
- ),
- rx.text(
- VarOperationState.float_var1 / VarOperationState.int_var2,
- id="float_div_int",
- ),
- rx.text(
- VarOperationState.float_var1 // VarOperationState.int_var3,
- id="float_floor_int",
- ),
- rx.text(
- VarOperationState.float_var1 % VarOperationState.int_var2,
- id="float_mod_int",
- ),
- rx.text(
- (VarOperationState.float_var1 > VarOperationState.int_var2).to_string(),
- id="float_gt_int",
- ),
- rx.text(
- (VarOperationState.float_var1 < VarOperationState.int_var2).to_string(),
- id="float_lt_int",
- ),
- rx.text(
- (
- VarOperationState.float_var1 >= VarOperationState.int_var2
- ).to_string(),
- id="float_gte_int",
- ),
- rx.text(
- (
- VarOperationState.float_var1 <= VarOperationState.int_var2
- ).to_string(),
- id="float_lte_int",
- ),
- rx.text(
- (
- VarOperationState.float_var1 == VarOperationState.int_var2
- ).to_string(),
- id="float_eq_int",
- ),
- rx.text(
- (
- VarOperationState.float_var1 != VarOperationState.int_var2
- ).to_string(),
- id="float_neq_int",
- ),
- rx.text(
- (VarOperationState.float_var1 & VarOperationState.int_var2).to_string(),
- id="float_and_int",
- ),
- rx.text(
- (VarOperationState.float_var1 | VarOperationState.int_var2).to_string(),
- id="float_or_int",
- ),
- # INT, DICT
- rx.text(
- (VarOperationState.int_var1 | VarOperationState.dict1).to_string(),
- id="int_or_dict",
- ),
- rx.text(
- (VarOperationState.int_var1 & VarOperationState.dict1).to_string(),
- id="int_and_dict",
- ),
- rx.text(
- (VarOperationState.int_var1 == VarOperationState.dict1).to_string(),
- id="int_eq_dict",
- ),
- rx.text(
- (VarOperationState.int_var1 != VarOperationState.dict1).to_string(),
- id="int_neq_dict",
- ),
- # FLOAT FLOAT
- rx.text(
- VarOperationState.float_var1 + VarOperationState.float_var2,
- id="float_add_float",
- ),
- rx.text(
- VarOperationState.float_var1 * VarOperationState.float_var2,
- id="float_mult_float",
- ),
- rx.text(
- VarOperationState.float_var1 - VarOperationState.float_var2,
- id="float_sub_float",
- ),
- rx.text(
- VarOperationState.float_var1**VarOperationState.float_var2,
- id="float_exp_float",
- ),
- rx.text(
- VarOperationState.float_var1 / VarOperationState.float_var2,
- id="float_div_float",
- ),
- rx.text(
- VarOperationState.float_var1 // VarOperationState.float_var2,
- id="float_floor_float",
- ),
- rx.text(
- VarOperationState.float_var1 % VarOperationState.float_var2,
- id="float_mod_float",
- ),
- rx.text(
- (
- VarOperationState.float_var1 > VarOperationState.float_var2
- ).to_string(),
- id="float_gt_float",
- ),
- rx.text(
- (
- VarOperationState.float_var1 < VarOperationState.float_var2
- ).to_string(),
- id="float_lt_float",
- ),
- rx.text(
- (
- VarOperationState.float_var1 >= VarOperationState.float_var2
- ).to_string(),
- id="float_gte_float",
- ),
- rx.text(
- (
- VarOperationState.float_var1 <= VarOperationState.float_var2
- ).to_string(),
- id="float_lte_float",
- ),
- rx.text(
- (
- VarOperationState.float_var1 == VarOperationState.float_var2
- ).to_string(),
- id="float_eq_float",
- ),
- rx.text(
- (
- VarOperationState.float_var1 != VarOperationState.float_var2
- ).to_string(),
- id="float_neq_float",
- ),
- rx.text(
- (
- VarOperationState.float_var1 & VarOperationState.float_var2
- ).to_string(),
- id="float_and_float",
- ),
- rx.text(
- (
- VarOperationState.float_var1 | VarOperationState.float_var2
- ).to_string(),
- id="float_or_float",
- ),
- # FLOAT STR
- rx.text(
- VarOperationState.float_var1 | VarOperationState.str_var1,
- id="float_or_str",
- ),
- rx.text(
- VarOperationState.float_var1 & VarOperationState.str_var1,
- id="float_and_str",
- ),
- rx.text(
- (
- VarOperationState.float_var1 == VarOperationState.str_var1
- ).to_string(),
- id="float_eq_str",
- ),
- rx.text(
- (
- VarOperationState.float_var1 != VarOperationState.str_var1
- ).to_string(),
- id="float_neq_str",
- ),
- # FLOAT LIST
- rx.text(
- (VarOperationState.float_var1 | VarOperationState.list1).to_string(),
- id="float_or_list",
- ),
- rx.text(
- (VarOperationState.float_var1 & VarOperationState.list1).to_string(),
- id="float_and_list",
- ),
- rx.text(
- (VarOperationState.float_var1 == VarOperationState.list1).to_string(),
- id="float_eq_list",
- ),
- rx.text(
- (VarOperationState.float_var1 != VarOperationState.list1).to_string(),
- id="float_neq_list",
- ),
- # FLOAT DICT
- rx.text(
- (VarOperationState.float_var1 | VarOperationState.dict1).to_string(),
- id="float_or_dict",
- ),
- rx.text(
- (VarOperationState.float_var1 & VarOperationState.dict1).to_string(),
- id="float_and_dict",
- ),
- rx.text(
- (VarOperationState.float_var1 == VarOperationState.dict1).to_string(),
- id="float_eq_dict",
- ),
- rx.text(
- (VarOperationState.float_var1 != VarOperationState.dict1).to_string(),
- id="float_neq_dict",
- ),
- # STR STR
- rx.text(
- VarOperationState.str_var1 + VarOperationState.str_var2,
- id="str_add_str",
- ),
- rx.text(
- (VarOperationState.str_var1 > VarOperationState.str_var2).to_string(),
- id="str_gt_str",
- ),
- rx.text(
- (VarOperationState.str_var1 < VarOperationState.str_var2).to_string(),
- id="str_lt_str",
- ),
- rx.text(
- (VarOperationState.str_var1 >= VarOperationState.str_var2).to_string(),
- id="str_gte_str",
- ),
- rx.text(
- (VarOperationState.str_var1 <= VarOperationState.str_var2).to_string(),
- id="str_lte_str",
- ),
- rx.text(
- (
- VarOperationState.float_var1 == VarOperationState.float_var2
- ).to_string(),
- id="str_eq_str",
- ),
- rx.text(
- (
- VarOperationState.float_var1 != VarOperationState.float_var2
- ).to_string(),
- id="str_neq_str",
- ),
- rx.text(
- VarOperationState.str_var1.contains("fir").to_string(),
- id="str_contains",
- ),
- rx.text(
- VarOperationState.str_var1 | VarOperationState.str_var1, id="str_or_str"
- ),
- rx.text(
- VarOperationState.str_var1 & VarOperationState.str_var2,
- id="str_and_str",
- ),
- # STR, INT
- rx.text(
- VarOperationState.str_var1 * VarOperationState.int_var2,
- id="str_mult_int",
- ),
- rx.text(
- VarOperationState.str_var1 & VarOperationState.int_var2,
- id="str_and_int",
- ),
- rx.text(
- VarOperationState.str_var1 | VarOperationState.int_var2, id="str_or_int"
- ),
- rx.text(
- (VarOperationState.str_var1 == VarOperationState.int_var1).to_string(),
- id="str_eq_int",
- ),
- rx.text(
- (VarOperationState.str_var1 != VarOperationState.int_var1).to_string(),
- id="str_neq_int",
- ),
- # STR, LIST
- rx.text(
- VarOperationState.str_var1 | VarOperationState.list1, id="str_or_list"
- ),
- rx.text(
- (VarOperationState.str_var1 & VarOperationState.list1).to_string(),
- id="str_and_list",
- ),
- rx.text(
- (VarOperationState.str_var1 == VarOperationState.list1).to_string(),
- id="str_eq_list",
- ),
- rx.text(
- (VarOperationState.str_var1 != VarOperationState.list1).to_string(),
- id="str_neq_list",
- ),
- # STR, DICT
- rx.text(
- VarOperationState.str_var1 | VarOperationState.dict1, id="str_or_dict"
- ),
- rx.text(
- (VarOperationState.str_var1 & VarOperationState.dict1).to_string(),
- id="str_and_dict",
- ),
- rx.text(
- (VarOperationState.str_var1 == VarOperationState.dict1).to_string(),
- id="str_eq_dict",
- ),
- rx.text(
- (VarOperationState.str_var1 != VarOperationState.dict1).to_string(),
- id="str_neq_dict",
- ),
- # LIST, LIST
- rx.text(
- (VarOperationState.list1 + VarOperationState.list2).to_string(),
- id="list_add_list",
- ),
- rx.text(
- (VarOperationState.list1 & VarOperationState.list2).to_string(),
- id="list_and_list",
- ),
- rx.text(
- (VarOperationState.list1 | VarOperationState.list2).to_string(),
- id="list_or_list",
- ),
- rx.text(
- (VarOperationState.list1 > VarOperationState.list2).to_string(),
- id="list_gt_list",
- ),
- rx.text(
- (VarOperationState.list1 < VarOperationState.list2).to_string(),
- id="list_lt_list",
- ),
- rx.text(
- (VarOperationState.list1 >= VarOperationState.list2).to_string(),
- id="list_gte_list",
- ),
- rx.text(
- (VarOperationState.list1 <= VarOperationState.list2).to_string(),
- id="list_lte_list",
- ),
- rx.text(
- (VarOperationState.list1 == VarOperationState.list2).to_string(),
- id="list_eq_list",
- ),
- rx.text(
- (VarOperationState.list1 != VarOperationState.list2).to_string(),
- id="list_neq_list",
- ),
- rx.text(
- VarOperationState.list1.contains(1).to_string(), id="list_contains"
- ),
- rx.text(VarOperationState.list4.pluck("name").to_string(), id="list_pluck"),
- rx.text(VarOperationState.list1.reverse().to_string(), id="list_reverse"),
- # LIST, INT
- rx.text(
- (VarOperationState.list1 * VarOperationState.int_var2).to_string(),
- id="list_mult_int",
- ),
- rx.text(
- (VarOperationState.list1 | VarOperationState.int_var1).to_string(),
- id="list_or_int",
- ),
- rx.text(
- (VarOperationState.list1 & VarOperationState.int_var1).to_string(),
- id="list_and_int",
- ),
- rx.text(
- (VarOperationState.list1 == VarOperationState.int_var1).to_string(),
- id="list_eq_int",
- ),
- rx.text(
- (VarOperationState.list1 != VarOperationState.int_var1).to_string(),
- id="list_neq_int",
- ),
- # LIST, DICT
- rx.text(
- (VarOperationState.list1 | VarOperationState.dict1).to_string(),
- id="list_or_dict",
- ),
- rx.text(
- (VarOperationState.list1 & VarOperationState.dict1).to_string(),
- id="list_and_dict",
- ),
- rx.text(
- (VarOperationState.list1 == VarOperationState.dict1).to_string(),
- id="list_eq_dict",
- ),
- rx.text(
- (VarOperationState.list1 != VarOperationState.dict1).to_string(),
- id="list_neq_dict",
- ),
- # DICT, DICT
- rx.text(
- (VarOperationState.dict1 | VarOperationState.dict2).to_string(),
- id="dict_or_dict",
- ),
- rx.text(
- (VarOperationState.dict1 & VarOperationState.dict2).to_string(),
- id="dict_and_dict",
- ),
- rx.text(
- (VarOperationState.dict1 == VarOperationState.dict2).to_string(),
- id="dict_eq_dict",
- ),
- rx.text(
- (VarOperationState.dict1 != VarOperationState.dict2).to_string(),
- id="dict_neq_dict",
- ),
- rx.text(
- VarOperationState.dict1.contains(1).to_string(), id="dict_contains"
- ),
- rx.text(VarOperationState.str_var3.lower(), id="str_lower"),
- rx.text(VarOperationState.str_var3.upper(), id="str_upper"),
- rx.text(VarOperationState.str_var4.split(" ").to_string(), id="str_split"),
- rx.text(VarOperationState.list3.join(""), id="list_join"),
- rx.text(VarOperationState.list3.join(","), id="list_join_comma"),
- # Index from an op var
- rx.text(
- VarOperationState.list3[VarOperationState.int_var1 % 3],
- id="list_index_mod",
- ),
- rx.html(
- VarOperationState.html_str,
- id="html_str",
- ),
- rx.el.mark("second"),
- rx.text(ArrayVar.range(2, 5).join(","), id="list_join_range1"),
- rx.text(ArrayVar.range(2, 10, 2).join(","), id="list_join_range2"),
- rx.text(ArrayVar.range(5, 0, -1).join(","), id="list_join_range3"),
- rx.text(ArrayVar.range(0, 3).join(","), id="list_join_range4"),
- rx.box(
- rx.foreach(
- ArrayVar.range(0, 2),
- lambda x: rx.text(VarOperationState.list1[x], as_="p"),
- ),
- id="foreach_list_arg",
- ),
- rx.box(
- rx.foreach(
- ArrayVar.range(0, 2),
- lambda x, ix: rx.text(VarOperationState.list1[ix], as_="p"),
- ),
- id="foreach_list_ix",
- ),
- rx.box(
- rx.foreach(
- LiteralVar.create(list(range(0, 3))).to(ArrayVar, List[int]),
- lambda x: rx.foreach(
- ArrayVar.range(x),
- lambda y: rx.text(VarOperationState.list1[y], as_="p"),
- ),
- ),
- id="foreach_list_nested",
- ),
- memo_comp(
- list1=VarOperationState.list1,
- int_var1=VarOperationState.int_var1,
- id="memo_comp",
- ),
- memo_comp_nested(
- int_var2=VarOperationState.int_var2,
- id="memo_comp_nested",
- ),
- # foreach in a match
- rx.box(
- rx.match(
- VarOperationState.list3.length(),
- (0, rx.text("No choices")),
- (1, rx.text("One choice")),
- rx.foreach(VarOperationState.list3, lambda choice: rx.text(choice)),
- ),
- id="foreach_in_match",
- ),
- )
- @pytest.fixture(scope="module")
- def var_operations(tmp_path_factory) -> Generator[AppHarness, None, None]:
- """Start VarOperations app at tmp_path via AppHarness.
- Args:
- tmp_path_factory: pytest tmp_path_factory fixture
- Yields:
- running AppHarness instance
- """
- with AppHarness.create(
- root=tmp_path_factory.mktemp("var_operations"),
- app_source=VarOperations,
- ) as harness:
- assert harness.app_instance is not None, "app is not running"
- yield harness
- @pytest.fixture
- def driver(var_operations: AppHarness):
- """Get an instance of the browser open to the var operations app.
- Args:
- var_operations: harness for VarOperations app
- Yields:
- WebDriver instance.
- """
- driver = var_operations.frontend()
- try:
- token_input = driver.find_element(By.ID, "token")
- assert token_input
- # wait for the backend connection to send the token
- token = var_operations.poll_for_value(token_input)
- assert token is not None
- yield driver
- finally:
- driver.quit()
- def test_var_operations(driver, var_operations: AppHarness):
- """Test that the var operations produce the right results.
- Args:
- driver: selenium WebDriver open to the app
- var_operations: AppHarness for the var operations app
- """
- tests = [
- # int, int
- ("int_add_int", "15"),
- ("int_mult_int", "50"),
- ("int_sub_int", "5"),
- ("int_exp_int", "100000"),
- ("int_div_int", "2"),
- ("int_floor_int", "1"),
- ("int_mod_int", "0"),
- ("int_gt_int", "true"),
- ("int_lt_int", "false"),
- ("int_gte_int", "true"),
- ("int_lte_int", "false"),
- ("int_and_int", "5"),
- ("int_or_int", "10"),
- ("int_eq_int", "false"),
- ("int_neq_int", "true"),
- # int, float
- ("float_add_int", "15.5"),
- ("float_mult_int", "52.5"),
- ("float_sub_int", "5.5"),
- ("float_exp_int", "127628.15625"),
- ("float_div_int", "2.1"),
- ("float_floor_int", "1"),
- ("float_mod_int", "0.5"),
- ("float_gt_int", "true"),
- ("float_lt_int", "false"),
- ("float_gte_int", "true"),
- ("float_lte_int", "false"),
- ("float_eq_int", "false"),
- ("float_neq_int", "true"),
- ("float_and_int", "5"),
- ("float_or_int", "10.5"),
- # int, dict
- ("int_or_dict", "10"),
- ("int_and_dict", '{"1":2}'),
- ("int_eq_dict", "false"),
- ("int_neq_dict", "true"),
- # float, float
- ("float_add_float", "16"),
- ("float_mult_float", "57.75"),
- ("float_sub_float", "5"),
- ("float_exp_float", "413562.49323606625"),
- ("float_div_float", "1.9090909090909092"),
- ("float_floor_float", "1"),
- ("float_mod_float", "5"),
- ("float_gt_float", "true"),
- ("float_lt_float", "false"),
- ("float_gte_float", "true"),
- ("float_lte_float", "false"),
- ("float_eq_float", "false"),
- ("float_neq_float", "true"),
- ("float_and_float", "5.5"),
- ("float_or_float", "10.5"),
- # float, str
- ("float_or_str", "10.5"),
- ("float_and_str", "first"),
- ("float_eq_str", "false"),
- ("float_neq_str", "true"),
- # float, list
- ("float_or_list", "10.5"),
- ("float_and_list", "[1,2]"),
- ("float_eq_list", "false"),
- ("float_neq_list", "true"),
- # float, dict
- ("float_or_dict", "10.5"),
- ("float_and_dict", '{"1":2}'),
- ("float_eq_dict", "false"),
- ("float_neq_dict", "true"),
- # str, str
- ("str_add_str", "firstsecond"),
- ("str_gt_str", "false"),
- ("str_lt_str", "true"),
- ("str_gte_str", "false"),
- ("str_lte_str", "true"),
- ("str_eq_str", "false"),
- ("str_neq_str", "true"),
- ("str_and_str", "second"),
- ("str_or_str", "first"),
- ("str_contains", "true"),
- ("str_lower", "third"),
- ("str_upper", "THIRD"),
- ("str_split", '["a","long","string"]'),
- # str, int
- ("str_mult_int", "firstfirstfirstfirstfirst"),
- ("str_and_int", "5"),
- ("str_or_int", "first"),
- ("str_eq_int", "false"),
- ("str_neq_int", "true"),
- # str, list
- ("str_and_list", "[1,2]"),
- ("str_or_list", "first"),
- ("str_eq_list", "false"),
- ("str_neq_list", "true"),
- # str, dict
- ("str_or_dict", "first"),
- ("str_and_dict", '{"1":2}'),
- ("str_eq_dict", "false"),
- ("str_neq_dict", "true"),
- # list, list
- ("list_add_list", "[1,2,3,4]"),
- ("list_gt_list", "false"),
- ("list_lt_list", "true"),
- ("list_gte_list", "false"),
- ("list_lte_list", "true"),
- ("list_eq_list", "false"),
- ("list_neq_list", "true"),
- ("list_and_list", "[3,4]"),
- ("list_or_list", "[1,2]"),
- ("list_contains", "true"),
- ("list_pluck", '["obj_1","obj_2"]'),
- ("list_reverse", "[2,1]"),
- ("list_join", "firstsecondthird"),
- ("list_join_comma", "first,second,third"),
- ("list_join_range1", "2,3,4"),
- ("list_join_range2", "2,4,6,8"),
- ("list_join_range3", "5,4,3,2,1"),
- ("list_join_range4", "0,1,2"),
- # list, int
- ("list_mult_int", "[1,2,1,2,1,2,1,2,1,2]"),
- ("list_or_int", "[1,2]"),
- ("list_and_int", "10"),
- ("list_eq_int", "false"),
- ("list_neq_int", "true"),
- # list, dict
- ("list_and_dict", '{"1":2}'),
- ("list_or_dict", "[1,2]"),
- ("list_eq_dict", "false"),
- ("list_neq_dict", "true"),
- # dict, dict
- ("dict_or_dict", '{"1":2}'),
- ("dict_and_dict", '{"3":4}'),
- ("dict_eq_dict", "false"),
- ("dict_neq_dict", "true"),
- ("dict_contains", "true"),
- # index from an op var
- ("list_index_mod", "second"),
- # html component with var
- ("html_str", "hello"),
- # index into list with foreach
- ("foreach_list_arg", "1\n2"),
- ("foreach_list_ix", "1\n2"),
- ("foreach_list_nested", "1\n1\n2"),
- # rx.memo component with state
- ("memo_comp", "1210"),
- ("memo_comp_nested", "345"),
- # foreach in a match
- ("foreach_in_match", "first\nsecond\nthird"),
- ]
- for tag, expected in tests:
- print(tag)
- assert driver.find_element(By.ID, tag).text == expected
- # Highlight component with var query (does not plumb ID)
- assert driver.find_element(By.TAG_NAME, "mark").text == "second"
|