/******************************************************************************* * Copyright (c) 2006, 2015 Red Hat Inc.. * 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: * Red Hat Incorporated - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.autotools.tests.editors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.eclipse.cdt.autotools.tests.ProjectTools; import org.eclipse.cdt.internal.autotools.ui.editors.automake.AutomakeDocumentProvider; import org.eclipse.cdt.internal.autotools.ui.editors.automake.AutomakeEditor; import org.eclipse.cdt.internal.autotools.ui.editors.automake.AutomakefileCodeScanner; import org.eclipse.cdt.internal.autotools.ui.editors.automake.AutomakefileSourceConfiguration; import org.eclipse.cdt.internal.autotools.ui.preferences.ColorManager; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITypedRegion; import org.eclipse.jface.text.TextAttribute; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.Token; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; import org.junit.After; import org.junit.Before; import org.junit.Test; public class AutomakeColourizationTests { private ProjectTools tools; private IProject project; private IFile makefileAmFile; static String makefileAmContents = "# This is a comment" + "\n" + "if CONDITION" + "\n" + "MACRO = case1" + "\n" + "else" + "\n" + "MACRO = case2" + "\n" + "$(MACRO)" + "\n" + "${MACRO}" + "\n" + ""; private IWorkbench workbench; private AutomakefileCodeScanner codeScanner; @Before public void setUp() throws Exception { tools = new ProjectTools(); if (!ProjectTools.setup()) fail("could not perform basic project workspace setup"); project = ProjectTools.createProject("testProjectACT"); if(project == null) { fail("Unable to create test project"); } project.open(new NullProgressMonitor()); Display.getDefault().syncExec(() -> { try { makefileAmFile = tools.createFile(project, "Makefile.am", makefileAmContents); workbench = PlatformUI.getWorkbench(); IEditorPart openEditor = org.eclipse.ui.ide.IDE .openEditor(workbench.getActiveWorkbenchWindow().getActivePage(), makefileAmFile, true); AutomakeEditor automakeEditor = (AutomakeEditor) openEditor; AutomakeDocumentProvider docProvider = automakeEditor.getAutomakefileDocumentProvider(); IDocument automakeDocument = docProvider.getDocument(openEditor.getEditorInput()); AutomakefileSourceConfiguration automakeSourceViewerConfig = automakeEditor .getAutomakeSourceViewerConfiguration(); ITypedRegion region = automakeDocument.getPartition(0); codeScanner = automakeSourceViewerConfig.getAutomakeCodeScanner(); codeScanner.setRange(automakeDocument, region.getOffset(), region.getLength()); } catch (Exception e) { fail(e.getMessage()); } }); } IToken getNextToken() { return codeScanner.nextToken(); } @Test public void testAutomakeEditorColourization() { // # This is a comment IToken token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 20); assertEquals(codeScanner.getTokenOffset(), 0); Token token = (Token) token0; TextAttribute ta = (TextAttribute) token.getData(); assertEquals(ColorManager.MAKE_COMMENT_RGB, ta.getForeground().getRGB()); // if CONDITION token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 2); assertEquals(codeScanner.getTokenOffset(), 20); token = (Token) token0; TextAttribute attribute = (TextAttribute) token.getData(); assertEquals(ColorManager.MAKE_KEYWORD_RGB, attribute.getForeground().getRGB()); // blank space between "if" and "CONDITION" token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 1); assertEquals(codeScanner.getTokenOffset(), 22); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertNull(attribute); // if CONDITION token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 9); assertEquals(codeScanner.getTokenOffset(), 23); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertEquals(ColorManager.MAKE_DEFAULT_RGB, attribute.getForeground().getRGB()); // line break token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 1); assertEquals(codeScanner.getTokenOffset(), 32); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertNull(attribute); // MACRO = case1 token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 14); assertEquals(codeScanner.getTokenOffset(), 33); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertEquals(ColorManager.MAKE_MACRO_DEF_RGB, attribute.getForeground().getRGB()); // else token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 4); assertEquals(codeScanner.getTokenOffset(), 47); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertEquals(ColorManager.MAKE_KEYWORD_RGB, attribute.getForeground().getRGB()); // line break token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 1); assertEquals(codeScanner.getTokenOffset(), 51); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertNull(attribute); // MACRO = case2 token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 14); assertEquals(codeScanner.getTokenOffset(), 52); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertEquals(ColorManager.MAKE_MACRO_DEF_RGB, attribute.getForeground().getRGB()); // $(MACRO) token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 8); assertEquals(codeScanner.getTokenOffset(), 66); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertEquals(ColorManager.MAKE_MACRO_REF_RGB, attribute.getForeground().getRGB()); // line break token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 1); assertEquals(codeScanner.getTokenOffset(), 74); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertNull(attribute); // ${MACRO} token0 = getNextToken(); assertTrue(token0 instanceof Token); assertEquals(codeScanner.getTokenLength(), 8); assertEquals(codeScanner.getTokenOffset(), 75); token = (Token) token0; attribute = (TextAttribute) token.getData(); assertEquals(ColorManager.MAKE_MACRO_REF_RGB, attribute.getForeground().getRGB()); } @After public void tearDown() throws Exception { project.delete(true, false, ProjectTools.getMonitor()); } }