[duplicates] enable duplicates analysis in PyCharm/WebStorm/PhpStorm/RubyMine
[idea/community.git] / platform / diff-impl / tests / com / intellij / diff / comparison / TrimUtilTest.kt
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.diff.comparison
17
18 import com.intellij.diff.DiffTestCase
19 import com.intellij.openapi.util.text.StringUtil
20
21 class TrimUtilTest : DiffTestCase() {
22   private val PUNCTUATION = "(){}[],./?`~!@#$%^&*-=+|\\;:'\"<>"
23
24   fun testPunctuation() {
25     for (c in Character.MIN_VALUE..Character.MAX_VALUE) {
26       assertIsPunctuation(c, isPunctuation(c))
27     }
28   }
29
30   fun testContinuousScript() {
31     assertIsAlpha("!? \t\n+~", false)
32
33     assertIsAlpha("AB12", true)
34     assertIsAlpha("АБВ汉语日ひรไ", true)
35     assertIsAlpha("óèäñĀ", true)
36     assertIsAlpha("\r_\u0001", true)
37     assertIsAlpha("$chSmile$chMan", true)
38
39     assertIsContinuous("12_ABZ", false)
40     assertIsContinuous("АБВ", false)
41     assertIsContinuous("ʁit", false)
42     assertIsContinuous("음훈", false)
43     assertIsContinuous("óèäñĀ", false)
44     assertIsContinuous("\r_\u0001", false)
45
46     assertIsContinuous("象形文字", true)
47     assertIsContinuous("อักษรไ", true)
48     assertIsContinuous("ひらがなカタカナ日本語", true)
49     assertIsContinuous("汉语漢語", true)
50     assertIsContinuous("☺♥", true)
51     assertIsContinuous("$chSmile$chMan", true)
52     assertIsContinuous("\u200e\u200f\u061c", true)
53   }
54
55   private fun assertIsPunctuation(c: Char, actual: Boolean) {
56     assertEquals(StringUtil.containsChar(PUNCTUATION, c), actual, "'" + c + "' - " + c.toInt())
57   }
58
59   private fun assertIsAlpha(text: String, expected: Boolean) {
60     text.codePoints().forEach {
61       assertEquals(expected, isAlpha(it), "$it - ${it.codePointValue}")
62     }
63   }
64
65   private fun assertIsContinuous(text: String, expected: Boolean) {
66     text.codePoints().forEach {
67       assertEquals(expected, isContinuousScript(it), "$it - ${it.codePointValue}")
68     }
69   }
70
71   private val Int.codePointValue: String get() = StringBuilder().appendCodePoint(this).toString()
72 }