Пример #1
0
def test_as_dict():
    stack = Metastack()
    stack.set_layer(
        0, 'base', {
            'bool': True,
            'bytes': b'howdy',
            'dict': {
                '1': 2
            },
            'int': 1,
            'list': [1],
            'none': None,
            'set': {1},
            'str': 'howdy',
            'tuple': (1, 2),
        })
    stack.set_layer(0, 'overlay1', {'int': 1000})
    stack.set_layer(0, 'overlay2', {'list': [2]})
    stack.set_layer(0, 'overlay3', {'new_element': True})
    assert stack.as_dict() == {
        'bool': True,
        'bytes': b'howdy',
        'dict': {
            '1': 2
        },
        'int': 1000,
        'list': [1, 2],
        'new_element': True,
        'none': None,
        'set': {1},
        'str': 'howdy',
        'tuple': (1, 2),
    }
Пример #2
0
def test_merge_sets_with_multiple_used_layers():
    stack = Metastack()
    stack.set_layer(0, 'base', {'something': {'a_set': {1, 2}, 'a_value': 5}})
    stack.set_layer(0, 'overlay1', {'something': {'a_set': {3}}})
    stack.set_layer(0, 'overlay2', {'something': {'a_set': {4}}})
    stack.set_layer(0, 'overlay3', {'something': {'a_set': {6, 5}}})
    assert stack.get(('something', 'a_set')) == {1, 2, 3, 4, 5, 6}
Пример #3
0
def test_should_be_frozen():
    stack = Metastack({'foo': {'bar': {1, 2, 3}}})
    foo = stack.get('foo', None)

    with raises(AttributeError):
        foo['bar'].add(4)

    # XXX Remove this if in bw 4.0 and always do the check
    if version_info[0] >= 3:
        with raises(TypeError):
            del foo['bar']
Пример #4
0
def test_merge_lists_with_multiple_used_layers():
    stack = Metastack()
    stack.set_layer(0, 'base', {'something': {'a_list': [1, 2], 'a_value': 5}})
    stack.set_layer(0, 'overlay1', {'something': {'a_list': [3]}})
    stack.set_layer(0, 'overlay2', {'something': {'a_list': [4]}})
    stack.set_layer(0, 'overlay3', {'something': {'a_list': [6, 5]}})
    assert sorted(stack.get(
        ('something', 'a_list'))) == sorted([1, 2, 3, 4, 5, 6])
Пример #5
0
def test_pop_layer():
    stack = Metastack()
    stack.set_layer(0, 'overlay', {'foo': 'bar'})
    stack.set_layer(0, 'overlay', {'foo': 'baz'})
    assert stack.pop_layer(0, 'overlay') == {'foo': 'baz'}
    with raises(KeyError):
        stack.get(('foo', ))
    assert stack.pop_layer(0, 'overlay') == {}
    assert stack.pop_layer(0, 'unknown') == {}
    assert stack.pop_layer(47, 'unknown') == {}
Пример #6
0
def test_as_blame():
    stack = Metastack()
    stack.set_layer(0, 'base', {'something': {'a_list': [1, 2], 'a_value': 5}})
    stack.set_layer(0, 'overlay', {'something': {'a_list': [3]}})
    stack.set_layer(0, 'unrelated', {'something': {'another_value': 10}})
    assert stack.as_blame() == {
        ('something', ): ['base', 'overlay', 'unrelated'],
        ('something', 'a_list'): ['base', 'overlay'],
        ('something', 'a_value'): ['base'],
        ('something', 'another_value'): ['unrelated'],
    }
Пример #7
0
def test_merge_lists_with_multiple_used_layers():
    stack = Metastack({'something': {'a_list': [1, 2], 'a_value': 5}})
    stack._set_layer('identifier1', {'something': {'a_list': [3]}})
    stack._set_layer('identifier2', {'something': {'a_list': [4]}})
    stack._set_layer('identifier3', {'something': {'a_list': [6, 5]}})
    assert sorted(stack.get('something/a_list',
                            None)) == sorted([1, 2, 3, 4, 5, 6])
Пример #8
0
def test_deepcopy():
    stack = Metastack()
    stack.set_layer(0, 'base', {'foo': {'bar': {1, 2, 3}}})
    foo = stack.get(('foo', ))
    foo['bar'].add(4)
    assert stack.get(('foo', 'bar')) == {1, 2, 3}
    del foo['bar']
    assert stack.get(('foo', 'bar'))
Пример #9
0
def test_get_top():
    stack = Metastack()
    stack._set_layer('identifier', {'something': 123})
    assert stack.get('something', None) == 123
Пример #10
0
def test_type_conflicts():
    stack = Metastack({
        'bool': True,
        'bytes': b'howdy',
        'dict': {
            1: 2
        },
        'int': 1,
        'list': [1],
        'none': None,
        'set': {1},
        'str': 'howdy',
        'tuple': (1, 2),
    })
    stack._set_layer(
        'identifier', {
            'bool': None,
            'bytes': None,
            'dict': None,
            'int': None,
            'list': None,
            'none': 1,
            'set': None,
            'str': None,
            'tuple': None,
        })

    with raises(MetastackTypeConflict):
        stack.get('bool', None)

    with raises(MetastackTypeConflict):
        stack.get('bytes', None)

    with raises(MetastackTypeConflict):
        stack.get('dict', None)

    with raises(MetastackTypeConflict):
        stack.get('int', None)

    with raises(MetastackTypeConflict):
        stack.get('list', None)

    with raises(MetastackTypeConflict):
        stack.get('none', None)

    with raises(MetastackTypeConflict):
        stack.get('set', None)

    with raises(MetastackTypeConflict):
        stack.get('str', None)

    with raises(MetastackTypeConflict):
        stack.get('tuple', None)
Пример #11
0
def test_has_top():
    stack = Metastack()
    stack._set_layer('identifier', {'something': 123})
    assert stack.has('something') == True
Пример #12
0
def test_update_layer_for_new_value():
    stack = Metastack({'foo': 'bar'})

    stack._set_layer('identifier', {'something': 123})
    assert stack.get('foo', None) == 'bar'
    assert stack.get('boing', 'default') == 'default'
    assert stack.get('something', None) == 123

    stack._set_layer('identifier', {'something': 456})
    assert stack.get('foo', None) == 'bar'
    assert stack.get('boing', 'default') == 'default'
    assert stack.get('something', None) == 456
Пример #13
0
def test_requesting_empty_path():
    stack = Metastack({'foo': {'bar': 'baz'}})
    assert stack.get('', 'default') == 'default'
Пример #14
0
def test_merge_dicts():
    stack = Metastack()
    stack._set_layer('identifier1', {'something': {'a_value': 3}})
    stack._set_layer('identifier2', {'something': {'another_value': 5}})
    stack._set_layer('identifier3', {'something': {'this': {'and': 'that'}}})
    stack._set_layer('identifier4', {'something': {'a_set': {1, 2}}})
    stack._set_layer('identifier5', {'something': {'a_set': {3, 4}}})
    assert stack.get('something', None) == {
        'a_set': {1, 2, 3, 4},
        'a_value': 3,
        'another_value': 5,
        'this': {
            'and': 'that',
        },
    }
Пример #15
0
def test_merge_sets_with_multiple_used_layers():
    stack = Metastack({'something': {'a_set': {1, 2}, 'a_value': 5}})
    stack._set_layer('identifier1', {'something': {'a_set': {3}}})
    stack._set_layer('identifier2', {'something': {'a_set': {4}}})
    stack._set_layer('identifier3', {'something': {'a_set': {6, 5}}})
    assert stack.get('something/a_set', None) == {1, 2, 3, 4, 5, 6}