Skip to content

Commit 97bfbf5

Browse files
Merge pull request #52 from Overbryd/fix-zipper-up-modified
Mark parent info as modified when moving up in zipper
2 parents cb28221 + 39256ed commit 97bfbf5

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

src/zipper.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ up(#{spec := #{make_node := MakeNode},
9090
Zipper) ->
9191
Children = lists:reverse(Lefts) ++ [Node | Rights],
9292
NewParentNode = MakeNode(ParentNode, Children),
93-
Zipper#{node => NewParentNode, info => ParentInfo};
93+
NewParentInfo = maps:put(is_modified, true, ParentInfo),
94+
Zipper#{node => NewParentNode, info => NewParentInfo};
9495
up(#{info := #{parent_node := Parent, parent_info := ParentInfo}} = Zipper) ->
9596
Zipper#{node => Parent, info => ParentInfo}.
9697

test/zipper_SUITE.erl

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
%% Info
55
-export([zipper_node/1, zipper_children/1]).
66
%% Traverse
7-
-export([zipper_root/1, zipper_next/1, zipper_prev/1, zipper_up/1, zipper_down/1,
7+
-export([zipper_root/1, zipper_next/1, zipper_prev/1, zipper_up/1, zipper_up_modified/1, zipper_down/1,
88
zipper_left/1, zipper_right/1, zipper_leftmost/1, zipper_rightmost/1]).
99
%% Editing
1010
-export([zipper_insert_left/1, zipper_insert_right/1, zipper_replace/1, zipper_edit/1,
@@ -124,6 +124,21 @@ zipper_up(_Config) ->
124124
Earth = root(),
125125
{comment, ""}.
126126

127+
-spec zipper_up_modified(config()) -> {comment, string()}.
128+
zipper_up_modified(_Config) ->
129+
Zipper = zipper_default:map_tree(root(), children),
130+
undefined = zipper:up(Zipper),
131+
Zipper1 = zipper:traverse([next, next, next], Zipper),
132+
Brasil = zipper:node(Zipper1),
133+
Brasil2 = maps:put(attrs, #{name => "Peru"}, Brasil),
134+
ModifiedZipper1 = zipper:replace(Brasil2, Zipper1),
135+
Zipper2 = zipper:up(ModifiedZipper1),
136+
Zipper3 = zipper:up(Zipper2),
137+
Zipper4 = zipper:traverse([next, next, next], Zipper3),
138+
Attrs = maps:get(attrs, zipper:node(Zipper4)),
139+
#{name => "Peru"} = Attrs,
140+
{comment, ""}.
141+
127142
-spec zipper_right(config()) -> {comment, string()}.
128143
zipper_right(_Config) ->
129144
Zipper = zipper_default:map_tree(root(), children),

0 commit comments

Comments
 (0)