blob: 6361c42070a9725b0ee79c4bcee5700b8006cd4f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2018 xored software, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Sam Faktorovich)
*******************************************************************************/
package org.eclipse.dltk.ui.tests.text;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.dltk.ui.text.DLTKColorConstants;
import org.eclipse.dltk.ui.text.rules.CombinedWordRule;
import org.eclipse.jface.text.rules.IToken;
import org.junit.Test;
public class TodoHighlightingTest {
private static final String COMMENT_KEY = DLTKColorConstants.DLTK_SINGLE_LINE_COMMENT;
private static final String TODO_KEY = DLTKColorConstants.TASK_TAG;
private TestScriptCommentScanner createScanner(String[] tags,
boolean caseSensitive) {
return new TestScriptCommentScanner(tags, COMMENT_KEY, TODO_KEY,
caseSensitive);
}
private IToken evaluateTodoRule(final TestScriptCommentScanner scanner) {
final int oldOffset = scanner.getTokenOffset();
final IToken token = scanner.createTodoRule().evaluate(scanner);
assertEquals(oldOffset, scanner.getTokenOffset());
return token;
}
private IToken getDefaultToken(final TestScriptCommentScanner scanner) {
return ((CombinedWordRule) scanner.createTodoRule()).getDefaultToken();
}
protected List<TokenPos> findTodoTokens(String data, String[] tags) {
TestScriptCommentScanner scanner = createScanner(tags, true);
scanner.setText(data);
final IToken todoToken = scanner.getToken(TODO_KEY);
List<TokenPos> result = new ArrayList<>();
IToken t;
while (!(t = scanner.nextToken()).isEOF()) {
if (t.equals(todoToken)) {
result.add(new TokenPos(scanner.getTokenOffset(), scanner
.getTokenLength()));
}
}
return result;
}
/**
* @param data
* @param tag
* @return
*/
protected List<TokenPos> findTodoTokens(String data, String tag) {
return findTodoTokens(data, new String[] { tag });
}
private TokenPos newTokenPos(final String data, final String tag) {
return new TokenPos(data.indexOf(tag), tag.length());
}
private static final String TODO = "TODO";
private static final String FIXME = "FIXME";
@Test
public void testTodoRuleMiss1() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText("x");
final IToken token = evaluateTodoRule(scanner);
assertEquals(token, getDefaultToken(scanner));
assertEquals(scanner.getText().length(), scanner.getTokenLength());
}
@Test
public void testTodoRuleMiss2() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText("x" + TODO);
final IToken token = evaluateTodoRule(scanner);
assertEquals(token, getDefaultToken(scanner));
assertEquals(scanner.getText().length(), scanner.getTokenLength());
}
@Test
public void testTodoRuleMiss3() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText(TODO + "x");
final IToken token = evaluateTodoRule(scanner);
assertEquals(token, getDefaultToken(scanner));
assertEquals(scanner.getText().length(), scanner.getTokenLength());
}
@Test
public void testTodoRuleMiss4() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText(FIXME + "x");
final IToken token = evaluateTodoRule(scanner);
assertEquals(token, getDefaultToken(scanner));
assertEquals(scanner.getText().length(), scanner.getTokenLength());
}
@Test
public void testTodoRuleMiss5() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText("x" + FIXME);
final IToken token = evaluateTodoRule(scanner);
assertEquals(token, getDefaultToken(scanner));
assertEquals(scanner.getText().length(), scanner.getTokenLength());
}
@Test
public void testTodoRuleMatch1() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText(TODO);
final IToken token = evaluateTodoRule(scanner);
assertTrue(token.isOther());
assertEquals(TODO.length(), scanner.getTokenLength());
}
@Test
public void testTodoRuleMatch2() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText(FIXME);
final IToken token = evaluateTodoRule(scanner);
assertTrue(token.isOther());
assertEquals(FIXME.length(), scanner.getTokenLength());
}
@Test
public void testTodoRuleMatch3() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText(TODO + " ");
final IToken token = evaluateTodoRule(scanner);
assertTrue(token.isOther());
assertEquals(TODO.length(), scanner.getTokenLength());
}
@Test
public void testTodoRuleMatch4() {
final TestScriptCommentScanner scanner = createScanner(new String[] {
TODO, FIXME }, true);
scanner.setText(FIXME + " ");
final IToken token = evaluateTodoRule(scanner);
assertTrue(token.isOther());
assertEquals(FIXME.length(), scanner.getTokenLength());
}
@Test
public void testBare() {
final String data = "#TODO";
List<TokenPos> tokens = findTodoTokens(data, TODO);
assertEquals(1, tokens.size());
assertEquals(newTokenPos(data, TODO), tokens.get(0));
}
@Test
public void testBare1() {
final String data = "#TODO";
List<TokenPos> tokens = findTodoTokens(data,
new String[] { TODO, FIXME });
assertEquals(1, tokens.size());
assertEquals(newTokenPos(data, TODO), tokens.get(0));
}
@Test
public void testBare2() {
final String data = "#FIXME";
List<TokenPos> tokens = findTodoTokens(data,
new String[] { TODO, FIXME });
assertEquals(1, tokens.size());
assertEquals(newTokenPos(data, FIXME), tokens.get(0));
}
@Test
public void testNormal() {
final String data = "#TODO comment";
List<TokenPos> tokens = findTodoTokens(data, TODO);
assertEquals(1, tokens.size());
assertEquals(newTokenPos(data, TODO), tokens.get(0));
}
@Test
public void testSpaced() {
final String data = "# TODO comment";
List<TokenPos> tokens = findTodoTokens(data, TODO);
assertEquals(1, tokens.size());
assertEquals(newTokenPos(data, TODO), tokens.get(0));
}
@Test
public void testPrefixed() {
final String data = "# aTODO comment";
List<TokenPos> tokens = findTodoTokens(data, TODO);
assertEquals(0, tokens.size());
}
@Test
public void testNoTodo() {
final String data = "#hello";
List<TokenPos> tokens = findTodoTokens(data, TODO);
assertEquals(0, tokens.size());
}
@Test
public void testSuffixed() {
final String data = "# TODOa comment";
List<TokenPos> tokens = findTodoTokens(data, TODO);
assertEquals(0, tokens.size());
}
@Test
public void testLegallySuffixed() {
final String data = "# TODO: comment";
List<TokenPos> tokens = findTodoTokens(data, TODO);
assertEquals(1, tokens.size());
assertEquals(newTokenPos(data, TODO), tokens.get(0));
}
@Test
public void testDoubleTagOccurence() throws Exception {
String data = "# TODO add TODO tag support";
List<TokenPos> tokens = findTodoTokens(data, TODO);
assertEquals(1, tokens.size());
assertEquals(newTokenPos(data, TODO), tokens.get(0));
}
@Test
public void testDifferentTags() {
String data = "#FIXME tag support";
List<TokenPos> tokens = findTodoTokens(data,
new String[] { TODO, FIXME });
assertEquals(1, tokens.size());
assertEquals(newTokenPos(data, FIXME), tokens.get(0));
}
}