/**
* Copyright (c) Red Hat, Inc., contributors and others 2004 - 2014. All rights reserved
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.tools.aesh.ui.internal.viewer;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.widgets.Shell;
import org.jboss.tools.aesh.core.document.Document;
import org.jboss.tools.aesh.core.document.Style;
import org.jboss.tools.aesh.ui.internal.document.StyleImpl;
import org.jboss.tools.aesh.ui.test.util.TestDocument;
import org.junit.Assert;
import org.junit.Test;
public class DocumentListenerImplTest {
private StyleRange testStyleRange = null;
private StyleImpl testStyle = null;
private int documentLength = 0;
private StyleRange currentStyleRange = null;
private Document testDocument = new TestDocument() {
@Override public Style getCurrentStyle() { return testStyle; }
@Override public int getLength() { return documentLength; }
};
private TextWidget testTextWidget = new TextWidget(new Shell(), SWT.NONE) {
@Override public void setStyleRange(StyleRange styleRange) { currentStyleRange = styleRange; }
};
private DocumentListenerImpl testDocumentListenerImpl =
new DocumentListenerImpl(testTextWidget, testDocument);
@Test
public void testConstructor() {
Assert.assertEquals(testTextWidget, testDocumentListenerImpl.textWidget);
Assert.assertEquals(testDocument, testDocumentListenerImpl.document);
}
@Test
public void testDocumentAboutToBeChanged() {
// documentAboutToBeChanged() has an empty body
testDocumentListenerImpl.documentAboutToBeChanged(new DocumentEvent());
Assert.assertTrue(true);
}
@Test
public void testDocumentChanged() {
// no strange things happen when textWidget == null
testDocumentListenerImpl.textWidget = null;
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertTrue(true);
// if textWidget != null and !textWidget.isDisposed()
testDocumentListenerImpl.textWidget = testTextWidget;
testStyle = new StyleImpl(new StyleRange());
testTextWidget.setText("blah\nblah\nblah\nblah\nblah");
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertEquals(4, testTextWidget.getTopIndex());
// if styleRange == null
currentStyleRange = null;
testStyle = new StyleImpl(null);
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertNull(currentStyleRange);
// if event.getLength() != null
currentStyleRange = null;
testStyleRange = new StyleRange();
testStyle = new StyleImpl(testStyleRange);
DocumentEvent documentEvent = new DocumentEvent();
documentEvent.fLength = 5;
testDocumentListenerImpl.documentChanged(documentEvent);
Assert.assertNull(currentStyleRange);
// if styleRange.start < 0
currentStyleRange = null;
testStyleRange.start = -5;
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertNull(currentStyleRange);
// if styleRange.start > document.getLength()
currentStyleRange = null;
testStyleRange.start = 50;
documentLength = 20;
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertNull(currentStyleRange);
// if styleRange.length < 0
currentStyleRange = null;
testStyleRange.length = -5;
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertNull(currentStyleRange);
// if styleRange.start + styleRange.length > document.getLength()
currentStyleRange = null;
testStyleRange.start = 10;
testStyleRange.length = 15;
documentLength = 20;
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertNull(currentStyleRange);
// if all conditions are met
currentStyleRange = null;
testStyleRange.start = 5;
testStyleRange.length = 10;
documentLength = 20;
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertEquals(testStyleRange, currentStyleRange);
// if textWidget is disposed
currentStyleRange = null;
testTextWidget.dispose();
testDocumentListenerImpl.documentChanged(new DocumentEvent());
Assert.assertNull(currentStyleRange);
}
}