blob: 42072760c8444834b814973ba2c41b344e28ecf7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.ant.grammar;
import java.util.ArrayList;
import java.util.List;
import javax.swing.text.AbstractDocument;
import javax.swing.text.DefaultStyledDocument;
import org.netbeans.junit.NbTestCase;
import org.netbeans.spi.editor.highlighting.HighlightsContainer;
import org.netbeans.spi.editor.highlighting.HighlightsSequence;
public class AntHighlightsContainerTest extends NbTestCase {
public AntHighlightsContainerTest(String name) {
super(name);
}
public void testHighlighting() throws Exception {
assertEquals("<echo>whatever</echo>", highlight("<echo>whatever</echo>"));
assertEquals("<echo>(${prop})</echo>", highlight("<echo>${prop}</echo>"));
assertEquals("<echo>(${prop})</echo>", highlight("<ech|o>${prop}</e|cho>"));
assertEquals("<echo>(${pr)(op})</echo>", highlight("<echo>${pr|op}</echo>"));
assertEquals("<echo>(${prop})</echo>", highlight("<echo>|${prop}</echo>"));
assertEquals("<echo>(${prop})</echo>", highlight("<echo>${prop}|</echo>"));
assertEquals("<echo>(${prop})</echo>", highlight("<echo>|${prop}|</echo>"));
assertEquals("<echo>$${foo}=(${foo})</echo>", highlight("<echo>$${foo}=${foo}</echo>"));
assertEquals("<echo>(@{prop})</echo>", highlight("<echo>@{prop}</echo>"));
assertEquals("<echo>${(@{prop})}</echo>", highlight("<echo>${@{prop}}</echo>"));
}
/**
* @param text document which may be split at {@code |} to indicate where segments are split
* @return same document with highlighted parts surrounded by {@code (...)} (not merged at split points)
*/
private static String highlight(String text) throws Exception {
List<Integer> splits = new ArrayList<Integer>();
AbstractDocument doc = new DefaultStyledDocument();
int lastSplit = 0;
for (String piece : text.split("[|]")) {
doc.insertString(doc.getLength(), piece, null);
lastSplit += piece.length();
splits.add(lastSplit);
}
HighlightsContainer hc = new AntHighlightsContainer(doc, null);
int pos = 0;
StringBuilder b = new StringBuilder();
for (int split : splits) {
// XXX can also test passing Integer.MAX_VALUE as endOffset when split == doc.length
HighlightsSequence hs = hc.getHighlights(pos, split);
while (hs.moveNext()) {
// System.err.println("pos=" + pos + " split=" + split + " startOffset=" + hs.getStartOffset() + " endOffset=" + hs.getEndOffset());
b.append(doc.getText(pos, hs.getStartOffset() - pos));
pos = hs.getEndOffset();
b.append('(');
b.append(doc.getText(hs.getStartOffset(), pos - hs.getStartOffset()));
b.append(')');
}
b.append(doc.getText(pos, split - pos));
pos = split;
}
return b.toString();
}
}