/*
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.hotspot.igv.data;
import com.sun.hotspot.igv.data.Properties.InvertPropertyMatcher;
import com.sun.hotspot.igv.data.Properties.PropertyMatcher;
import com.sun.hotspot.igv.data.Properties.PropertySelector;
import com.sun.hotspot.igv.data.Properties.RegexpPropertyMatcher;
import com.sun.hotspot.igv.data.Properties.StringPropertyMatcher;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import junit.framework.TestCase;
/**
*
* @author Thomas Wuerthinger
*/
public class PropertiesTest extends TestCase {
public PropertiesTest(String testName) {
super(testName);
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* Test of equals method, of class Properties.
*/
public void testEquals() {
Properties a = new Properties();
assertFalse(a.equals(null));
assertTrue(a.equals(a));
Properties b = new Properties();
assertTrue(a.equals(b));
assertTrue(a.hashCode() == b.hashCode());
a.setProperty("p1", "1");
assertFalse(a.equals(b));
assertFalse(b.equals(a));
assertFalse(a.hashCode() == b.hashCode());
b.setProperty("p1", "1");
assertTrue(a.equals(b));
assertTrue(a.hashCode() == b.hashCode());
Properties c = new Properties(a);
assertTrue(c.equals(a));
assertTrue(c.equals(b));
c.setProperty("p1", "2");
assertFalse(c.equals(b));
assertFalse(c.hashCode() == b.hashCode());
assertFalse(c.equals(a));
assertFalse(c.hashCode() == a.hashCode());
a.setProperty("p2", "2");
Properties d = new Properties();
d.setProperty("p2", "2");
d.setProperty("p1", "1");
assertTrue(d.equals(a));
}
/**
* Test of selectSingle method, of class Properties.
*/
public void testSelectSingle() {
final boolean[] called = new boolean[1];
final String v = "2";
final String n = "p2";
PropertyMatcher matcher = new PropertyMatcher() {
@Override
public String getName() {
assertFalse(called[0]);
called[0] = true;
return n;
}
@Override
public boolean match(String value) {
assertTrue(v.equals(value));
return true;
}
};
Properties instance = new Properties();
instance.setProperty("p1", "1");
instance.setProperty(n, v);
instance.setProperty("p3", "3");
Property result = instance.selectSingle(matcher);
assertEquals(result, new Property(n, v));
called[0] = false;
PropertyMatcher matcher2 = new PropertyMatcher() {
@Override
public String getName() {
assertFalse(called[0]);
called[0] = true;
return n;
}
@Override
public boolean match(String value) {
return false;
}
};
Property result2 = instance.selectSingle(matcher2);
assertTrue(result2 == null);
}
/**
* Test of get method, of class Properties.
*/
public void testGet() {
Properties instance = new Properties();
instance.setProperty("p1", "1");
assertEquals("1", instance.get("p1"));
assertEquals(null, instance.get("p2"));
}
/**
* Test of getProperties method, of class Properties.
*/
public void testIterator() {
Properties instance = new Properties();
instance.setProperty("p1", "1");
instance.setProperty("p2", "2");
Iterator<Property> result = instance.iterator();
assertTrue(result.hasNext());
assertEquals(new Property("p1", "1"), result.next());
assertTrue(result.hasNext());
assertEquals(new Property("p2", "2"), result.next());
assertFalse(result.hasNext());
assertTrue(result.next() == null);
try {
result.remove();
fail();
} catch(UnsupportedOperationException e) {}
}
/**
* Test of add method, of class Properties.
*/
public void testAdd() {
Properties a = new Properties();
a.setProperty("p1", "1");
a.setProperty("p2", "2");
Properties b = new Properties();
b.setProperty("p1", "1");
Properties c = new Properties();
c.setProperty("p2", "2");
assertFalse(a.equals(b));
b.add(c);
assertTrue(a.equals(b));
b.setProperty("p3", null);
assertTrue(a.equals(b));
Properties empty = new Properties();
b.add(empty);
assertTrue(a.equals(b));
empty.add(b);
assertTrue(a.equals(empty));
}
/**
* Test the multiple argument constructors.
*/
public void testConstructors() {
Properties a = new Properties("p1", "1", "p2", "2", "p3", "3");
Properties b = new Properties("p1", "1", "p2", "2");
Properties c = new Properties("p1", "1");
assertTrue(a.get("p3").equals("3"));
assertTrue(b.get("p2").equals("2"));
assertTrue(b.get("p1").equals("1"));
b.setProperty("p3", "3");
c.setProperty("p2", "2");
c.setProperty("p3", "3");
assertTrue(a.equals(b));
assertTrue(a.equals(c));
}
/**
* Test Entity class
*/
public void testEntity() {
Properties p = new Properties();
Properties.Entity entity = new Properties.Entity();
assertEquals(entity.getProperties(), p);
entity.getProperties().setProperty("p1", "1");
Properties.Entity entity2 = new Properties.Entity(entity);
assertEquals(entity.getProperties(), entity2.getProperties());
}
/**
* Test property selector
*/
public void testPropertySelector() {
final Collection<Properties.Entity> c = new ArrayList<>();
final Properties.Entity e1 = new Properties.Entity();
e1.getProperties().setProperty("p1", "1");
e1.getProperties().setProperty("p2", "2");
c.add(e1);
final Properties.Entity e2 = new Properties.Entity();
e2.getProperties().setProperty("p2", "2");
e2.getProperties().setProperty("p1", "1");
e2.getProperties().setProperty("p3", "3");
c.add(e2);
final Properties.Entity e3 = new Properties.Entity();
e3.getProperties().setProperty("p3", "3");
e3.getProperties().setProperty("p4", "4");
c.add(e3);
final PropertySelector<Properties.Entity> sel = new PropertySelector<>(c);
final StringPropertyMatcher matcher1 = new StringPropertyMatcher("p2", "2");
assertTrue(sel.selectMultiple(matcher1).size() == 2);
assertTrue(sel.selectMultiple(matcher1).contains(e1));
assertTrue(sel.selectMultiple(matcher1).contains(e2));
assertTrue(sel.selectSingle(matcher1).equals(e1) || sel.selectSingle(matcher1).equals(e2));
final StringPropertyMatcher matcher2 = new StringPropertyMatcher("p3", "3");
assertTrue(sel.selectMultiple(matcher2).size() == 2);
assertTrue(sel.selectMultiple(matcher2).contains(e2));
assertTrue(sel.selectMultiple(matcher2).contains(e3));
assertTrue(sel.selectSingle(matcher2).equals(e2) || sel.selectSingle(matcher2).equals(e3));
final StringPropertyMatcher matcher3 = new StringPropertyMatcher("p4", "4");
assertTrue(sel.selectMultiple(matcher3).size() == 1);
assertTrue(sel.selectMultiple(matcher3).contains(e3));
assertTrue(sel.selectSingle(matcher3).equals(e3));
final StringPropertyMatcher matcher4 = new StringPropertyMatcher("p5", "5");
assertTrue(sel.selectMultiple(matcher4).size() == 0);
assertTrue(sel.selectSingle(matcher4) == null);
}
public void testRemoveProperty() {
final Properties p = new Properties();
p.setProperty("p1", "1");
p.setProperty("p2", "2");
assertTrue(p.get("p1").equals("1"));
assertTrue(p.get("p2").equals("2"));
p.setProperty("p1", null);
assertTrue(p.get("p1") == null);
assertTrue(p.get("p2").equals("2"));
p.setProperty("p2", null);
assertTrue(p.get("p1") == null);
assertTrue(p.get("p2") == null);
p.setProperty("p3", "3");
assertTrue(p.get("p1") == null);
assertTrue(p.get("p2") == null);
assertTrue(p.get("p3").equals("3"));
}
/**
* Test property matchers
*/
public void testPropertyMatchers() {
final StringPropertyMatcher matcher = new StringPropertyMatcher("p1", "1");
assertTrue(matcher.getName().equals("p1"));
assertTrue(matcher.match("1"));
assertFalse(matcher.match("2"));
try {
matcher.match(null);
fail();
} catch(IllegalArgumentException e) {}
try {
new StringPropertyMatcher(null, "**");
fail();
} catch(IllegalArgumentException e) {}
try {
new StringPropertyMatcher("p1", null);
fail();
} catch(IllegalArgumentException e) {}
final RegexpPropertyMatcher matcher2 = new RegexpPropertyMatcher("p1", "C.*");
assertTrue(matcher2.getName().equals("p1"));
assertTrue(matcher2.match("C"));
assertTrue(matcher2.match("Casdf"));
assertFalse(matcher2.match(" C"));
assertFalse(matcher2.match("c"));
assertFalse(matcher2.match("asdfC"));
try {
matcher2.match(null);
fail();
} catch(IllegalArgumentException e) {}
try {
new RegexpPropertyMatcher("p1", "**");
fail();
} catch(IllegalArgumentException e) {}
try {
new RegexpPropertyMatcher(null, "1");
/**代码未完, 请加载全部代码(NowJava.com).**/