/*
* xtc - The eXTensible Compiler
* Copyright (C) 2006-2007 Robert Grimm
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*/
package xtc.util;
import java.util.Arrays;
/**
* Unit tests for utilities.
*
* @author Robert Grimm
* @version $Revision: 1.5 $
*/
public class UtilitiesTest extends junit.framework.TestCase {
/** Create a new test class. */
public UtilitiesTest() { /* Nothing to do. */ }
/** Test {@link Utilities#isQualified(String)}. */
public void testIsQualified() {
assertFalse(Utilities.isQualified(""));
assertFalse(Utilities.isQualified("a"));
assertFalse(Utilities.isQualified("aa"));
assertFalse(Utilities.isQualified("aaa"));
assertFalse(Utilities.isQualified("a()"));
assertFalse(Utilities.isQualified("a(a)"));
assertFalse(Utilities.isQualified("a(.)"));
assertFalse(Utilities.isQualified("a(..)"));
assertFalse(Utilities.isQualified("a(...)"));
assertFalse(Utilities.isQualified("a(...)()"));
assertFalse(Utilities.isQualified("a(...)(.)"));
assertFalse(Utilities.isQualified("a(...)(..)"));
assertFalse(Utilities.isQualified("a(...)(...)"));
assertTrue(Utilities.isQualified("."));
assertTrue(Utilities.isQualified("a."));
assertTrue(Utilities.isQualified(".b"));
assertTrue(Utilities.isQualified("a.b"));
assertTrue(Utilities.isQualified("aa.bb"));
assertTrue(Utilities.isQualified("aaa.bbb"));
assertTrue(Utilities.isQualified("().()"));
assertTrue(Utilities.isQualified("()().()()"));
assertTrue(Utilities.isQualified("()()().()()()"));
assertTrue(Utilities.isQualified("aaa.bbb."));
assertTrue(Utilities.isQualified(".aaa.bbb"));
}
/** Test {@link Utilities#getQualifier(String)}. */
public void testGetQualifier() {
assertNull(Utilities.getQualifier(""));
assertNull(Utilities.getQualifier("a"));
assertNull(Utilities.getQualifier("aa"));
assertNull(Utilities.getQualifier("aaa"));
assertEquals("", Utilities.getQualifier("."));
assertEquals("", Utilities.getQualifier(".a"));
assertEquals("", Utilities.getQualifier(".aa"));
assertEquals("", Utilities.getQualifier(".aaa"));
assertEquals(".", Utilities.getQualifier("..a"));
assertEquals("..", Utilities.getQualifier("...aa"));
assertEquals("...", Utilities.getQualifier("....aa"));
assertEquals("..(.)", Utilities.getQualifier("..(.).aa"));
assertEquals("..", Utilities.getQualifier("...(.)"));
assertEquals("..", Utilities.getQualifier("...(.)a"));
assertEquals("..", Utilities.getQualifier("...(.)aa"));
assertEquals("..", Utilities.getQualifier("...(.)(.)"));
assertEquals("..", Utilities.getQualifier("...(.)(.)a"));
}
/** Test {@link Utilities#getName(String)}. */
public void testGetName() {
assertEquals("", Utilities.getName(""));
assertEquals("a", Utilities.getName("a"));
assertEquals("aa", Utilities.getName("aa"));
assertEquals("aaa", Utilities.getName("aaa"));
assertEquals("", Utilities.getName("."));
assertEquals("", Utilities.getName("a."));
assertEquals("", Utilities.getName("aa."));
assertEquals("", Utilities.getName("aaa."));
assertEquals("a", Utilities.getName(".a"));
assertEquals("aa", Utilities.getName(".aa"));
assertEquals("aaa", Utilities.getName(".aaa"));
assertEquals("aaa", Utilities.getName("..aaa"));
assertEquals("aaa", Utilities.getName("...aaa"));
assertEquals("(.)", Utilities.getName("..(.)"));
assertEquals("(.)a", Utilities.getName("..(.)a"));
assertEquals("(.)aa", Utilities.getName("..(.)aa"));
assertEquals("(.)aaa", Utilities.getName("..(.)aaa"));
assertEquals("(..)aaa", Utilities.getName(".(..)aaa"));
assertEquals("()", Utilities.getName("..()"));
assertEquals("()()", Utilities.getName("..()()"));
assertEquals("(.)(.)", Utilities.getName("..(.)(.)"));
}
/**
* Test {@link Utilities#toIdentifier(String)}. Note that {@link
* Utilities#toPath(String)} and {@link
* Utilities#toPath(String,String)} build on the same internal
* helper method.
*/
public void testToIdentifier() {
assertEquals("", Utilities.toIdentifier(""));
assertEquals("$", Utilities.toIdentifier("."));
assertEquals("$$", Utilities.toIdentifier(".."));
assertEquals("$$$", Utilities.toIdentifier("..."));
assertEquals("$a", Utilities.toIdentifier(".a"));
assertEquals("$$a", Utilities.toIdentifier("..a"));
assertEquals("$$$a", Utilities.toIdentifier("...a"));
assertEquals("a$", Utilities.toIdentifier("a."));
assertEquals("a$$", Utilities.toIdentifier("a.."));
assertEquals("a$$$", Utilities.toIdentifier("a..."));
assertEquals("a$a", Utilities.toIdentifier("a.a"));
assertEquals("a$$a", Utilities.toIdentifier("a..a"));
assertEquals("a$$$a", Utilities.toIdentifier("a...a"));
assertEquals("$aa", Utilities.toIdentifier(".aa"));
assertEquals("aa$", Utilities.toIdentifier("aa."));
assertEquals("aa$aa", Utilities.toIdentifier("aa.aa"));
assertEquals("$aaa", Utilities.toIdentifier(".aaa"));
assertEquals("aaa$", Utilities.toIdentifier("aaa."));
assertEquals("aaa$aaa", Utilities.toIdentifier("aaa.aaa"));
assertEquals("()", Utilities.toIdentifier("()"));
assertEquals("(.)", Utilities.toIdentifier("(.)"));
assertEquals("(.)(.)", Utilities.toIdentifier("(.)(.)"));
assertEquals("$(.)(.)", Utilities.toIdentifier(".(.)(.)"));
assertEquals("(.)$(.)", Utilities.toIdentifier("(.).(.)"));
assertEquals("(.)(.)$", Utilities.toIdentifier("(.)(.)."));
}
/** Test {@link Utilities#toComponents(String)}. */
public void testToComponents() {
assertTrue(Arrays.equals(new String[] { "" },
Utilities.toComponents("")));
assertTrue(Arrays.equals(new String[] { "a" },
Utilities.toComponents("a")));
assertTrue(Arrays.equals(new String[] { "aa" },
Utilities.toComponents("aa")));
assertTrue(Arrays.equals(new String[] { "aaa" },
Utilities.toComponents("aaa")));
assertTrue(Arrays.equals(new String[] { "()" },
Utilities.toComponents("()")));
assertTrue(Arrays.equals(new String[] { "(.)" },
Utilities.toComponents("(.)")));
assertTrue(Arrays.equals(new String[] { "(.)(.)" },
Utilities.toComponents("(.)(.)")));
assertTrue(Arrays.equals(new String[] { "", "" },
Utilities.toComponents(".")));
assertTrue(Arrays.equals(new String[] { "", "", "" },
Utilities.toComponents("..")));
assertTrue(Arrays.equals(new String[] { "", "", "", "" },
Utilities.toComponents("...")));
assertTrue(Arrays.equals(new String[] { "a", "" },
Utilities.toComponents("a.")));
assertTrue(Arrays.equals(new String[] { "", "a" },
Utilities.toComponents(".a")));
assertTrue(Arrays.equals(new String[] { "a", "a" },
Utilities.toComponents("a.a")));
assertTrue(Arrays.equals(new String[] { "a", "a", "a" },
Utilities.toComponents("a.a.a")));
assertTrue(Arrays.equals(new String[] { "a", "a", "a", "a" },
Utilities.toComponents("a.a.a.a")));
}
/** Test {@link Pair#append(Pair)} and {@link Pair#setLastTail(Pair)}. */
public void testAppendix() {
Pair<Integer> l1 = Pair.empty();
l1 = new Pair<Integer>(2, l1);
l1 = new Pair<Integer>(1, l1);
Pair<Integer> l2 = Pair.empty();
l2 = new Pair<Integer>(4, l2);
l2 = new Pair<Integer>(3, l2);
Pair<Integer> l3 = Pair.empty();
l3 = new Pair<Integer>(4, l3);
l3 = new Pair<Integer>(3, l3);
l3 = new Pair<Integer>(2, l3);
l3 = new Pair<Integer>(1, l3);
Pair<Integer> l4 = Pair.empty();
l4 = new Pair<Integer>(2, l4);
l4 = new Pair<Integer>(1, l4);
Pair<Integer> l5 = l1.append(l2);
assertTrue(l5 != l1);
assertTrue(l5.equals(l3));
assertTrue(l1.equals(l4));
l1.setLastTail(l2);
assertTrue(l1.equals(l3));
}
}