/* * Copyright (c) 2002-2012 Alibaba Group Holding Limited. * All rights reserved. * * 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.alibaba.citrus.service.form.support; import static com.alibaba.citrus.service.form.support.NumberSupport.Type.*; import static com.alibaba.citrus.test.TestUtil.*; import static org.junit.Assert.*; import java.math.BigDecimal; import com.alibaba.citrus.service.form.support.NumberSupport.Type; import org.junit.Test; public class NumberSupportTests { @Test public void init_noType() { try { new NumberSupport().getValue(); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("no number type specified")); } } @Test public void init_noValue() { try { new NumberSupport(INT, null).getValue(); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("no value set")); } } @Test public void getNumberType_byName() { // no numberType assertEquals(INT, Type.byName(null)); // wrong numberType try { Type.byName("wrong"); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception(IllegalArgumentException.class, "wrong number type: wrong")); } // types assertEquals(INT, Type.byName("int")); assertEquals(LONG, Type.byName("long")); assertEquals(FLOAT, Type.byName("float")); assertEquals(DOUBLE, Type.byName("double")); assertEquals(BIG_DECIMAL, Type.byName("bigDecimal")); } @Test public void getStringValue() { assertEquals("123", new NumberSupport(INT, "123").getStringValue()); } @Test public void getNumberType() { assertEquals(INT, new NumberSupport(INT, "123").getNumberType()); } @Test public void parseNumber() { // wrong format assertParse(INT, "123.4", null); assertParse(LONG, "123.4", null); assertParse(FLOAT, "abc", null); assertParse(DOUBLE, "abc", null); assertParse(BIG_DECIMAL, "abc", null); // succcess assertParse(INT, "123", 123); assertParse(LONG, "123456789123456789", 123456789123456789L); assertParse(FLOAT, "123.456", 123.456F); assertParse(DOUBLE, "123456789123456789.123456789", 123456789123456789.123456789D); assertParse(BIG_DECIMAL, "123456789123456789123456789123456789123456789.123456789123456789123456789", new BigDecimal("123456789123456789123456789123456789123456789.123456789123456789123456789")); } private void assertParse(Type type, String value, Number result) { NumberSupport number = new NumberSupport(type, value); if (result != null) { assertEquals(result, number.getValue()); } else { try { number.getValue(); fail(); } catch (NumberFormatException e) { assertThat(e, exception(value)); // For input string: value } } } @Test public void compareTo() { // int assertCompareTo(-1, new NumberSupport(INT, "123"), new NumberSupport(INT, "234")); assertCompareTo(0, new NumberSupport(INT, "123"), new NumberSupport(INT, "123")); assertCompareTo(1, new NumberSupport(INT, "123"), new NumberSupport(INT, "012")); // long assertCompareTo(-1, new NumberSupport(LONG, "123"), new NumberSupport(LONG, "234")); assertCompareTo(0, new NumberSupport(LONG, "123"), new NumberSupport(LONG, "123")); assertCompareTo(1, new NumberSupport(LONG, "123"), new NumberSupport(LONG, "012")); // float assertCompareTo(-1, new NumberSupport(FLOAT, "123"), new NumberSupport(FLOAT, "234")); assertCompareTo(0, new NumberSupport(FLOAT, "123"), new NumberSupport(FLOAT, "123")); assertCompareTo(1, new NumberSupport(FLOAT, "123"), new NumberSupport(FLOAT, "012")); // double assertCompareTo(-1, new NumberSupport(DOUBLE, "123"), new NumberSupport(DOUBLE, "234")); assertCompareTo(0, new NumberSupport(DOUBLE, "123"), new NumberSupport(DOUBLE, "123")); assertCompareTo(1, new NumberSupport(DOUBLE, "123"), new NumberSupport(DOUBLE, "012")); // bigDecimal assertCompareTo(-1, new NumberSupport(BIG_DECIMAL, "123"), new NumberSupport(BIG_DECIMAL, "234")); assertCompareTo(0, new NumberSupport(BIG_DECIMAL, "123"), new NumberSupport(BIG_DECIMAL, "123")); assertCompareTo(1, new NumberSupport(BIG_DECIMAL, "123"), new NumberSupport(BIG_DECIMAL, "012")); // hybrid try { new NumberSupport(INT, "123").compareTo(new NumberSupport(DOUBLE, "234")); fail(); } catch (ClassCastException e) { assertThat(e, exception("java.lang.Double")); } } private void assertCompareTo(int result, NumberSupport n1, NumberSupport n2) { if (result < 0) { assertTrue(n1.compareTo(n2) < 0); assertFalse(n1.equals(n2)); } else if (result == 0) { assertTrue(n1.compareTo(n2) == 0); assertTrue(n1.equals(n2)); } else { assertTrue(n1.compareTo(n2) > 0); assertFalse(n1.equals(n2)); } } @Test public void equalsHashCode() { NumberSupport n1 = new NumberSupport(INT, "123"); NumberSupport n2 = new NumberSupport(INT, "234"); NumberSupport n3 = new NumberSupport(DOUBLE, "123"); NumberSupport n4 = new NumberSupport(INT, "123"); assertEqualsHashCode(false, n1, n2); assertEqualsHashCode(false, n1, n3); assertEqualsHashCode(true, n1, n4); assertEqualsHashCode(false, n3, n4); } private void assertEqualsHashCode(boolean equals, NumberSupport n1, NumberSupport n2) { assertEquals(equals, n1.equals(n2)); assertEquals(equals, n1.hashCode() == n2.hashCode()); } @Test public void toString_() { assertEquals("123", new NumberSupport(INT, "123").toString()); assertEquals("234", new NumberSupport(INT, "234").toString()); assertEquals("123", new NumberSupport(DOUBLE, "123").toString()); assertEquals("123", new NumberSupport(INT, "123").toString()); assertEquals(null, new NumberSupport().toString()); } }