/*******************************************************************************
* Copyright (c) 2013 EclipseSource.
* 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:
* Ralf Sternberg - initial implementation and API
******************************************************************************/
package org.eclipse.rap.json;
import static org.eclipse.rap.json.TestUtil.serializeAndDeserialize;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.StringWriter;
import org.junit.Before;
import org.junit.Test;
public class JsonNumber_Test {
private StringWriter output;
private JsonWriter writer;
@Before
public void setUp() {
output = new StringWriter();
writer = new JsonWriter( output );
}
@Test( expected = NullPointerException.class )
public void constructor_failsWithNull() {
new JsonNumber( null );
}
@Test
public void write() throws IOException {
new JsonNumber( "23" ).write( writer );
assertEquals( "23", output.toString() );
}
@Test
public void toString_returnsInputString() {
assertEquals( "foo", new JsonNumber( "foo" ).toString() );
}
@Test
public void isNumber() {
assertTrue( new JsonNumber( "23" ).isNumber() );
}
@Test
public void asInt() {
assertEquals( 23, new JsonNumber( "23" ).asInt() );
}
@Test( expected = NumberFormatException.class )
public void asInt_failsWithExceedingValues() {
new JsonNumber( "10000000000" ).asInt();
}
@Test( expected = NumberFormatException.class )
public void asInt_failsWithExponent() {
new JsonNumber( "1e5" ).asInt();
}
@Test( expected = NumberFormatException.class )
public void asInt_failsWithFractional() {
new JsonNumber( "23.5" ).asInt();
}
@Test
public void asLong() {
assertEquals( 23l, new JsonNumber( "23" ).asLong() );
}
@Test( expected = NumberFormatException.class )
public void asLong_failsWithExceedingValues() {
new JsonNumber( "10000000000000000000" ).asLong();
}
@Test( expected = NumberFormatException.class )
public void asLong_failsWithExponent() {
new JsonNumber( "1e5" ).asLong();
}
@Test( expected = NumberFormatException.class )
public void asLong_failsWithFractional() {
new JsonNumber( "23.5" ).asLong();
}
@Test
public void asFloat() {
assertEquals( 23.05f, new JsonNumber( "23.05" ).asFloat(), 0 );
}
@Test
public void asFloat_returnsInfinityForExceedingValues() {
assertEquals( Float.POSITIVE_INFINITY, new JsonNumber( "1e50" ).asFloat(), 0 );
assertEquals( Float.NEGATIVE_INFINITY, new JsonNumber( "-1e50" ).asFloat(), 0 );
}
@Test
public void asDouble() {
double result = new JsonNumber( "23.05" ).asDouble();
assertEquals( 23.05, result, 0 );
}
@Test
public void asDouble_returnsInfinityForExceedingValues() {
assertEquals( Double.POSITIVE_INFINITY, new JsonNumber( "1e500" ).asDouble(), 0 );
assertEquals( Double.NEGATIVE_INFINITY, new JsonNumber( "-1e500" ).asDouble(), 0 );
}
@Test
public void equals_trueForSameInstance() {
JsonNumber number = new JsonNumber( "23" );
assertTrue( number.equals( number ) );
}
@Test
public void equals_trueForEqualNumberStrings() {
assertTrue( new JsonNumber( "23" ).equals( new JsonNumber( "23" ) ) );
}
@Test
public void equals_falseForDifferentNumberStrings() {
assertFalse( new JsonNumber( "23" ).equals( new JsonNumber( "42" ) ) );
assertFalse( new JsonNumber( "1e+5" ).equals( new JsonNumber( "1e5" ) ) );
}
@Test
public void equals_falseForNull() {
assertFalse( new JsonNumber( "23" ).equals( null ) );
}
@Test
public void equals_falseForSubclass() {
assertFalse( new JsonNumber( "23" ).equals( new JsonNumber( "23" ) {} ) );
}
@Test
public void hashCode_equalsForEqualStrings() {
assertTrue( new JsonNumber( "23" ).hashCode() == new JsonNumber( "23" ).hashCode() );
}
@Test
public void hashCode_differsForDifferentStrings() {
assertFalse( new JsonNumber( "23" ).hashCode() == new JsonNumber( "42" ).hashCode() );
}
@Test
public void canBeSerializedAndDeserialized() throws Exception {
JsonNumber number = new JsonNumber( "3.14" );
assertEquals( number, serializeAndDeserialize( number ) );
}
}