def step_given_named_model_elements_with_tags(context): """ .. code-block:: gherkin Given the model elements with name and tags: | name | tags | | S1 | @foo | Then the tag expression select model elements with: | tag expression | selected? | | @foo | S1, S3 | | -@foo | S0, S2, S3 | """ assert context.table, "REQUIRE: context.table" context.table.require_columns(["name", "tags"]) # -- PREPARE: model_element_names = set() model_elements = [] for row in context.table.rows: name = row["name"].strip() tags = convert_model_element_tags(row["tags"]) assert name not in model_element_names, "DUPLICATED: name=%s" % name model_elements.append(ModelElement(name, tags=tags)) model_element_names.add(name) # -- SETUP: context.model_elements = model_elements
def step_then_tag_expression_selects_elements_with_tags(context): """ Checks if a tag expression selects an element with the given tags. .. code-block:: gherkin Then the tag expression selects elements with tags: | tags | selected? | | @foo | yes | | @other | no | """ assert context.tag_expression, "REQUIRE: context.tag_expression" context.table.require_columns(["tags", "selected?"]) tag_expression = context.tag_expression expected = [] actual = [] for row in context.table.rows: element_tags = convert_model_element_tags(row["tags"]) expected_element_selected = convert_yesno(row["selected?"]) actual_element_selected = tag_expression.check(element_tags) expected.append((element_tags, expected_element_selected)) actual.append((element_tags, actual_element_selected)) # -- PERFORM CHECK: assert_that(actual, equal_to(expected))