/*
* Copyright 2002-2009 the original author or authors.
*
* 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 net.sf.json;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
/**
* @author Andres Almiray <aalmiray@users.sourceforge.net>
*/
public class TestJSONObjectEqualsHashCodeCompareTo extends TestCase {
private static JSONObject strings;
private static Map values = new HashMap();
private static JSONObject values1;
private static JSONObject values2;
private static JSONObject values3;
static{
values.put( "JSONObject.null.1", new JSONObject( true ) );
values.put( "JSONObject.null.2", new JSONObject( true ) );
values.put( "int.1", Integer.valueOf( "1" ) );
values.put( "int.2", Integer.valueOf( "2" ) );
values.put( "long.1", Long.valueOf( "1" ) );
values.put( "long.2", Long.valueOf( "2" ) );
values.put( "string.1", "1" );
values.put( "string.2", "2" );
values.put( "boolean.1", Boolean.TRUE );
values.put( "boolean.2", Boolean.FALSE );
strings = new JSONObject().element( "int", "1" )
.element( "long", "1" )
.element( "boolean", "true" )
.element( "string", "string" )
.element( "func", "function(){ return this; }" )
.element( "array", "[1,2,3]" );
values.put( "JSONObject.strings", strings );
values1 = new JSONObject().element( "int", Integer.valueOf( "1" ) )
.element( "long", Long.valueOf( "1" ) )
.element( "boolean", Boolean.TRUE )
.element( "string", "string" )
.element( "func", new JSONFunction( "return this;" ) )
.element( "array", JSONArray.fromObject( new int[] { 1, 2, 3 } ) );
values.put( "JSONObject.values.1", values1 );
values2 = new JSONObject().element( "int", Integer.valueOf( "1" ) )
.element( "long", Long.valueOf( "1" ) )
.element( "boolean", Boolean.TRUE )
.element( "string", "string" );
values.put( "JSONObject.values.2", values2 );
values3 = new JSONObject().element( "int", Integer.valueOf( "2" ) )
.element( "long", Long.valueOf( "2" ) )
.element( "boolean", Boolean.FALSE )
.element( "string", "string2" );
values.put( "JSONObject.values.3", values3 );
}
public static void main( String[] args ) {
junit.textui.TestRunner.run( TestJSONObjectEqualsHashCodeCompareTo.class );
}
public TestJSONObjectEqualsHashCodeCompareTo( String name ) {
super( name );
}
public void testCompareTo_different_size() {
assertEquals( -1, values2.compareTo( strings ) );
assertEquals( 1, strings.compareTo( values2 ) );
}
public void testCompareTo_null() {
assertEquals( -1, strings.compareTo( null ) );
}
public void testCompareTo_object() {
assertEquals( -1, strings.compareTo( new Object() ) );
}
public void testCompareTo_same_array() {
assertEquals( 0, strings.compareTo( strings ) );
}
public void testCompareTo_same_size_different_values() {
assertEquals( -1, values2.compareTo( values3 ) );
}
public void testCompareTo_same_size_similar_values() {
assertEquals( 0, strings.compareTo( values1 ) );
}
public void testEquals_different_key_same_size() {
JSONObject a = new JSONObject().element( "key1", "string" );
JSONObject b = new JSONObject().element( "key2", "json" );
assertFalse( a.equals( b ) );
assertFalse( b.equals( a ) );
}
public void testEquals_different_sizes() {
assertFalse( values.get( "JSONObject.values.1" )
.equals( values.get( "JSONObject.values.2" ) ) );
}
public void testEquals_nullObject_other() {
assertFalse( values.get( "JSONObject.null.1" )
.equals( values.get( "JSONObject.strings" ) ) );
}
public void testEquals_nullObjects_different() {
assertTrue( values.get( "JSONObject.null.1" )
.equals( values.get( "JSONObject.null.2" ) ) );
}
public void testEquals_other_nullObject() {
assertFalse( values.get( "JSONObject.strings" )
.equals( values.get( "JSONObject.null.1" ) ) );
}
public void testEquals_same() {
assertTrue( values.get( "JSONObject.null.1" )
.equals( values.get( "JSONObject.null.1" ) ) );
}
public void testEquals_same_key_different_value() {
JSONObject a = new JSONObject().element( "key", "string" );
JSONObject b = new JSONObject().element( "key", "json" );
assertFalse( a.equals( b ) );
assertFalse( b.equals( a ) );
}
public void testEquals_strings_values() {
assertTrue( values.get( "JSONObject.strings" )
.equals( values.get( "JSONObject.values.1" ) ) );
}
public void testEquals_to_null() {
assertFalse( values.get( "JSONObject.null.1" )
.equals( null ) );
}
public void testEquals_to_other() {
assertFalse( values.get( "JSONObject.null.1" )
.equals( new Object() ) );
}
public void testEquals_values_strings() {
assertTrue( values.get( "JSONObject.values.1" )
.equals( values.get( "JSONObject.strings" ) ) );
}
public void testHashCode_different_size() {
assertFalse( values.get( "JSONObject.values.1" )
.hashCode() == values.get( "JSONObject.values.2" )
.hashCode() );
}
public void testHashCode_nullObject_other() {
assertFalse( values.get( "JSONObject.null.1" )
.hashCode() == values.get( "JSONObject.strings" )
.hashCode() );
}
public void testHashCode_nullObjects_different() {
assertTrue( values.get( "JSONObject.null.1" )
.hashCode() == values.get( "JSONObject.null.2" )
.hashCode() );
}
public void testHashCode_other_nullObject() {
assertFalse( values.get( "JSONObject.strings" )
.hashCode() == values.get( "JSONObject.null.1" )
.hashCode() );
}
public void testHashCode_same() {
assertTrue( values.get( "JSONObject.null.1" )
.hashCode() == values.get( "JSONObject.null.1" )
.hashCode() );
}
public void testHashCode_same_key_different_value() {
JSONObject a = new JSONObject().element( "key", "string" );
JSONObject b = new JSONObject().element( "key", "json" );
assertFalse( a.hashCode() == b.hashCode() );
}
public void testHashCode_strings_values() {
assertTrue( values.get( "JSONObject.strings" )
.hashCode() == values.get( "JSONObject.values.1" )
.hashCode() );
}
public void testHashCode_to_other() {
assertFalse( values.get( "JSONObject.null.1" )
.hashCode() == new Object().hashCode() );
}
public void testHashCode_values_strings() {
assertTrue( values.get( "JSONObject.values.1" )
.hashCode() == values.get( "JSONObject.strings" )
.hashCode() );
}
}