Refactored JsonViewer
This commit is contained in:
@@ -1,12 +1,11 @@
|
||||
import pytest
|
||||
|
||||
from components.debugger.components.JsonViewer import *
|
||||
from components.jsonviewer.components.JsonViewer import *
|
||||
from helpers import matches, span_icon, search_elements_by_name, extract_jsonviewer_node
|
||||
|
||||
JSON_VIEWER_INSTANCE_ID = "json_viewer"
|
||||
ML_20 = "margin-left: 20px;"
|
||||
CLS_PREFIX = "mmt-jsonviewer"
|
||||
USER_ID = "user_id"
|
||||
|
||||
dn = DictNode
|
||||
ln = ListNode
|
||||
@@ -15,7 +14,7 @@ n = ValueNode
|
||||
|
||||
@pytest.fixture()
|
||||
def json_viewer(session):
|
||||
return JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, {})
|
||||
return JsonViewer(session, JSON_VIEWER_INSTANCE_ID, {})
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
@@ -41,7 +40,7 @@ def jv_id(x):
|
||||
ln([{"a": [1, 2]}], jv_id(0), 0, [dn({"a": [1, 2]}, jv_id(1), 1, {"a": ln([1, 2], jv_id(2), 2, [n(1), n(2)])})]))
|
||||
])
|
||||
def test_i_can_create_node(data, expected_node):
|
||||
json_viewer_ = JsonViewer(None, JSON_VIEWER_INSTANCE_ID, None, USER_ID, data)
|
||||
json_viewer_ = JsonViewer(None, JSON_VIEWER_INSTANCE_ID, data)
|
||||
assert json_viewer_.node == expected_node
|
||||
|
||||
|
||||
@@ -63,7 +62,7 @@ def test_i_can_render(json_viewer):
|
||||
(None, Span("null", cls=f"{CLS_PREFIX}-null")),
|
||||
])
|
||||
def test_i_can_render_simple_value(session, value, expected_inner):
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, value)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, value)
|
||||
actual = jsonv.__ft__()
|
||||
to_compare = search_elements_by_name(actual, "div", attrs={"id": f"{jv_id('root')}"})[0]
|
||||
expected = Div(
|
||||
@@ -81,7 +80,7 @@ def test_i_can_render_simple_value(session, value, expected_inner):
|
||||
|
||||
def test_i_can_render_expanded_list_node(session):
|
||||
value = [1, "hello", True]
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, value)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, value)
|
||||
# Force expansion of the node
|
||||
jsonv.set_folding_mode("expand")
|
||||
|
||||
@@ -107,7 +106,7 @@ def test_i_can_render_expanded_list_node(session):
|
||||
|
||||
def test_i_can_render_expanded_dict_node(session):
|
||||
value = {"a": 1, "b": "hello", "c": True}
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, value)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, value)
|
||||
# Force expansion of the node
|
||||
jsonv.set_folding_mode("expand")
|
||||
|
||||
@@ -133,7 +132,7 @@ def test_i_can_render_expanded_dict_node(session):
|
||||
|
||||
def test_i_can_render_expanded_list_of_dict_node(session):
|
||||
value = [{"a": 1, "b": "hello"}]
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, value)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, value)
|
||||
# Force expansion of all nodes
|
||||
jsonv.set_folding_mode("expand")
|
||||
|
||||
@@ -167,7 +166,7 @@ def test_i_can_render_expanded_list_of_dict_node(session):
|
||||
def test_render_with_collapse_folding_mode(session):
|
||||
# Create a nested structure to test collapse rendering
|
||||
value = {"a": [1, 2, 3], "b": {"x": "y", "z": True}}
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, value)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, value)
|
||||
|
||||
# Ensure folding mode is set to collapse (should be default)
|
||||
jsonv.set_folding_mode("collapse")
|
||||
@@ -195,7 +194,7 @@ def test_render_with_collapse_folding_mode(session):
|
||||
def test_render_with_specific_node_expanded_in_collapse_mode(session):
|
||||
# Create a nested structure to test mixed collapse/expand rendering
|
||||
value = {"a": [1, 2, 3], "b": {"x": "y", "z": True}}
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, value)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, value)
|
||||
|
||||
# Ensure folding mode is set to collapse
|
||||
jsonv.set_folding_mode(FoldingMode.COLLAPSE)
|
||||
@@ -230,7 +229,7 @@ def test_render_with_specific_node_expanded_in_collapse_mode(session):
|
||||
def test_multiple_folding_levels_in_collapse_mode(session):
|
||||
# Create a deeply nested structure
|
||||
value = {"level1": {"level2": {"level3": [1, 2, 3]}}}
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, value)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, value)
|
||||
|
||||
# Set folding mode to collapse
|
||||
jsonv.set_folding_mode(FoldingMode.COLLAPSE)
|
||||
@@ -262,7 +261,7 @@ def test_multiple_folding_levels_in_collapse_mode(session):
|
||||
|
||||
def test_toggle_between_folding_modes(session):
|
||||
value = {"a": [1, 2, 3], "b": {"x": "y"}}
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, value)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, value)
|
||||
|
||||
# Start with collapse mode
|
||||
jsonv.set_folding_mode("collapse")
|
||||
@@ -271,19 +270,19 @@ def test_toggle_between_folding_modes(session):
|
||||
jsonv.set_node_folding(f"{JSON_VIEWER_INSTANCE_ID}-0", "expand")
|
||||
|
||||
# Verify node is in tracked nodes (exceptions to collapse mode)
|
||||
assert f"{JSON_VIEWER_INSTANCE_ID}-0" in jsonv._nodes_to_track
|
||||
assert f"{JSON_VIEWER_INSTANCE_ID}-0" in jsonv._folding_manager.get_nodes_to_track()
|
||||
|
||||
# Now switch to expand mode
|
||||
jsonv.set_folding_mode("expand")
|
||||
|
||||
# Tracked nodes should be cleared
|
||||
assert len(jsonv._nodes_to_track) == 0
|
||||
assert len(jsonv._folding_manager.get_nodes_to_track()) == 0
|
||||
|
||||
# Collapse specific node
|
||||
jsonv.set_node_folding(f"{JSON_VIEWER_INSTANCE_ID}-0", "collapse")
|
||||
|
||||
# Verify node is in tracked nodes (exceptions to expand mode)
|
||||
assert f"{JSON_VIEWER_INSTANCE_ID}-0" in jsonv._nodes_to_track
|
||||
assert f"{JSON_VIEWER_INSTANCE_ID}-0" in jsonv._folding_manager.get_nodes_to_track()
|
||||
|
||||
# Render and verify the output
|
||||
actual = jsonv.__ft__()
|
||||
@@ -307,7 +306,7 @@ def test_custom_hook_rendering(session, helper):
|
||||
hooks = [(custom_predicate, custom_renderer)]
|
||||
|
||||
# Create JsonViewer with the custom hook
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, "custom_hook_test", hooks=hooks)
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, "custom_hook_test", hooks=hooks)
|
||||
|
||||
actual = jsonv.__ft__()
|
||||
to_compare = search_elements_by_name(actual, "div", attrs={"id": f"{jv_id('root')}"})[0]
|
||||
@@ -324,7 +323,7 @@ def test_custom_hook_rendering(session, helper):
|
||||
|
||||
|
||||
def test_folding_mode_operations(session):
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, None, USER_ID, {"a": [1, 2, 3]})
|
||||
jsonv = JsonViewer(session, JSON_VIEWER_INSTANCE_ID, {"a": [1, 2, 3]})
|
||||
|
||||
# Check default folding mode
|
||||
assert jsonv.get_folding_mode() == "collapse"
|
||||
@@ -338,11 +337,11 @@ def test_folding_mode_operations(session):
|
||||
jsonv.set_node_folding(node_id, "collapse")
|
||||
|
||||
# Node should be in tracked nodes since it differs from the default mode
|
||||
assert node_id in jsonv._nodes_to_track
|
||||
assert node_id in jsonv._folding_manager.get_nodes_to_track()
|
||||
|
||||
# Restore to match default mode
|
||||
jsonv.set_node_folding(node_id, "expand")
|
||||
assert node_id not in jsonv._nodes_to_track
|
||||
assert node_id not in jsonv._folding_manager.get_nodes_to_track()
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input_value, expected_output", [
|
||||
@@ -353,7 +352,7 @@ def test_folding_mode_operations(session):
|
||||
('', '""'), # Empty string
|
||||
])
|
||||
def test_add_quotes(input_value, expected_output):
|
||||
result = JsonViewer.add_quotes(input_value)
|
||||
result = JsonViewerHelper.add_quotes(input_value)
|
||||
assert result == expected_output
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user