4141import org .eclipse .compare .contentmergeviewer .TextMergeViewer ;
4242import org .eclipse .compare .contentmergeviewer .TokenComparator ;
4343import org .eclipse .compare .internal .ChangeCompareFilterPropertyAction ;
44+ import org .eclipse .compare .internal .ComparePreferencePage ;
45+ import org .eclipse .compare .internal .CompareUIPlugin ;
4446import org .eclipse .compare .internal .IMergeViewerTestAdapter ;
4547import org .eclipse .compare .internal .MergeViewerContentProvider ;
4648import org .eclipse .compare .internal .Utilities ;
5658import org .eclipse .jface .action .IContributionItem ;
5759import org .eclipse .jface .action .ToolBarManager ;
5860import org .eclipse .jface .dialogs .Dialog ;
61+ import org .eclipse .jface .preference .IPreferenceStore ;
5962import org .eclipse .jface .text .Document ;
6063import org .eclipse .jface .text .DocumentEvent ;
6164import org .eclipse .jface .text .IDocument ;
7578
7679public class TextMergeViewerTest {
7780
81+ static boolean rightIsChanged () {
82+ IPreferenceStore store = CompareUIPlugin .getDefault ().getPreferenceStore ();
83+ return store .getBoolean (ComparePreferencePage .SWAPPED );
84+ }
85+
86+ static boolean leftIsChanged () {
87+ return !rightIsChanged ();
88+ }
89+
7890 /**
7991 * Returns a boolean value indicating whether or not the contents
8092 * of the given streams are considered to be equal. Closes both input streams.
@@ -179,7 +191,7 @@ public String getType() {
179191 }
180192 @ Override
181193 public InputStream getContents () {
182- return new ByteArrayInputStream (contents );
194+ return contents == null ? null : new ByteArrayInputStream (contents );
183195 }
184196 @ Override
185197 protected Object clone () {
@@ -207,7 +219,7 @@ public boolean equals(Object obj) {
207219 return false ;
208220 }
209221 public Object getContentsAsString () {
210- return new String (contents );
222+ return contents == null ? null : new String (contents );
211223 }
212224 }
213225
@@ -286,31 +298,41 @@ public void testCopyRightToLeft() throws Exception {
286298 DiffNode parentNode = new DiffNode (new ParentTestElement (), new ParentTestElement ());
287299 String copiedText = "hi there" ;
288300 DiffNode testNode = new DiffNode (parentNode , Differencer .CHANGE , null , new EditableTestElement ("some text" .getBytes ()), new EditableTestElement (copiedText .getBytes ()));
301+ assertEquals ("some text" , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
302+ assertEquals (copiedText , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
303+
289304 runInDialog (testNode , () -> {
290- viewer .copy (false /* rightToLeft */ );
305+ viewer .copy (rightIsChanged () /* rightToLeft */ );
291306 saveViewerContents ();
292307 });
293- assertEquals (copiedText , ((EditableTestElement )testNode .getLeft ()).getContentsAsString ());
308+ assertEquals (copiedText , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
309+ assertEquals (copiedText , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
294310 }
295311
296312 @ Test
297313 public void testCopyLeftToRight () throws Exception {
298314 DiffNode parentNode = new DiffNode (new ParentTestElement (), new ParentTestElement ());
299315 String copiedText = "hi there" ;
300316 DiffNode testNode = new DiffNode (parentNode , Differencer .CHANGE , null , new EditableTestElement (copiedText .getBytes ()), new EditableTestElement ("some text" .getBytes ()));
317+ assertEquals (copiedText , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
318+ assertEquals ("some text" , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
319+
301320 runInDialog (testNode , () -> {
302- viewer .copy (true /* leftToRight */ );
321+ viewer .copy (leftIsChanged () /* leftToRight */ );
303322 saveViewerContents ();
304323 });
305- assertEquals (copiedText , ((EditableTestElement )testNode .getRight ()).getContentsAsString ());
324+ assertEquals (copiedText , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
325+ assertEquals (copiedText , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
306326 }
307327
308328 @ Test
309329 public void testCopyRightToEmptyLeft () throws Exception {
310330 DiffNode parentNode = new DiffNode (new ParentTestElement (), new ParentTestElement ());
311331 DiffNode testNode = new DiffNode (parentNode , Differencer .ADDITION , null , null , new EditableTestElement ("hi there" .getBytes ()));
332+ assertNull (testNode .getLeft ());
333+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
312334 runInDialog (testNode , () -> {
313- viewer .copy (false /* rightToLeft */ );
335+ viewer .copy (rightIsChanged () /* rightToLeft */ );
314336 saveViewerContents ();
315337 });
316338 assertEquals (testNode .getRight (), testNode .getLeft ());
@@ -320,8 +342,10 @@ public void testCopyRightToEmptyLeft() throws Exception {
320342 public void testCopyLeftToEmptyRight () throws Exception {
321343 DiffNode parentNode = new DiffNode (new ParentTestElement (), new ParentTestElement ());
322344 DiffNode testNode = new DiffNode (parentNode , Differencer .DELETION , null , new EditableTestElement ("hi there" .getBytes ()), null );
345+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
346+ assertNull (testNode .getRight ());
323347 runInDialog (testNode , () -> {
324- viewer .copy (true /* leftToRight */ );
348+ viewer .copy (leftIsChanged () /* leftToRight */ );
325349 saveViewerContents ();
326350 });
327351 assertEquals (testNode .getRight (), testNode .getLeft ());
@@ -331,8 +355,10 @@ public void testCopyLeftToEmptyRight() throws Exception {
331355 public void testCopyEmptyLeftToRight () throws Exception {
332356 DiffNode parentNode = new DiffNode (new ParentTestElement (), new ParentTestElement ());
333357 DiffNode testNode = new DiffNode (parentNode , Differencer .ADDITION , null , null , new EditableTestElement ("hi there" .getBytes ()));
358+ assertNull (testNode .getLeft ());
359+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
334360 runInDialog (testNode , () -> {
335- viewer .copy (true /* leftToRight */ );
361+ viewer .copy (leftIsChanged () /* leftToRight */ );
336362 saveViewerContents ();
337363 });
338364 assertNull (testNode .getLeft ());
@@ -343,8 +369,10 @@ public void testCopyEmptyLeftToRight() throws Exception {
343369 public void testCopyEmptyRightToLeft () throws Exception {
344370 DiffNode parentNode = new DiffNode (new ParentTestElement (), new ParentTestElement ());
345371 DiffNode testNode = new DiffNode (parentNode , Differencer .DELETION , null , new EditableTestElement ("hi there" .getBytes ()), null );
372+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
373+ assertNull (testNode .getRight ());
346374 runInDialog (testNode , () -> {
347- viewer .copy (false /* rightToLeft */ );
375+ viewer .copy (rightIsChanged () /* rightToLeft */ );
348376 saveViewerContents ();
349377 });
350378 assertNull (testNode .getLeft ());
@@ -354,53 +382,81 @@ public void testCopyEmptyRightToLeft() throws Exception {
354382 @ Test
355383 public void testModifyLeft () throws Exception {
356384 DiffNode testNode = new DiffNode (new EditableTestElement ("hi there" .getBytes ()), null );
385+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
386+ assertNull (testNode .getRight ());
387+
357388 final String newText = "New text" ;
358389 runInDialog (testNode , () -> {
359- IDocument doc = getDocument (true /* left */ );
390+ IDocument doc = getDocument (leftIsChanged () /* left */ );
360391 doc .set (newText );
361392 saveViewerContents ();
362393 });
363394 assertEquals (newText , ((EditableTestElement )testNode .getLeft ()).getContentsAsString ());
395+ assertNull (testNode .getRight ());
364396 }
365397
366398 @ Test
367399 public void testModifyRight () throws Exception {
368400 DiffNode testNode = new DiffNode (null , new EditableTestElement ("hi there" .getBytes ()));
401+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
402+ assertNull (testNode .getLeft ());
369403 final String newText = "New text" ;
370404 runInDialog (testNode , () -> {
371- IDocument doc = getDocument (false /* right */ );
405+ IDocument doc = getDocument (rightIsChanged () /* right */ );
372406 doc .set (newText );
373407 saveViewerContents ();
374408 });
375409 assertEquals (newText , ((EditableTestElement )testNode .getRight ()).getContentsAsString ());
410+ assertNull (testNode .getLeft ());
376411 }
377412
378413 @ Test
379414 public void testCopyEmptyRightToLeftAndModify () throws Exception {
380415 DiffNode parentNode = new DiffNode (new ParentTestElement (), new ParentTestElement ());
381- DiffNode testNode = new DiffNode (parentNode , Differencer .ADDITION , null , null , new EditableTestElement ("hi there" .getBytes ()));
416+ int kind = leftIsChanged () ? Differencer .ADDITION : Differencer .DELETION ;
417+ DiffNode testNode = new DiffNode (parentNode , kind , null , new EditableTestElement (null ), new EditableTestElement ("hi there" .getBytes ()));
418+ assertNull (((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
419+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
420+
382421 final String newText = "New text" ;
383422 runInDialog (testNode , () -> {
384- viewer .copy (false /* rightToLeft */ );
385- IDocument doc = getDocument (true /* left */ );
423+ viewer .copy (rightIsChanged () /* rightToLeft */ );
424+ IDocument doc = getDocument (leftIsChanged () /* left */ );
386425 doc .set (newText );
387426 saveViewerContents ();
388427 });
389- assertEquals (newText , ((EditableTestElement )testNode .getLeft ()).getContentsAsString ());
428+
429+ if (leftIsChanged ()) {
430+ assertEquals (newText , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
431+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
432+ } else {
433+ assertEquals (newText , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
434+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
435+ }
390436 }
391437
392438 @ Test
393439 public void testCopyEmptyLeftToRightAndModify () throws Exception {
394440 DiffNode parentNode = new DiffNode (new ParentTestElement (), new ParentTestElement ());
395- DiffNode testNode = new DiffNode (parentNode , Differencer .DELETION , null , new EditableTestElement ("hi there" .getBytes ()), null );
441+ int kind = leftIsChanged () ? Differencer .DELETION : Differencer .ADDITION ;
442+ DiffNode testNode = new DiffNode (parentNode , kind , null , new EditableTestElement ("hi there" .getBytes ()), new EditableTestElement (null ));
443+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
444+ assertNull (((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
445+
396446 final String newText = "New text" ;
397447 runInDialog (testNode , () -> {
398- viewer .copy (true /* leftToRight */ );
399- IDocument doc = getDocument (false /* right */ );
448+ viewer .copy (leftIsChanged () /* leftToRight */ );
449+ IDocument doc = getDocument (rightIsChanged () /* right */ );
400450 doc .set (newText );
401451 saveViewerContents ();
402452 });
403- assertEquals (newText , ((EditableTestElement )testNode .getRight ()).getContentsAsString ());
453+ if (leftIsChanged ()) {
454+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
455+ assertEquals (newText , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
456+ } else {
457+ assertEquals ("hi there" , ((EditableTestElement ) testNode .getRight ()).getContentsAsString ());
458+ assertEquals (newText , ((EditableTestElement ) testNode .getLeft ()).getContentsAsString ());
459+ }
404460 }
405461
406462 @ Test
@@ -414,8 +470,12 @@ public void testCompareFilter() throws Exception {
414470 leftString .getBytes ());
415471 final EditableTestElement rightElement = new EditableTestElement (
416472 rightString .getBytes ());
417- DiffNode testNode = new DiffNode (parentNode , Differencer .CHANGE , null ,
418- leftElement , rightElement );
473+ DiffNode testNode ;
474+ if (leftIsChanged ()) {
475+ testNode = new DiffNode (parentNode , Differencer .CHANGE , null , leftElement , rightElement );
476+ } else {
477+ testNode = new DiffNode (parentNode , Differencer .CHANGE , null , rightElement , leftElement );
478+ }
419479 final CompareConfiguration cc = new CompareConfiguration ();
420480 runInDialog (testNode , () -> {
421481 Object adapter = viewer
0 commit comments