@@ -10,19 +10,19 @@ import org.junit.experimental.theories.DataPoints
10
10
import org .junit .runner .RunWith
11
11
/**
12
12
* This test verify that after the tranform, the resultant xml node
13
- * uses as many old nodes as possible.
14
- *
15
- * Three transformers class for case -
16
- * One for orginal, one for modified, and one proposed which shows
13
+ * uses as many old nodes as possible.
14
+ *
15
+ * Three transformers class for case -
16
+ * One for orginal, one for modified, and one proposed which shows
17
17
* all are equivalent when it comes to reusing as many nodes as possible
18
18
*/
19
19
object ReuseNodesTest {
20
-
20
+
21
21
class OriginalTranformr (rules : RewriteRule * ) extends RuleTransformer (rules:_* ) {
22
22
override def transform (ns : Seq [Node ]): Seq [Node ] = {
23
23
val xs = ns.toStream map transform
24
24
val (xs1, xs2) = xs zip ns span { case (x, n) => unchanged(n, x) }
25
-
25
+
26
26
if (xs2.isEmpty) ns
27
27
else (xs1 map (_._2)) ++ xs2.head._1 ++ transform(ns drop (xs1.length + 1 ))
28
28
}
@@ -32,7 +32,7 @@ object ReuseNodesTest {
32
32
class ModifiedTranformr (rules : RewriteRule * ) extends RuleTransformer (rules:_* ) {
33
33
override def transform (ns : Seq [Node ]): Seq [Node ] = {
34
34
val changed = ns flatMap transform
35
-
35
+
36
36
if (changed.length != ns.length || (changed, ns).zipped.exists(_ != _)) changed
37
37
else ns
38
38
}
@@ -43,13 +43,13 @@ object ReuseNodesTest {
43
43
override def transform (ns : Seq [Node ]): Seq [Node ] = {
44
44
val xs = ns.toStream map transform
45
45
val (xs1, xs2) = xs zip ns span { case (x, n) => unchanged(n, x) }
46
-
46
+
47
47
if (xs2.isEmpty) ns
48
48
else (xs1 map (_._2)) ++ xs2.head._1 ++ transform(ns drop (xs1.length + 1 ))
49
49
}
50
50
override def transform (n: Node ): Seq [Node ] = super .transform(n)
51
51
}
52
-
52
+
53
53
def rewriteRule = new RewriteRule {
54
54
override def transform (n : Node ): NodeSeq = n match {
55
55
case n if n.label == " change" => Elem (
@@ -58,7 +58,7 @@ object ReuseNodesTest {
58
58
}
59
59
}
60
60
61
- @ DataPoints
61
+ @ DataPoints
62
62
def tranformers () = Array (
63
63
new OriginalTranformr (rewriteRule),
64
64
new ModifiedTranformr (rewriteRule),
@@ -67,40 +67,41 @@ object ReuseNodesTest {
67
67
68
68
@ RunWith (classOf [Theories ])
69
69
class ReuseNodesTest {
70
-
70
+
71
71
@ Theory
72
- def transformReferentialEquality (rt: RuleTransformer ) = {
72
+ def transformReferentialEquality (rt: RuleTransformer ) = {
73
73
val original = <p ><lost /></p >
74
74
val tranformed = rt.transform(original)
75
75
assertTrue(original eq tranformed)
76
76
}
77
-
77
+
78
78
@ Theory
79
- def transformReferentialEqualityOnly (rt: RuleTransformer ) = {
79
+ def transformReferentialEqualityOnly (rt: RuleTransformer ) = {
80
80
val original = <changed ><change ><lost /><a ><b ><c /></b ></a ></change ><a ><b ><c /></b ></a ></changed >
81
81
val transformed = rt.transform(original)
82
82
recursiveAssert(original,transformed)
83
83
}
84
-
84
+
85
85
def recursiveAssert (original: Seq [Node ], transformed: Seq [Node ]): Unit = {
86
86
(original.toList,transformed.toList) match {
87
87
case (Nil , Nil ) => {}
88
- case (x:: xs,y:: ys) => {
88
+ case (x:: xs,y:: ys) => {
89
89
recursiveAssert(x,y)
90
90
recursiveAssert(xs,ys)
91
91
}
92
- }
92
+ case _ => {}
93
+ }
93
94
}
94
-
95
+
95
96
def recursiveAssert (original: Node , transformed: Node ): Unit = {
96
- transformed.label match {
97
+ transformed.label match {
97
98
case " changed" => // do nothing expect this node to be changed
98
99
recursiveAssert(original.child,transformed.child)
99
100
case _ => {
100
101
assertTrue(original eq transformed)
101
- // No need to check for childrens, node being immuatable
102
+ // No need to check for childrens, node being immuatable
102
103
// childs can't be differnt if parents are refertially equal
103
104
}
104
105
}
105
106
}
106
- }
107
+ }
0 commit comments