blob: 7532fd3ec42d787624956a18e3af9516ea1632b8 [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* 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 com.android.loganalysis.item;
import junit.framework.TestCase;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* Unit test for {@link GenericItem}.
*/
public class GenericItemTest extends TestCase {
private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList(
"integer", "string"));
private String mStringAttribute = "String";
private Integer mIntegerAttribute = 1;
/** Empty item with no attributes set */
private GenericItem mEmptyItem1;
/** Empty item with no attributes set */
private GenericItem mEmptyItem2;
/** Item with only the string attribute set */
private GenericItem mStringItem;
/** Item with only the integer attribute set */
private GenericItem mIntegerItem;
/** Item with both attributes set, product of mStringItem and mIntegerItem */
private GenericItem mFullItem1;
/** Item with both attributes set, product of mStringItem and mIntegerItem */
private GenericItem mFullItem2;
/** Item that is inconsistent with the others */
private GenericItem mInconsistentItem;
@Override
public void setUp() {
mEmptyItem1 = new GenericItem(ATTRIBUTES);
mEmptyItem2 = new GenericItem(ATTRIBUTES);
mStringItem = new GenericItem(ATTRIBUTES);
mStringItem.setAttribute("string", mStringAttribute);
mIntegerItem = new GenericItem(ATTRIBUTES);
mIntegerItem.setAttribute("integer", mIntegerAttribute);
mFullItem1 = new GenericItem(ATTRIBUTES);
mFullItem1.setAttribute("string", mStringAttribute);
mFullItem1.setAttribute("integer", mIntegerAttribute);
mFullItem2 = new GenericItem(ATTRIBUTES);
mFullItem2.setAttribute("string", mStringAttribute);
mFullItem2.setAttribute("integer", mIntegerAttribute);
mInconsistentItem = new GenericItem(ATTRIBUTES);
mInconsistentItem.setAttribute("string", "gnirts");
mInconsistentItem.setAttribute("integer", 2);
}
/**
* Test for {@link GenericItem#mergeAttributes(IItem)}.
*/
public void testMergeAttributes() throws ConflictingItemException {
Map<String, Object> attributes;
attributes = mEmptyItem1.mergeAttributes(mEmptyItem1);
assertNull(attributes.get("string"));
assertNull(attributes.get("integer"));
attributes = mEmptyItem1.mergeAttributes(mEmptyItem2);
assertNull(attributes.get("string"));
assertNull(attributes.get("integer"));
attributes = mEmptyItem2.mergeAttributes(mEmptyItem1);
assertNull(attributes.get("string"));
assertNull(attributes.get("integer"));
attributes = mEmptyItem1.mergeAttributes(mStringItem);
assertEquals(mStringAttribute, attributes.get("string"));
assertNull(attributes.get("integer"));
attributes = mStringItem.mergeAttributes(mEmptyItem1);
assertEquals(mStringAttribute, attributes.get("string"));
assertNull(attributes.get("integer"));
attributes = mIntegerItem.mergeAttributes(mStringItem);
assertEquals(mStringAttribute, attributes.get("string"));
assertEquals(mIntegerAttribute, attributes.get("integer"));
attributes = mEmptyItem1.mergeAttributes(mFullItem1);
assertEquals(mStringAttribute, attributes.get("string"));
assertEquals(mIntegerAttribute, attributes.get("integer"));
attributes = mFullItem1.mergeAttributes(mEmptyItem1);
assertEquals(mStringAttribute, attributes.get("string"));
assertEquals(mIntegerAttribute, attributes.get("integer"));
attributes = mFullItem1.mergeAttributes(mFullItem2);
assertEquals(mStringAttribute, attributes.get("string"));
assertEquals(mIntegerAttribute, attributes.get("integer"));
try {
mFullItem1.mergeAttributes(mInconsistentItem);
fail("Expecting a ConflictingItemException");
} catch (ConflictingItemException e) {
// Expected
}
}
/**
* Test for {@link GenericItem#isConsistent(IItem)}.
*/
public void testIsConsistent() {
assertTrue(mEmptyItem1.isConsistent(mEmptyItem1));
assertFalse(mEmptyItem1.isConsistent(null));
assertTrue(mEmptyItem1.isConsistent(mEmptyItem2));
assertTrue(mEmptyItem2.isConsistent(mEmptyItem1));
assertTrue(mEmptyItem1.isConsistent(mStringItem));
assertTrue(mStringItem.isConsistent(mEmptyItem1));
assertTrue(mIntegerItem.isConsistent(mStringItem));
assertTrue(mEmptyItem1.isConsistent(mFullItem1));
assertTrue(mFullItem1.isConsistent(mEmptyItem1));
assertTrue(mFullItem1.isConsistent(mFullItem2));
assertFalse(mFullItem1.isConsistent(mInconsistentItem));
}
/**
* Test {@link GenericItem#equals(Object)}.
*/
public void testEquals() {
assertTrue(mEmptyItem1.equals(mEmptyItem1));
assertFalse(mEmptyItem1.equals(null));
assertTrue(mEmptyItem1.equals(mEmptyItem2));
assertTrue(mEmptyItem2.equals(mEmptyItem1));
assertFalse(mEmptyItem1.equals(mStringItem));
assertFalse(mStringItem.equals(mEmptyItem1));
assertFalse(mIntegerItem.equals(mStringItem));
assertFalse(mEmptyItem1.equals(mFullItem1));
assertFalse(mFullItem1.equals(mEmptyItem1));
assertTrue(mFullItem1.equals(mFullItem2));
assertFalse(mFullItem1.equals(mInconsistentItem));
}
/**
* Test for {@link GenericItem#setAttribute(String, Object)} and
* {@link GenericItem#getAttribute(String)}.
*/
public void testAttributes() {
GenericItem item = new GenericItem(ATTRIBUTES);
assertNull(item.getAttribute("string"));
assertNull(item.getAttribute("integer"));
item.setAttribute("string", mStringAttribute);
item.setAttribute("integer", mIntegerAttribute);
assertEquals(mStringAttribute, item.getAttribute("string"));
assertEquals(mIntegerAttribute, item.getAttribute("integer"));
item.setAttribute("string", null);
item.setAttribute("integer", null);
assertNull(item.getAttribute("string"));
assertNull(item.getAttribute("integer"));
try {
item.setAttribute("object", new Object());
fail("Failed to throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// Expected because "object" is not "string" or "integer".
}
}
/**
* Test for {@link GenericItem#areEqual(Object, Object)}
*/
public void testAreEqual() {
assertTrue(GenericItem.areEqual(null, null));
assertTrue(GenericItem.areEqual("test", "test"));
assertFalse(GenericItem.areEqual(null, "test"));
assertFalse(GenericItem.areEqual("test", null));
assertFalse(GenericItem.areEqual("test", ""));
}
/**
* Test for {@link GenericItem#areConsistent(Object, Object)}
*/
public void testAreConsistent() {
assertTrue(GenericItem.areConsistent(null, null));
assertTrue(GenericItem.areConsistent("test", "test"));
assertTrue(GenericItem.areConsistent(null, "test"));
assertTrue(GenericItem.areConsistent("test", null));
assertFalse(GenericItem.areConsistent("test", ""));
}
/**
* Test for {@link GenericItem#mergeObjects(Object, Object)}
*/
public void testMergeObjects() throws ConflictingItemException {
assertNull(GenericItem.mergeObjects(null, null));
assertEquals("test", GenericItem.mergeObjects("test", "test"));
assertEquals("test", GenericItem.mergeObjects(null, "test"));
assertEquals("test", GenericItem.mergeObjects("test", null));
try {
assertEquals("test", GenericItem.mergeObjects("test", ""));
fail("Expected ConflictingItemException to be thrown");
} catch (ConflictingItemException e) {
// Expected because "test" conflicts with "".
}
}
/**
* Test that {@link GenericItem#toJson()} returns correctly.
*/
public void testToJson() throws JSONException {
GenericItem item = new GenericItem(new HashSet<String>(Arrays.asList(
"string", "date", "object", "integer", "long", "float", "double", "null")));
Date date = new Date();
Object object = new Object();
item.setAttribute("string", "foo");
item.setAttribute("date", date);
item.setAttribute("object", object);
item.setAttribute("integer", 0);
item.setAttribute("long", 1L);
item.setAttribute("float", 2.5f);
item.setAttribute("double", 3.5);
item.setAttribute("null", null);
// Convert to JSON string and back again
JSONObject output = new JSONObject(item.toJson().toString());
assertTrue(output.has("string"));
assertEquals("foo", output.get("string"));
assertTrue(output.has("date"));
assertEquals(date.toString(), output.get("date"));
assertTrue(output.has("object"));
assertEquals(object.toString(), output.get("object"));
assertTrue(output.has("integer"));
assertEquals(0, output.get("integer"));
assertTrue(output.has("long"));
assertEquals(1, output.get("long"));
assertTrue(output.has("float"));
assertEquals(2.5, output.get("float"));
assertTrue(output.has("double"));
assertEquals(3.5, output.get("double"));
assertFalse(output.has("null"));
}
}