blob: 0cf28dbaf3ff63817c4df0ab31e310fb1416b313 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019 Red Hat Inc. and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.jface.text.tests.source.inlined;
import java.util.Collections;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.ITextViewerExtension2;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.AnnotationModel;
import org.eclipse.jface.text.source.IAnnotationAccess;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.inlined.InlinedAnnotationSupport;
import org.eclipse.jface.text.source.inlined.LineContentAnnotation;
import org.eclipse.jface.text.tests.source.inlined.LineContentBoundsDrawingTest.AccessAllAnnoations;
import org.eclipse.jface.text.tests.source.inlined.LineContentBoundsDrawingTest.TestAnnotationPainter;
import org.eclipse.jface.text.tests.util.DisplayHelper;
public class AnnotationOnTabTest {
private Shell fParent;
@Before
public void setUp() {
fParent= new Shell();
}
@After
public void tearDown() {
fParent.dispose();
fParent = null;
}
@Test
public void testTextBoundsMatchPaintedArea() {
fParent.setLayout(new FillLayout());
// Create source viewer and initialize the content
ISourceViewer sourceViewer = new SourceViewer(fParent,null,
SWT.V_SCROLL | SWT.BORDER);
sourceViewer.setDocument(new Document("\t\treference\n\t\tannotated"), new AnnotationModel());
StyledText textWidget= sourceViewer.getTextWidget();
textWidget.setFont(JFaceResources.getTextFont());
// Initialize inlined annotations support
InlinedAnnotationSupport support = new InlinedAnnotationSupport();
IAnnotationAccess annotationAccess = new AccessAllAnnoations();
TestAnnotationPainter painter = new TestAnnotationPainter(sourceViewer, annotationAccess);
((ITextViewerExtension2) sourceViewer).addPainter(painter);
support.install(sourceViewer, painter);
// add annotations
int annotationIndex = sourceViewer.getDocument().get().indexOf("annotated");
LineContentAnnotation annotation= new LineContentAnnotation(new Position(annotationIndex, 1), sourceViewer);
annotation.setText("a"); // single char, so overall annoation is 3 chars, less than default 4 chars
support.updateAnnotations(Collections.singleton(annotation));
fParent.open();
Assert.assertTrue(new DisplayHelper() {
@Override
protected boolean condition() {
return textWidget.isVisible() && painter.wasPainted();
}
}.waitForCondition(textWidget.getDisplay(), 2000));
DisplayHelper.sleep(textWidget.getDisplay(), 1000);
// XXX disabled due bug 549110
// int referenceIndex = textWidget.getText().indexOf("reference");
// Rectangle referenceBounds = textWidget.getTextBounds(referenceIndex, referenceIndex);
// Rectangle annotatedCharactedBounds = textWidget.getTextBounds(annotationIndex, annotationIndex);
// Assert.assertTrue("Annotation didn't shift target character to the right, it most likely replaced the tab instead of expanding it", referenceBounds.x < annotatedCharactedBounds.x);
}
}