blob: 13d9b8572e3d922bfcd02fa499f9736d026f5c15 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Etienne Reichenbach and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Etienne Reichenbach - initial implementation
*******************************************************************************/
package org.eclipse.ui.workbench.texteditor.tests;
import static org.eclipse.jface.text.DocumentRewriteSessionType.SEQUENTIAL;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.internal.texteditor.quickdiff.DocumentLineDiffer;
/**
* Tests for the {@link DocumentLineDiffer}.
*/
public class DocumentLineDifferTest {
/** The document to connect to the {@link #fLineDiffer}. */
private Document fDocument= new Document();
/** The {@link DocumentLineDiffer line differ} under test. */
private DocumentLineDiffer fLineDiffer= new DocumentLineDiffer();
/**
* Test that when a document is {@link DocumentLineDiffer#connect(IDocument) connected} the
* differ is neither {@link DocumentLineDiffer#isSuspended() suspended} nor
* {@link DocumentLineDiffer#isSynchronized() synchronized} (i.e. it is initializing).
*
* @throws Exception unexpected exception
*/
@Test
public void testLineDifferStateAfterConnectingDocument() throws Exception {
// when
fLineDiffer.connect(fDocument);
// then
assertFalse(fLineDiffer.isSuspended());
assertFalse(fLineDiffer.isSynchronized());
}
/**
* Test that when {@link DocumentLineDiffer#suspend()} is called the differ is
* {@link DocumentLineDiffer#isSuspended() suspended}.
*
* @throws Exception unexpected exception
*/
@Test
public void suspendSuspendsLineDiffer() throws Exception {
// given
fLineDiffer.connect(fDocument);
// when
fLineDiffer.suspend();
// then
assertTrue(fLineDiffer.isSuspended());
}
/**
* Test that after a suspended {@link DocumentLineDiffer line differ} is
* {@link DocumentLineDiffer#resume() resumed} is not {@link DocumentLineDiffer#isSuspended()
* suspended} anymore.
*
* @throws Exception unexpected exception
*/
@Test
public void lineDifferNotSuspendedAfterResumeIsCalled() throws Exception {
// given
fLineDiffer.connect(fDocument);
fLineDiffer.suspend();
// when
fLineDiffer.resume();
// then
assertFalse(fLineDiffer.isSuspended());
assertFalse(fLineDiffer.isSynchronized());
}
/**
* Test that when the document connected to a non suspended {@link DocumentLineDiffer line
* differ} starts a rewrite session the differ gets suspended.
*
* @throws Exception unexpected exception
*/
@Test
public void nonSuspendedLineDifferNotSuspendedAfterStartRewriteSession() throws Exception {
// given
fLineDiffer.connect(fDocument);
// when
fDocument.startRewriteSession(SEQUENTIAL);
// then
assertTrue(fLineDiffer.isSuspended());
}
/**
* Test that when a document connected to a suspended {@link DocumentLineDiffer line differ}
* stops the rewrite session, the differ gets suspended.
*
* @throws Exception unexpected exception
*/
@Test
public void suspendedLineDifferStillSuspendedAfterStopRewriteSession() throws Exception {
// given
fLineDiffer.connect(fDocument);
fLineDiffer.suspend();
// when
fDocument.stopRewriteSession(fDocument.getActiveRewriteSession());
// then
assertTrue(fLineDiffer.isSuspended());
}
/**
* Test that when the document connected to a suspended {@link DocumentLineDiffer line differ}
* goes through a rewrite session, the differ stays suspended.
*
* @throws Exception unexpected exception
*/
@Test
public void suspendedLineDifferStaysSuspendedAfterDocumentRewriteSession() throws Exception {
// given
fLineDiffer.connect(fDocument);
fLineDiffer.suspend();
// when
fDocument.startRewriteSession(SEQUENTIAL);
fDocument.stopRewriteSession(fDocument.getActiveRewriteSession());
// then
assertTrue(fLineDiffer.isSuspended());
}
/**
* Test that when a document connected to a non suspended {@link DocumentLineDiffer line differ}
* goes through a rewrite session, the differ stays in the non suspended state.
*
* @throws Exception unexpected exception
*/
@Test
public void nonSuspendedLineDifferStaysNonSuspendedAfterDocumentRewriteSession() throws Exception {
// given
fLineDiffer.connect(fDocument);
// when
fDocument.startRewriteSession(SEQUENTIAL);
fDocument.stopRewriteSession(fDocument.getActiveRewriteSession());
// then
assertFalse(fLineDiffer.isSuspended());
}
}