Skip to content

Commit

Permalink
Refactor, fix Diff and update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vadimv committed May 21, 2024
1 parent bdeae09 commit 0927d30
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 18 deletions.
4 changes: 2 additions & 2 deletions src/main/java/rsp/dom/DefaultDomChangesContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public void removeStyle(final TreePositionPath path, final String name) {
}

@Override
public void remove(final TreePositionPath parentPath, final TreePositionPath path) {
public void removeNode(final TreePositionPath parentPath, final TreePositionPath path) {
commands.add(new Remove(parentPath, path));
elementsToRemove.add(path);
}
Expand All @@ -38,7 +38,7 @@ public void createText(final TreePositionPath parentPath, final TreePositionPath
}

@Override
public void create(final TreePositionPath path, final XmlNs xmlNs, final String tag) {
public void createTag(final TreePositionPath path, final XmlNs xmlNs, final String tag) {
commands.add(new Create(path, xmlNs, tag));
}

Expand Down
17 changes: 11 additions & 6 deletions src/main/java/rsp/dom/Diff.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public static void diff(final Tag c, final Tag w, final TreePositionPath path, f
Objects.requireNonNull(w);
Objects.requireNonNull(changesPerformer);
if (!c.name.equals(w.name)) {
changesPerformer.remove(path.parent(), path);
changesPerformer.removeNode(path.parent(), path);
create(w, path, changesPerformer);
} else {
diffStyles(c.styles, w.styles, path, changesPerformer);
Expand All @@ -31,20 +31,25 @@ public static void diffChildren(final List<? extends Node> cc, final List<? exte
if (nc instanceof Tag && nw instanceof Tag) {
diff((Tag)nc, (Tag)nw, p, performer);
} else if (nw instanceof Tag) {
performer.remove(p.parent(), p);
performer.removeNode(p.parent(), p);
create(((Tag) nw), parentTagPath, performer);
} else if (nc instanceof Tag) {
performer.remove(p.parent(), p);
performer.removeNode(p.parent(), p);
performer.createText(parentTagPath.parent(), parentTagPath, ((Text)nw).text);
} else if (!((Text)nc).text.equals(((Text)nw).text)) {
performer.createText(parentTagPath.parent(), parentTagPath, ((Text)nw).text);
}
} else if (c.hasNext()) {
c.next();
performer.remove(p.parent(), p);
performer.removeNode(p.parent(), p);
} else {
final Node nw = w.next();
create((Tag)nw, p, performer);
if (nw instanceof Tag) {
create((Tag)nw, p, performer);
} else {
performer.createText(parentTagPath.parent(), parentTagPath, ((Text)nw).text);
}

}
if (c.hasNext() || w.hasNext())
if (p.level() > 0) p = p.incSibling();
Expand Down Expand Up @@ -77,7 +82,7 @@ private static void diffStyles(final CopyOnWriteArraySet<Style> ca,
}

private static void create(final Tag tag, final TreePositionPath path, final DomChangesContext changesPerformer) {
changesPerformer.create(path, tag.xmlns, tag.name);
changesPerformer.createTag(path, tag.xmlns, tag.name);
for (final Style style: tag.styles) {
changesPerformer.setStyle(path, style.name, style.value);
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/rsp/dom/DomChangesContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
public interface DomChangesContext {
void removeAttr(TreePositionPath path, XmlNs xmlNs, String name, boolean isProperty);
void removeStyle(TreePositionPath path, String name);
void remove(TreePositionPath parentPath, TreePositionPath path);
void removeNode(TreePositionPath parentPath, TreePositionPath path);
void setAttr(TreePositionPath path, XmlNs xmlNs, String name, String value, boolean isProperty);
void setStyle(TreePositionPath path, String name, String value);
void createTag(TreePositionPath path, XmlNs xmlNs, String tag);
void createText(TreePositionPath parentPath, TreePositionPath path, String text);
void create(TreePositionPath path, XmlNs xmlNs, String tag);
}
2 changes: 1 addition & 1 deletion src/main/java/rsp/dom/Node.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package rsp.dom;


public interface Node {
public sealed interface Node permits Tag, Text {

void appendString(StringBuilder sb);
}
2 changes: 1 addition & 1 deletion src/main/java/rsp/page/PageRendering.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ private CompletableFuture<HttpResponse> rspResponse(final HttpRequest request) {
final Object sessionLock = new Object();
final PageRenderContext pageRenderContext = new PageRenderContext(pageId,
pageConfigScript.toString(),
DOCUMENT_DOM_PATH,
DOCUMENT_DOM_PATH,
httpStateOrigin,
commandsBuffer,
sessionLock);
Expand Down
52 changes: 46 additions & 6 deletions src/test/java/rsp/dom/DiffTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ void should_remove_and_create_for_different_single_tags() {

final TestChangesContext cp = new TestChangesContext();
Diff.diff(tree1, tree2, basePath, cp);
assertEquals("-TAG::1 +TAG:1:div", cp.resultAsString());
assertEquals("-NODE::1 +TAG:1:div", cp.resultAsString());
}

@Test
Expand All @@ -50,7 +50,47 @@ void should_remove_and_add_for_replaced_tag() {

final TestChangesContext cp = new TestChangesContext();
Diff.diff(tree1, tree2, basePath, cp);
assertEquals("-TAG:1:1_1 +TAG:1_1:a", cp.resultAsString());
assertEquals("-NODE:1:1_1 +TAG:1_1:a", cp.resultAsString());
}

@Test
void should_replace_text_with_text() {
final Tag tree1 = new Tag(XmlNs.html, "div", false);
tree1.addChild(new Text("abc"));

final Tag tree2 = new Tag(XmlNs.html, "div", false);
tree2.addChild(new Text("123"));

final TestChangesContext cp = new TestChangesContext();
Diff.diff(tree1, tree2, basePath, cp);
assertEquals("+TEXT:1:1_1=123", cp.resultAsString());
}


@Test
void should_replace_tag_with_text() {
final Tag tree1 = new Tag(XmlNs.html, "div", false);
tree1.addChild(new Tag(XmlNs.html, "span", false));

final Tag tree2 = new Tag(XmlNs.html, "div", false);
tree2.addChild(new Text("abc"));

final TestChangesContext cp = new TestChangesContext();
Diff.diff(tree1, tree2, basePath, cp);
assertEquals("-NODE:1:1_1+TEXT:1:1_1=abc", cp.resultAsString());
}

@Test
void should_replace_text_with_tag() {
final Tag tree1 = new Tag(XmlNs.html, "div", false);
tree1.addChild(new Text("abc"));

final Tag tree2 = new Tag(XmlNs.html, "div", false);
tree2.addChild(new Tag(XmlNs.html, "span", false));

final TestChangesContext cp = new TestChangesContext();
Diff.diff(tree1, tree2, basePath, cp);
assertEquals("-NODE:1:1_1 +TAG:1_1:span", cp.resultAsString());
}

@Test
Expand All @@ -65,7 +105,7 @@ void should_remove_and_add_for_replaced_tag_with_children() {

final TestChangesContext cp = new TestChangesContext();
Diff.diff(tree1, tree2, basePath, cp);
assertEquals("-TAG::1 +TAG:1:div +TAG:1_1:a +TAG:1_1_1:canvas +TAG:1_1_2:span", cp.resultAsString());
assertEquals("-NODE::1 +TAG:1:div +TAG:1_1:a +TAG:1_1_1:canvas +TAG:1_1_2:span", cp.resultAsString());
}

@Test
Expand Down Expand Up @@ -151,13 +191,13 @@ public String resultAsString() {
}

@Override
public void remove(final TreePositionPath parentId, final TreePositionPath id) {
public void removeNode(final TreePositionPath parentId, final TreePositionPath id) {
insertDelimiter(sb);
sb.append("-TAG:" + parentId + ":" + id);
sb.append("-NODE:" + parentId + ":" + id);
}

@Override
public void create(final TreePositionPath id, final XmlNs xmlNs, final String tag) {
public void createTag(final TreePositionPath id, final XmlNs xmlNs, final String tag) {
insertDelimiter(sb);
sb.append("+TAG:" + id + ":" + tag);
}
Expand Down

0 comments on commit 0927d30

Please sign in to comment.