1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
import logging
from trame_server.core import State
logger = logging.getLogger(__name__)
def test_translation():
root_state = State()
a_state = State(internal=root_state)
b_state = State(internal=root_state)
root_state.ready()
a_state.ready()
b_state.ready()
# Since the translator doesn't have a prefix or any translation,
# changing a piece of state on any of the 3 states applies to all
root_state.value = 123
assert root_state.value == 123
assert a_state.value == 123
assert b_state.value == 123
a_state.value = 456
assert root_state.value == 456
assert a_state.value == 456
assert b_state.value == 456
b_state.value = 789
assert root_state.value == 789
assert a_state.value == 789
assert b_state.value == 789
# Add translations for a_state and b_state which will cause
# "value" to point to a different key
a_state.translator.add_translation("value", "a_value")
b_state.translator.add_translation("value", "b_value")
root_state.value = 123
a_state.value = 456
b_state.value = 789
assert root_state.value == 123
assert a_state.value == 456
assert b_state.value == 789
assert root_state.a_value == 456
assert root_state.b_value == 789
expected_state = {
"value": 123,
"a_value": 456,
"b_value": 789,
}
assert expected_state == root_state.to_dict()
def test_prefix():
root_state = State()
a_state = State(internal=root_state)
b_state = State(internal=root_state)
root_state.ready()
a_state.ready()
b_state.ready()
a_state.translator.set_prefix("a_")
b_state.translator.set_prefix("b_")
root_state.value = 123
a_state.value = 456
b_state.value = 789
assert root_state.value == 123
assert a_state.value == 456
assert b_state.value == 789
assert root_state.a_value == 456
assert root_state.b_value == 789
expected_state = {
"value": 123,
"a_value": 456,
"b_value": 789,
}
assert expected_state == root_state.to_dict()
def test_prefix_and_translation():
root_state = State()
a_state = State(internal=root_state)
b_state = State(internal=root_state)
root_state.ready()
a_state.ready()
b_state.ready()
# The states will be isolated by default
a_state.translator.set_prefix("a_")
b_state.translator.set_prefix("b_")
# But by adding translations for a_state and b_state
# that point to a common key they are still able to interact
root_state.translator.add_translation("shared_value", "common_shared_value")
a_state.translator.add_translation("shared_value", "common_shared_value")
b_state.translator.add_translation("shared_value", "common_shared_value")
root_state.value = 123
a_state.value = 456
b_state.value = 789
assert root_state.value == 123
assert a_state.value == 456
assert b_state.value == 789
assert root_state.a_value == 456
assert root_state.b_value == 789
root_state.shared_value = 123
assert root_state.shared_value == 123
assert a_state.shared_value == 123
assert b_state.shared_value == 123
a_state.shared_value = 456
assert root_state.shared_value == 456
assert a_state.shared_value == 456
assert b_state.shared_value == 456
b_state.shared_value = 789
assert root_state.shared_value == 789
assert a_state.shared_value == 789
assert b_state.shared_value == 789
expected_state = {
"value": 123,
"a_value": 456,
"b_value": 789,
"common_shared_value": 789,
}
assert expected_state == root_state.to_dict()
|