Merge branch 'db/javac-ast'
[idea/community.git] / platform / diff-impl / tests / com / intellij / diff / comparison / MergeResolveUtilTest.kt
1 /*
2  * Copyright 2000-2016 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
20 class MergeResolveUtilTest : DiffTestCase() {
21   fun testSimple() {
22     test(
23         "",
24         "",
25         "",
26         ""
27     )
28
29     test(
30         "x x x",
31         "x x x",
32         "x x x",
33         "x x x"
34     )
35
36     test(
37         "x x x",
38         "x Y x",
39         "x x x",
40         "x Y x"
41     )
42
43     test(
44         "x x",
45         "x x",
46         "x Y x",
47         "x Y x"
48     )
49
50     test(
51         "x X x",
52         "x x",
53         "x X x",
54         "x x"
55     )
56   }
57
58   fun testSameModification() {
59     test(
60         "x x x",
61         "x Y x",
62         "x Y x",
63         "x Y x"
64     )
65
66     test(
67         "x x",
68         "x Y x",
69         "x Y x",
70         "x Y x"
71     )
72
73     test(
74         "x X x",
75         "x x",
76         "x x",
77         "x x"
78     )
79   }
80
81   fun testNonConflictingChanges() {
82     test(
83         "x x x",
84         "x Y x x",
85         "x x Z x",
86         "x Y x Z x"
87     )
88
89     test(
90         "x",
91         "x Y",
92         "Z x",
93         "Z x Y"
94     )
95
96     test(
97         "x x",
98         "x",
99         "Z x x",
100         "Z x"
101     )
102   }
103
104   fun testFailure() {
105     test(
106         "x x x",
107         "x Y x",
108         "x Z x",
109         null
110     )
111
112     test(
113         "x x",
114         "x Y x",
115         "x Z x",
116         null
117     )
118   }
119
120   fun testNonFailureConflicts() {
121     test(
122         "x X x",
123         "x x",
124         "x X Y x",
125         "x Y x"
126     )
127
128     test(
129         "x X x",
130         "x x",
131         "x Y X x",
132         "x Y x"
133     )
134
135     test(
136         "x X Y x",
137         "x X x",
138         "x Y x",
139         "x x"
140     )
141
142     test(
143         "x X Y Z x",
144         "x X x",
145         "x Z x",
146         "x x"
147     )
148
149     test(
150         "x A B C D E F G H K x",
151         "x C F K x",
152         "x A D H x",
153         "x x"
154     )
155   }
156
157   fun testConfusingConflicts() {
158     // these cases might be a failure as well
159
160     test(
161         "x X x",
162         "x x",
163         "x Z x",
164         "xZ x"
165     )
166
167     test(
168         "x X X x",
169         "x X Y X x",
170         "x x",
171         "x Y x"
172     )
173
174     test(
175         "x X x",
176         "x x",
177         "x Y x",
178         "xY x"
179     )
180
181
182     test(
183         "x X X x",
184         "x Y x",
185         "x X Y x",
186         "x Y x"
187     )
188   }
189
190   private fun test(base: String, left: String, right: String, expected: String?) {
191     val actual = MergeResolveUtil.tryResolveConflict(left, base, right)
192     assertEquals(expected, actual?.toString())
193   }
194 }