def __init__(self, text=None, speech=None, time=None, colour=None, on_press=None, on_timeout=None, wait_for_press=None, start=None, stop=None): from thebutton.parser import parse_element self.text = text self.speech = speech self.time = int(time) if time is not None else None if colour is None or (isinstance(colour, str) and colour.lower() in ("red", "green")): self.colour = colour.lower() if colour is not None else None else: raise ValueError("Unknown colour for button '{}'".format(colour)) self.on_press = list( parse_element(on_press)) if on_press is not None else None self.on_timeout = list( parse_element(on_timeout)) if on_timeout is not None else None self.wait_for_press = bool(wait_for_press) if self.on_press is not None and self.wait_for_press != True: raise ValueError( "You should only set on_press if wait_for_press is set to True" ) if self.on_timeout is not None and self.time is None: raise ValueError("You should only set on_timeout if time is set") self.start = bool(start) if start is not None else None self.stop = bool(stop) if stop is not None else None
def test_parse_element_nested_lists_of_strings(): result = list(parse_element([["hello", [["world"]]]])) assert len(result) == 2 assert isinstance(result[0], GenericStep) assert result[0].text == "hello" assert isinstance(result[1], GenericStep) assert result[1].text == "world"
def test_parse_element_bang_wait_30(): result = list(parse_element("!wait:30")) assert len(result) == 1 assert isinstance(result[0], GenericStep) assert result[0].time == 30
def test_parse_element_bang_start(): result = list(parse_element("!button")) assert len(result) == 1 assert isinstance(result[0], GenericStep) assert result[0].wait_for_press == True
def test_parse_element_bang_start(): result = list(parse_element("!start")) assert len(result) == 1 assert isinstance(result[0], GenericStep) assert result[0].start == True
def test_parse_element_bang_red(): result = list(parse_element("!green")) assert len(result) == 1 assert isinstance(result[0], GenericStep) assert result[0].text is None assert result[0].colour == "green"
def test_parse_element_list_of_one_string(): result = list(parse_element(["hello"])) assert len(result) == 1 assert isinstance(result[0], GenericStep) assert result[0].text == "hello"
def test_parse_element_bang_unknown_parameterised_spaces(): with pytest.raises(ValueError) as err: list(parse_element(" ! monkey : 100 : 200 : hello : world : ")) assert str(err.value) == "Unknown step type: 'monkey'"
def test_parse_element_bang_unknown_spaces(): with pytest.raises(ValueError) as err: list(parse_element(" ! monkey ")) assert str(err.value) == "Unknown step type: 'monkey'"
def test_parse_element_bang_challenge_complete_upper(): result = list(parse_element("!Challenge Complete")) assert len(result) == 1 assert result[0] is ChallengeComplete
def test_parse_element_bang_wait_10_space_after_colon(): result = list(parse_element("!wait: 10")) assert len(result) == 1 assert isinstance(result[0], GenericStep) assert result[0].time == 10
def test_parse_element_bang_red_space_after_bang(): result = list(parse_element("! red")) assert len(result) == 1 assert isinstance(result[0], GenericStep) assert result[0].text is None assert result[0].colour == "red"