def test_variable_node_more_specific_first(): node = Node() xy_node = node.add(Step('x{x}y')) xay_node = node.add(Step('xa{x}y')) ay_node = node.add(Step('a{x}y')) assert node.get('xwhaty') == (xy_node, {'x': 'what'}) assert node.get('xawhaty') == (xay_node, {'x': 'what'}) assert node.get('awhaty') == (ay_node, {'x': 'what'})
def test_multi_mixed_step(): step = Step("{foo}a{bar}") assert step.s == "{foo}a{bar}" assert step.generalized == "{}a{}" assert step.parts == ("", "a", "") assert step.names == ["foo", "bar"] assert step.converters == {} assert step.has_variables() assert step.discriminator_info() == "{}a{}"
def test_steps_the_same(): step1 = Step('{foo}') step2 = Step('{foo}') assert step1 == step2 assert not step1 != step2 assert not step1 < step2 assert not step1 > step2 assert step1 >= step2 assert step1 <= step2
def test_step_different(): step1 = Step('{foo}') step2 = Step('bar') assert step1 != step2 assert not step1 == step2 assert not step1 < step2 assert step1 > step2 assert step1 >= step2 assert not step1 <= step2
def test_multi_mixed_step(): step = Step('{foo}a{bar}') assert step.s == '{foo}a{bar}' assert step.generalized == '{}a{}' assert step.parts == ('', 'a', '') assert step.names == ['foo', 'bar'] assert step.converters == {} assert step.has_variables() assert step.discriminator_info() == '{}a{}'
def test_step_different(): step1 = Step("{foo}") step2 = Step("bar") assert step1 != step2 assert not step1 == step2 assert not step1 < step2 assert step1 > step2 assert step1 >= step2 assert not step1 <= step2
def test_variable_step(): step = Step("{foo}") assert step.s == "{foo}" assert step.generalized == "{}" assert step.parts == ("", "") assert step.names == ["foo"] assert step.converters == {} assert step.has_variables() assert step.match("bar") == (True, {"foo": "bar"}) assert step.discriminator_info() == "{}"
def test_variable_step(): step = Step('{foo}') assert step.s == '{foo}' assert step.generalized == '{}' assert step.parts == ('', '') assert step.names == ['foo'] assert step.converters == {} assert step.has_variables() assert step.match('bar') == (True, {'foo': 'bar'}) assert step.discriminator_info() == '{}'
def test_mixed_step(): step = Step('a{foo}b') assert step.s == 'a{foo}b' assert step.generalized == 'a{}b' assert step.parts == ('a', 'b') assert step.names == ['foo'] assert step.converters == {} assert step.has_variables() assert step.discriminator_info() == 'a{}b' variables = {} assert step.match('abarb', variables) assert variables == {'foo': 'bar'} variables = {} assert not step.match('ab', variables) assert not variables variables = {} assert not step.match('xbary', variables) assert not variables variables = {} assert not step.match('yabarbx', variables) assert not variables variables = {} assert not step.match('afoo', variables) assert not variables
def test_mixed_step(): step = Step("a{foo}b") assert step.s == "a{foo}b" assert step.generalized == "a{}b" assert step.parts == ("a", "b") assert step.names == ["foo"] assert step.converters == {} assert step.has_variables() assert step.discriminator_info() == "a{}b" variables = {} assert step.match("abarb", variables) assert variables == {"foo": "bar"} variables = {} assert not step.match("ab", variables) assert not variables variables = {} assert not step.match("xbary", variables) assert not variables variables = {} assert not step.match("yabarbx", variables) assert not variables variables = {} assert not step.match("afoo", variables) assert not variables
def test_converter(): step = Step("{foo}", converters=dict(foo=Converter(int))) assert step.discriminator_info() == "{}" variables = {} assert step.match("1", variables) assert variables == {"foo": 1} variables = {} assert not step.match("x", variables) assert not variables
def test_name_step(): step = Step('foo') assert step.s == 'foo' assert step.generalized == 'foo' assert step.parts == ('foo',) assert step.names == [] assert step.converters == {} assert not step.has_variables() assert step.match('foo') == (True, {}) assert step.match('bar') == (False, {}) assert step.discriminator_info() == 'foo'
def test_converter(): step = Step('{foo}', converters=dict(foo=Converter(int))) assert step.discriminator_info() == '{}' variables = {} assert step.match('1', variables) assert variables == {'foo': 1} variables = {} assert not step.match('x', variables) assert not variables
def test_name_step(): step = Step("foo") assert step.s == "foo" assert step.generalized == "foo" assert step.parts == ("foo",) assert step.names == [] assert step.converters == {} assert not step.has_variables() assert step.match("foo") == (True, {}) assert step.match("bar") == (False, {}) assert step.discriminator_info() == "foo"
def test_variable_node_optional_colon(): node = Node() x_node = node.add(Step('{x}')) xy_node = node.add(Step('{x}:{y}')) variables = {} assert node.resolve('a', variables) is x_node assert variables == {'x': 'a'} variables = {} assert node.resolve('a:b', variables) is xy_node assert variables == {'x': 'a', 'y': 'b'}
def test_variable_node_optional_colon(): node = Node() x_node = node.add(Step("{x}")) xy_node = node.add(Step("{x}:{y}")) variables = {} assert node.resolve("a", variables) is x_node assert variables == {"x": "a"} variables = {} assert node.resolve("a:b", variables) is xy_node assert variables == {"x": "a", "y": "b"}
def test_variable_node_specific_first(): node = Node() x_node = node.add(Step("{x}")) prefix_node = node.add(Step("prefix{x}")) variables = {} assert node.resolve("what", variables) is x_node assert variables == {"x": "what"} variables = {} assert node.resolve("prefixwhat", variables) is prefix_node assert variables == {"x": "what"}
def test_variable_node_specific_first(): node = Node() x_node = node.add(Step('{x}')) prefix_node = node.add(Step('prefix{x}')) variables = {} assert node.resolve('what', variables) is x_node assert variables == {'x': 'what'} variables = {} assert node.resolve('prefixwhat', variables) is prefix_node assert variables == {'x': 'what'}
def test_variable_step(): step = Step("{foo}") assert step.s == "{foo}" assert step.generalized == "{}" assert step.parts == ("", "") assert step.names == ["foo"] assert step.converters == {} assert step.has_variables() assert step.discriminator_info() == "{}" variables = {} assert step.match("bar", variables) assert variables == {"foo": "bar"}
def test_variable_node_more_specific_first(): node = Node() xy_node = node.add(Step("x{x}y")) xay_node = node.add(Step("xa{x}y")) ay_node = node.add(Step("a{x}y")) variables = {} assert node.resolve("xwhaty", variables) is xy_node assert variables == {"x": "what"} variables = {} assert node.resolve("xawhaty", variables) is xay_node assert variables == {"x": "what"} variables = {} assert node.resolve("awhaty", variables) is ay_node assert variables == {"x": "what"}
def test_variable_node_more_specific_first(): node = Node() xy_node = node.add(Step('x{x}y')) xay_node = node.add(Step('xa{x}y')) ay_node = node.add(Step('a{x}y')) variables = {} assert node.resolve('xwhaty', variables) is xy_node assert variables == {'x': 'what'} variables = {} assert node.resolve('xawhaty', variables) is xay_node assert variables == {'x': 'what'} variables = {} assert node.resolve('awhaty', variables) is ay_node assert variables == {'x': 'what'}
def test_name_node(): node = Node() step_node = node.add(Step('foo')) variables = {} assert node.resolve('foo', variables) is step_node assert not variables assert node.resolve('bar', variables) is None assert not variables
def test_name_node(): node = Node() step_node = node.add(Step("foo")) variables = {} assert node.resolve("foo", variables) is step_node assert not variables assert node.resolve("bar", variables) is None assert not variables
def test_variable_node(): node = Node() step_node = node.add(Step("{x}")) variables = {} assert node.resolve("foo", variables) is step_node assert variables == {"x": "foo"} variables = {} assert node.resolve("bar", variables) is step_node assert variables == {"x": "bar"}
def test_variable_node(): node = Node() step_node = node.add(Step('{x}')) variables = {} assert node.resolve('foo', variables) is step_node assert variables == {'x': 'foo'} variables = {} assert node.resolve('bar', variables) is step_node assert variables == {'x': 'bar'}
def test_mixed_step(): step = Step('a{foo}b') assert step.s == 'a{foo}b' assert step.generalized == 'a{}b' assert step.parts == ('a', 'b') assert step.names == ['foo'] assert step.converters == [str] assert step.has_variables() assert step.match('abarb') == (True, {'foo': 'bar'}) assert step.match('ab') == (False, {}) assert step.match('xbary') == (False, {}) assert step.match('yabarbx') == (False, {}) assert step.match('afoo') == (False, {}) assert step.discriminator_info() == 'a{str}b'
def test_mixed_step(): step = Step("a{foo}b") assert step.s == "a{foo}b" assert step.generalized == "a{}b" assert step.parts == ("a", "b") assert step.names == ["foo"] assert step.converters == {} assert step.has_variables() assert step.match("abarb") == (True, {"foo": "bar"}) assert step.match("ab") == (False, {}) assert step.match("xbary") == (False, {}) assert step.match("yabarbx") == (False, {}) assert step.match("afoo") == (False, {}) assert step.discriminator_info() == "a{}b"
def test_mixed_node(): node = Node() step_node = node.add(Step("prefix{x}postfix")) variables = {} assert node.resolve("prefixfoopostfix", variables) is step_node assert variables == {"x": "foo"} variables = {} assert node.resolve("prefixbarpostfix", variables) is step_node assert variables == {"x": "bar"} variables = {} assert node.resolve("prefixwhat", variables) is None assert variables == {}
def test_mixed_node(): node = Node() step_node = node.add(Step('prefix{x}postfix')) variables = {} assert node.resolve('prefixfoopostfix', variables) is step_node assert variables == {'x': 'foo'} variables = {} assert node.resolve('prefixbarpostfix', variables) is step_node assert variables == {'x': 'bar'} variables = {} assert node.resolve('prefixwhat', variables) is None assert variables == {}
def test_name_step(): step = Step("foo") assert step.s == "foo" assert step.generalized == "foo" assert step.parts == ("foo", ) assert step.names == [] assert step.converters == {} assert step.discriminator_info() == "foo" assert not step.has_variables() variables = {} assert step.match("foo", variables) assert variables == {} assert not step.match("bar", variables) assert variables == {}
def test_illegal_consecutive_variables(): with pytest.raises(TrajectError): Step('{a}{b}')
def test_converter(): step = Step('{foo:int}') assert step.match('1') == (True, {'foo': 1}) assert step.match('x') == (False, {}) assert step.discriminator_info() == '{int}'
def test_converter(): step = Step("{foo}", converters=dict(foo=Converter(int))) assert step.match("1") == (True, {"foo": 1}) assert step.match("x") == (False, {}) assert step.discriminator_info() == "{}"
def test_illegal_identifier(): with pytest.raises(TrajectError): Step('{1}')
def test_unknown_converter(): with pytest.raises(TrajectError): Step('{foo:blurb}')
def test_converter(): step = Step('{foo}', converters=dict(foo=Converter(int))) assert step.match('1') == (True, {'foo': 1}) assert step.match('x') == (False, {}) assert step.discriminator_info() == '{}'
def test_illegal_variable(): with pytest.raises(TrajectError): Step('{a:int:int}')