/*
* Copyright (C) 2008 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 org.apache.harmony.text.tests.java.text;
import dalvik.annotation.AndroidOnly;
import dalvik.annotation.TestTargets;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargetClass;
import junit.framework.TestCase;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
/**
* Test for additional features introduced by icu. These tests fail on the RI
* but succeed on Android 1.0. The features are only accessible through the
* pattern. Api methods where not introduced to allow direct access of these
* features. This would have changed the api too much.
*/
@TestTargetClass(DecimalFormat.class)
public class DecimalFormatTestICU extends TestCase {
DecimalFormat format;
protected void setUp() {
format = (DecimalFormat) NumberFormat.getNumberInstance();
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Regression test.",
method = "format",
args = {java.lang.Object.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Regression test.",
method = "parse",
args = {java.lang.String.class}
)
})
@AndroidOnly("special feature of icu4c")
public void test_sigDigitPatterns() throws Exception {
DecimalFormat format = (DecimalFormat) NumberFormat
.getInstance(Locale.US);
format.applyPattern("@@@");
assertEquals("sigDigit doesn't work", "12300", format.format(12345));
assertEquals("sigDigit doesn't work", "0.123", format.format(0.12345));
format.applyPattern("@@##");
assertEquals("sigDigit doesn't work", "3.142", format.format(3.14159));
assertEquals("sigDigit doesn't work", "1.23", format.format(1.23004));
format.applyPattern("@@###E0");
assertEquals("1.23E1", format.format(12.3));
format.applyPattern("0.0###E0");
assertEquals("1.23E1", format.format(12.3));
try {
format.applyPattern("@00");
fail("expected IllegalArgumentException was not thrown for "
+ "pattern \"@00\".");
} catch (IllegalArgumentException e) {
// expected
}
try {
format.applyPattern("@.###");
fail("expected IllegalArgumentException was not thrown for "
+ "pattern \"@.###\".");
} catch (IllegalArgumentException e) {
// expected
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Regression test.",
method = "format",
args = {java.lang.Object.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Regression test.",
method = "parse",
args = {java.lang.String.class}
)
})
@AndroidOnly("special feature of icu4c")
public void test_paddingPattern() throws Exception {
format.applyPattern("*x##,##,#,##0.0#");
assertEquals("xxxxxxxxx123.0", format.format(123));
assertEquals(123, format.parse("xxxxxxxxx123.0").intValue());
format.applyPattern("$*x#,##0.00");
assertEquals("$xx123.00", format.format(123));
assertEquals("$1,234.00", format.format(1234));
format.applyPattern("*\u00e7#0 o''clock");
assertEquals("\u00e72 o'clock", format.format(2));
assertEquals("12 o'clock", format.format(12));
assertEquals(2, format.parse("\u00e72 o'clock").intValue());
assertEquals(12, format.parse("12 o'clock").intValue());
try {
format.applyPattern("#0.##*xE0");
fail("expected IllegalArgumentException was not thrown for"
+ "pattern \"#0.##*xE0\".");
} catch (IllegalArgumentException e) {
// expected
}
try {
format.applyPattern("##0.## *");
fail("expected IllegalArgumentException was not thrown for "
+ "pattern \"##0.## *\".");
} catch (IllegalArgumentException e) {
// expected
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Regression test.",
method = "format",
args = {java.lang.Object.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Regression test.",
method = "parse",
args = {java.lang.String.class}
)
})
@AndroidOnly("special feature of icu4c")
public void test_positiveExponentSign() throws Exception {
format.applyPattern("0.###E+0");
assertEquals("1E+2", format.format(100));
assertEquals("1E-2", format.format(0.01));
assertEquals(100, format.parse("1E+2").intValue());
assertEquals(0.01f, format.parse("1E-2").floatValue());
format.applyPattern("0.###E0 m/s");
assertEquals("1E2 m/s", format.format(100));
assertEquals(100, format.parse("1E2 m/s").intValue());
format.applyPattern("00.###E0");
assertEquals("12.3E-4", format.format(0.00123));
assertEquals(0.00123f, format.parse("12.3E-4").floatValue());
format.applyPattern("##0.####E0");
assertEquals("12.345E3", format.format(12345));
assertEquals(12345, format.parse("12.345E3").intValue());
try {
format.applyPattern("#,##0.##E0");
fail("expected IllegalArgumentException was not thrown for "
+ "pattern \"#,##0.##E0\".");
} catch (IllegalArgumentException e) {
// expected
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Verifies the grouping size.",
method = "format",
args = {java.lang.Object.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Verifies the grouping size.",
method = "parse",
args = {java.lang.String.class}
)
})
@AndroidOnly("special feature of icu4c")
public void test_secondaryGroupingSize() throws Exception {
format.applyPattern("#,##,###,####");
assertEquals("123,456,7890", format.format(1234567890));
assertEquals(1234567890, format.parse("123,456,7890").intValue());
format.applyPattern("##,#,###,####");
assertEquals("123,456,7890", format.format(1234567890));
assertEquals(1234567890, format.parse("123,456,7890").intValue());
format.applyPattern("###,###,####");
assertEquals("123,456,7890", format.format(1234567890));
assertEquals(1234567890, format.parse("123,456,7890").intValue());
format.applyPattern("###,##,###.#");
assertEquals("12,34,567.8", format.format(1234567.8));
format.applyPattern("##,#,##,###.#");
assertEquals("12,34,567.8", format.format(1234567.8));
format.applyPattern("#,##,##,###.#");
assertEquals("12,34,567.8", format.format(1234567.8));
}
}
|