/*******************************************************************************
* Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
* 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:
* Martin Oberhuber (Wind River) - initial API and implementation for [105554]
*******************************************************************************/
package org.eclipse.core.tests.internal.localstore;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.internal.localstore.PrefixPool;
import org.eclipse.core.tests.harness.CoreTest;
public class PrefixPoolTest extends CoreTest {
public static Test suite() {
return new TestSuite(PrefixPoolTest.class);
}
public PrefixPoolTest(String name) {
super(name);
}
public void testIllegalCapacity() {
boolean exceptionOK=true;
try {
new PrefixPool(0);
exceptionOK=false;
} catch(IllegalArgumentException e) {
/*ignore, exception is expected*/
}
assertTrue(exceptionOK);
try {
new PrefixPool(-1);
exceptionOK=false;
} catch(IllegalArgumentException e) {
/*ignore, exception is expected*/
}
assertTrue(exceptionOK);
}
public void testPrefixPool() {
PrefixPool p = new PrefixPool(1);
assertFalse(p.containsAsPrefix(""));
assertFalse(p.containsAsPrefix("/a"));
assertFalse(p.hasPrefixOf("/a"));
boolean rv=p.insertShorter("/a/");
assertFalse(rv);
p.insertLonger("/a/b/"); //overrides /a/
assertEquals(1, p.size());
p.insertLonger("/A/");
assertEquals(2, p.size());
p.insertLonger("/"); //shorter than /A/ --> no-op
assertEquals(2, p.size());
assertFalse(p.hasPrefixOf("/c"));
rv=p.insertShorter("/a/b/c/"); //longer than /a/b/ --> no-op
assertFalse(rv);
assertEquals(2, p.size());
p.insertLonger("/a/B/c/"); //no override
assertEquals(3, p.size());
p.insertShorter("/a/B/"); //overrides
assertEquals(3, p.size());
//we now have: /a/b/, /A/, /a/B/
assertTrue(p.hasPrefixOf("/a/B/"));
assertTrue(p.hasPrefixOf("/a/b/c/d/"));
assertFalse(p.hasPrefixOf("/"));
assertTrue(p.containsAsPrefix("/a/B"));
assertTrue(p.containsAsPrefix("/a/b/"));
assertTrue(p.containsAsPrefix(""));
assertFalse(p.containsAsPrefix("/a/b//"));
assertFalse(p.containsAsPrefix("/A/B/"));
assertEquals(3, p.size());
p.clear();
assertEquals(0, p.size());
assertFalse(p.hasPrefixOf(""));
assertFalse(p.containsAsPrefix(""));
}
}