diff: separate tests for words and inner fragments
authorAleksey Pivovarov <AMPivovarov@gmail.com>
Fri, 11 Nov 2016 09:55:37 +0000 (12:55 +0300)
committerAleksey Pivovarov <AMPivovarov@gmail.com>
Mon, 14 Nov 2016 12:27:19 +0000 (15:27 +0300)
platform/diff-impl/tests/com/intellij/diff/comparison/ComparisonUtilTestBase.kt
platform/diff-impl/tests/com/intellij/diff/comparison/WordComparisonUtilTest.kt

index 1559310cec45f346a49c077a25314577d916c5da..ed4e081b95418cd8a49158f178a32f57758140b6 100644 (file)
@@ -32,16 +32,24 @@ abstract class ComparisonUtilTestBase : DiffTestCase() {
     if (expected != null) checkLineChanges(fragments, expected)
   }
 
-  private fun doWordTest(before: Document, after: Document, matchings: Couple<BitSet>?, expected: List<Change>?, policy: ComparisonPolicy) {
+  private fun doLineInnerTest(before: Document, after: Document, matchings: Couple<BitSet>?, expected: List<Change>?, policy: ComparisonPolicy) {
     val rawFragments = MANAGER.compareLinesInner(before.charsSequence, after.charsSequence, policy, INDICATOR)
     val fragments = MANAGER.squash(rawFragments)
-    checkConsistencyWord(fragments, before, after)
+    checkConsistencyLineInner(fragments, before, after)
 
     val diffFragments = fragments[0].innerFragments!!
     if (matchings != null) checkDiffMatching(diffFragments, matchings)
     if (expected != null) checkDiffChanges(diffFragments, expected)
   }
 
+  private fun doWordTest(before: Document, after: Document, matchings: Couple<BitSet>?, expected: List<Change>?, policy: ComparisonPolicy) {
+    val fragments = MANAGER.compareWords(before.charsSequence, after.charsSequence, policy, INDICATOR)
+    checkConsistency(fragments, before, after)
+
+    if (matchings != null) checkDiffMatching(fragments, matchings)
+    if (expected != null) checkDiffChanges(fragments, expected)
+  }
+
   private fun doCharTest(before: Document, after: Document, matchings: Couple<BitSet>?, expected: List<Change>?, policy: ComparisonPolicy) {
     val fragments = MANAGER.compareChars(before.charsSequence, after.charsSequence, policy, INDICATOR)
     checkConsistency(fragments, before, after)
@@ -62,7 +70,7 @@ abstract class ComparisonUtilTestBase : DiffTestCase() {
     if (expected != null) checkLineChanges(fragments, expected)
   }
 
-  private fun checkConsistencyWord(fragments: List<LineFragment>, before: Document, after: Document) {
+  private fun checkConsistencyLineInner(fragments: List<LineFragment>, before: Document, after: Document) {
     assertTrue(fragments.size == 1)
     val fragment = fragments[0]
 
@@ -169,7 +177,7 @@ abstract class ComparisonUtilTestBase : DiffTestCase() {
   //
 
   internal enum class TestType {
-    LINE, WORD, CHAR, SPLITTER
+    LINE, LINE_INNER, WORD, CHAR, SPLITTER
   }
 
   internal inner class TestBuilder(private val type: TestType) {
@@ -215,6 +223,10 @@ abstract class ComparisonUtilTestBase : DiffTestCase() {
 
         when (type) {
           TestType.LINE -> doLineTest(before!!, after!!, matchings, change, policy)
+          TestType.LINE_INNER -> {
+            doLineInnerTest(before!!, after!!, matchings, change, policy)
+            doWordTest(before!!, after!!, matchings, change, policy)
+          }
           TestType.WORD -> doWordTest(before!!, after!!, matchings, change, policy)
           TestType.CHAR -> doCharTest(before!!, after!!, matchings, change, policy)
           TestType.SPLITTER -> {
@@ -361,6 +373,8 @@ abstract class ComparisonUtilTestBase : DiffTestCase() {
 
   internal fun lines(f: TestBuilder.() -> Unit): Unit = doTest(TestType.LINE, f)
 
+  internal fun lines_inner(f: TestBuilder.() -> Unit): Unit = doTest(TestType.LINE_INNER, f)
+
   internal fun words(f: TestBuilder.() -> Unit): Unit = doTest(TestType.WORD, f)
 
   internal fun chars(f: TestBuilder.() -> Unit): Unit = doTest(TestType.CHAR, f)
index 21407c1afabd5947bceee92b7c5dc92bc7f44930..99d224a836deec38af6f309e88d77b3cc8d2e969 100644 (file)
@@ -17,72 +17,72 @@ package com.intellij.diff.comparison
 
 class WordComparisonUtilTest : ComparisonUtilTestBase() {
   fun testSimpleCases() {
-    words {
+    lines_inner {
       ("x z" - "y z")
       ("-  " - "-  ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x z" - "y z")
       ("-  " - "-  ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       (" x z" - "y z")
       ("--  " - "-  ").default()
       (" -  " - "-  ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x z " - "y z")
       ("-  -" - "-  ").default()
       ("-   " - "-  ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x z " - "y z")
       ("-  -" - "-  ").default()
       ("-   " - "-  ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x z" - " y z ")
       ("-  " - "--  -").default()
       ("-  " - " -   ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x y" - "x z ")
       ("  -" - "  --").default()
       ("  -" - "  - ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x,y" - "x")
       (" --" - " ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x,y" - "y")
       ("-- " - " ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       (".x=" - ".!=")
       (" - " - " - ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("X xyz1 Z" - "X xyz2 Z")
       ("  ----  " - "  ----  ").default()
       testAll()
@@ -90,52 +90,52 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
   }
 
   fun testPunctuation() {
-    words {
+    lines_inner {
       (" x.z.x " - "x..x")
       ("-  -  -" - "    ").default()
       ("   -   " - "    ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x..x" - " x.z.x ")
       ("    " - "-  -  -").default()
       ("    " - "   -   ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x ... z" - "y ... z")
       ("-      " - "-      ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x ... z" - "x ... y")
       ("      -" - "      -").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x ,... z" - "x ... y")
       ("  -    -" - "      -").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x . , .. z" - "x ... y")
       ("   ---   -" - "      -").default()
       ("    -    -" - "      -").ignore()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x==y==z" - "x====z")
       ("   -   " - "      ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x====z" - "x==t==z")
       ("      " - "   -   ").default()
       testAll()
@@ -143,13 +143,13 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
   }
 
   fun testOldDiffBug() {
-    words {
+    lines_inner {
       ("x'y'>" - "x'>")
       ("  -- " - "   ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x'>" - "x'y'>")
       ("   " - "  -- ").default()
       testAll()
@@ -157,14 +157,14 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
   }
 
   fun testWhitespaceOnlyChanges() {
-    words {
+    lines_inner {
       ("x  =z" - "x=  z")
       (" --  " - "  -- ").default()
       testDefault()
       testTrim()
     }
 
-    words {
+    lines_inner {
       ("x  =" - "x=  z")
       (" -- " - "  ---").default()
       ("    " - "    -").ignore()
@@ -173,7 +173,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
   }
 
   fun testNewlines() {
-    words {
+    lines_inner {
       (" x _ y _ z " - "x z")
       ("- ------  -" - "   ").default()
       ("     -     " - "   ").trim()
@@ -181,7 +181,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x z" - " x _ y _ z ")
       ("   " - "- ------  -").default()
       ("   " - "     -     ").trim()
@@ -191,7 +191,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
   }
 
   fun testFixedBugs() {
-    words {
+    lines_inner {
       (".! " - ".  y!")
       ("  -" - " --- ").default()
       ("   " - " --- ").trim()
@@ -199,7 +199,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
       testAll()
     }
 
-    words {
+    lines_inner {
       (" x n" - " y_  x m")
       ("   -" - "----   -").default()
       ("   -" - " -     -").trim()
@@ -207,7 +207,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x_" - "x!  ")
       (" -" - " ---").default()
       ("  " - " -  ").trim()
@@ -217,35 +217,35 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
   }
 
   fun testInnerWhitespaces() {
-    words {
+    lines_inner {
       ("<< x >>" - "<.<>.>")
       ("  ---  " - " -  - ").default()
       ("   -   " - " -  - ").ignore()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("<< x >>" - "y<<x>>y")
       ("  - -  " - "-     -").default()
       ("       " - "-     -").ignore()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x .. z" - "x y .. z")
       ("      " - " --     ").default() // TODO: looks wrong
       ("      " - "  -     ").ignore()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("  x..z" - "x..y  ")
       ("--   -" - "   ---").default()
       ("     -" - "   -  ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       (" x y x _ x z x " - "x x_x x")
       ("- --  - - --  -" - "       ").default()
       ("  --      --   " - "       ").trim()
@@ -256,28 +256,28 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
 
   fun testAlgorithmSpecific() {
     // prefer words over punctuation
-    words {
+    lines_inner {
       ("...x" - "x...")
       ("--- " - " ---").default()
       testAll()
     }
 
     // prefer longer words sequences
-    words {
+    lines_inner {
       ("x x y" - "x y")
       ("--   " - "   ").default()
       ("-    " - "   ").ignore()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("y x x" - "y x")
       ("   --" - "   ").default()
       ("    -" - "   ").ignore()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("A X A B" - "A B")
       ("----   " - "   ").default()
       ("---    " - "   ").ignore()
@@ -285,14 +285,14 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
     }
 
     // prefer less modified 'sentences'
-    words {
+    lines_inner {
       ("A.X A.Z" - "A.X A.Y A.Z")
       ("       " - "   ----    ").default()
       ("       " - "    ---    ").ignore()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("X.A Z.A" - "X.A Y.A Z.A")
       ("       " - "   ----    ").default()
       ("       " - "    ---    ").ignore()
@@ -300,7 +300,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
     }
 
     // prefer punctuation over whitespaces
-    words {
+    lines_inner {
       (".   " - "   .")
       (" ---" - "--- ").default()
       testDefault()
@@ -308,26 +308,26 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
   }
 
   fun `test legacy cases from ByWordTest`() {
-    words {
+    lines_inner {
       ("abc def, 123" - "ab def, 12")
       ("---      ---" - "--      --").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       (" a[xy]+1" - ",a[]+1")
       ("-  --   " - "-     ").default()
       ("   --   " - "-     ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("0987_  a.g();_" - "yyyy_")
       ("------------- " - "---- ").default()
       testAll()
     }
 
-    words {
+    lines_inner {
       ("  abc_2222_" - "    x = abc_zzzz_")
     //("      ---- " - "--  ----    ---- ").legacy()
       ("      ---- " - " ------     ---- ").default()
@@ -335,7 +335,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
       testAll()
     }
 
-    words { // Idea58505
+    lines_inner { // Idea58505
       ("   if (eventMerger!=null && !dataSelection.getValueIsAdjusting()) {" -
        "   if (eventMerger!=null && (dataSelection==null || !dataSelection.getValueIsAdjusting())) {")
     //("                            -                                      " -
@@ -347,7 +347,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
       testAll()
     }
 
-    words { // Idea56428
+    lines_inner { // Idea56428
       ("messageInsertStatement = connection.prepareStatement(\"INSERT INTO AUDIT (AUDIT_TYPE_ID, STATUS, SERVER_ID, INSTANCE_ID, REQUEST_ID) VALUES (?, ?, ?, ?, ?)\");" -
        "messageInsertStatement = connection.prepareStatement(\"INSERT INTO AUDIT (AUDIT_TYPE_ID, CREATION_TIMESTAMP, STATUS, SERVER_ID, INSTANCE_ID, REQUEST_ID) VALUES (?, ?, ?, ?, ?, ?)\");").plainSource()
     //("                                                     .                                                                                                     .   " -
@@ -359,14 +359,14 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
       testAll()
     }
 
-    words {
+    lines_inner {
       ("f(a, b);" - "f(a,_  b);")
       ("        " - "    --    ").default()
       ("        " - "          ").trim()
       testAll()
     }
 
-    words {
+    lines_inner {
       (" o.f(a)" - "o. f( b)")
       ("-    - " - "  -  -- ").default()
       ("     - " - "  -  -- ").trim()
@@ -374,7 +374,7 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
       testAll()
     }
 
-    words {
+    lines_inner {
       (" 123 " - "xyz")
       (" --- " - "---").trim()
       testTrim()
@@ -382,14 +382,14 @@ class WordComparisonUtilTest : ComparisonUtilTestBase() {
   }
 
   fun testEmptyRangePositions() {
-    words {
+    lines_inner {
       ("x? y" - "x y")
       (" -  " - "   ").default()
       default(del(1, 1, 1))
       testAll()
     }
 
-    words {
+    lines_inner {
       ("x ?y" - "x y")
       ("  - " - "   ").default()
       default(del(2, 2, 1))