/*
* Copyright 2013 eXo Platform SAS
*
* Licensed 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 juzu.impl.common;
import juzu.test.AbstractTestCase;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */
public class NameTestCase extends AbstractTestCase {
@Test
public void testKind() {
Name empty = Name.parse("");
assertEquals("", empty.toString());
assertTrue(empty.isEmpty());
assertFalse(empty.isSimple());
assertFalse(empty.isQualified());
Name single = Name.parse("foo");
assertEquals("foo", single.toString());
assertFalse(single.isEmpty());
assertTrue(single.isSimple());
assertFalse(single.isQualified());
Name qualified = Name.parse("foo.bar");
assertEquals("foo.bar", qualified.toString());
assertFalse(qualified.isEmpty());
assertFalse(qualified.isSimple());
assertTrue(qualified.isQualified());
}
@Test
public void testParent() {
Name abc = Name.parse("a.b.c");
Name ab = abc.getParent();
assertEquals(Name.parse("a.b"), ab);
Name a = ab.getParent();
assertEquals(a, ab.getParent());
assertEquals(Name.parse("a"), a);
Name empty = a.getParent();
assertEquals(Name.parse(""), empty);
assertEquals(0, empty.size());
assertEquals(0, empty.length());
assertEquals((Object)null, empty.getParent());
}
@Test
public void testParse() {
assertName("");
assertName("a", "a");
assertName("a.b", "a", "b");
assertName("a.b.c", "a", "b", "c");
}
private void assertName(String test, String... expected) {
assertName(expected, "", test, "");
assertName(expected, "", test, "_");
assertName(expected, "", test, ".");
assertName(expected, "", test, "_.");
assertName(expected, "_", test, "");
assertName(expected, ".", test, "");
assertName(expected, "._", test, "");
}
private void assertName(String[] expected, String prefix, String s, String suffix) {
Name name = parse(prefix, s, suffix);
assertEquals(Arrays.asList(expected), Tools.list(name));
assertEquals(Tools.join('.', expected), name.toString());
}
private void assertIAE(String prefix, String s, String suffix) {
try {
parse(prefix, s, suffix);
fail("Was expecting " + s + " to throw an IAE");
}
catch (IllegalArgumentException ok) {
}
}
private Name parse(String prefix, String s, String suffix) {
return Name.parse(prefix + s + suffix, prefix.length(), prefix.length() + s.length());
}
@Test
public void testResolveDotInRawName() throws Exception {
Name name = Name.parse("foo");
Path path = Path.parse("a.b.c");
Path.Absolute file = name.resolve(path);
assertEquals("foo", file.getDirs().toString());
assertEquals("a.b.c", file.getSimpleName());
assertEquals("b.c", file.ext);
assertEquals("a", file.getRawName());
assertEquals("foo.a", file.getName().toString());
}
@Test
public void testResolveUp() throws Exception {
Name name = Name.parse("foo.bar");
Path.Absolute file = name.resolve("../juu/daa.txt");
assertEquals("foo.juu", file.getDirs().toString());
assertEquals("daa.txt", file.getSimpleName());
assertEquals("txt", file.getExt());
assertEquals("daa", file.getRawName());
assertEquals("foo.juu.daa", file.getName().toString());
}
@Test
public void testIAE() {
assertIAE(".");
assertIAE(".a");
assertIAE("a.");
assertIAE("a..b");
assertIAE("ab..c");
}
private void assertIAE(String value) {
try {
Name.parse(value);
fail("Was expecting " + value + " to fail");
}
catch (IllegalArgumentException ignore) {
}
}
@Test
public void testValues() {
assertQN("a.b", "a", "b");
assertQN("a.b.c", "a", "b", "c");
}
private void assertQN(String value, String... names) {
Name qn = Name.parse(value);
ArrayList<String> testNames = Tools.list(qn);
assertEquals(Arrays.asList(names), testNames);
assertEquals(value, qn.toString());
}
@Test
public void testEmpty() {
Name empty = Name.parse("");
assertEquals(0, empty.size());
assertEquals(0, empty.length());
assertEquals(Collections.emptyList(), Tools.list(empty));
assertNull(empty.getParent());
assertEquals("", empty.toString());
}
@Test
public void testSimple() {
Name simple = Name.parse("a");
assertEquals(1, simple.size());
assertEquals(1, simple.length());
assertEquals(Collections.singletonList("a"), Tools.list(simple));
Name parent = simple.getParent();
assertEquals(0, parent.size());
assertEquals(0, parent.length());
assertEquals("a", simple.toString());
}
@Test
public void testAppend() {
assertAppend("a.b", "a", "b");
assertAppend("a.b.c", "a.b", "c");
try {
Name.parse("a").append("");
fail();
}
catch (IllegalArgumentException e) {
}
try {
Name.parse("a").append("a.b");
fail();
}
catch (IllegalArgumentException e) {
}
try {
Name.parse("a").append((String)null);
fail();
}
catch (IllegalArgumentException e) {
}
try {
Name.parse("a").append((String[])null);
fail();
}
catch (NullPointerException e) {
}
}
private void assertAppend(String expected, String qn, String simpleName) {
Name parsed = Name.parse(qn);
Name appended = parsed.append(simpleName);
assertEquals(expected, appended.toString());
assertEquals(appended.size(), parsed.size() + 1);
}
@Test
public void testPrefix() {
assertPrefix("", "");
assertPrefix("", "a");
assertPrefix("", "a.b");
assertPrefix("", "a.b.c");
assertNotPrefix("a", "");
assertPrefix("a", "a");
assertPrefix("a", "a.b");
assertPrefix("a", "a.b.c");
assertNotPrefix("a.b", "");
assertNotPrefix("a.b", "a");
assertPrefix("a.b", "a.b");
assertPrefix("a.b", "a.b.c");
assertNotPrefix("a.b.c", "");
assertNotPrefix("a.b.c", "a");
assertNotPrefix("a.b.c", "a.b");
assertPrefix("a.b.c", "a.b.c");
}
private void assertPrefix(String prefix, String s) {
assertTrue(Name.parse(prefix).isPrefix(Name.parse(s)));
}
private void assertNotPrefix(String prefix, String s) {
assertFalse(Name.parse(prefix).isPrefix(Name.parse(s)));
}
@Test
public void testGetPrefix() {
assertGetPrefix("a.b", "a.b", "a.b");
assertGetPrefix("a.b", "a.b.c", "a.b");
assertGetPrefix("a.b", "a.b.c", "a.b.d");
}
private static void assertGetPrefix(String expected, String a, String b) {
Name actual = Name.parse(a).getPrefix(Name.parse(b));
assertEquals("Was expecting common prefix between " + a + " and " + b + " to be equals to " + expected +
" instead of " + actual, Name.parse(expected), actual);
}
}