From 4874d2eeaf4108b78b1ff9d3ccbd866e2acb108e Mon Sep 17 00:00:00 2001 From: Peter Edberg Date: Sun, 28 Jun 2015 01:41:07 +0000 Subject: [PATCH] ICU-11629 J, update MeasureUnit interfaces and tests for new units in CLDR 27/28 X-SVN-Rev: 37625 --- .../src/com/ibm/icu/util/MeasureUnit.java | 61 +++- .../icu/dev/test/format/MeasureUnitTest.java | 278 +++++++++++++++++- 2 files changed, 335 insertions(+), 4 deletions(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java b/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java index 58878430a51..7b73a0f0abd 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java @@ -181,7 +181,7 @@ public class MeasureUnit implements Serializable { throw new NullPointerException("Type and subType must be non-null"); } if (!"currency".equals(type)) { - if (!ASCII.containsAll(type) || !ASCII_HYPHEN.containsAll(subType)) { + if (!ASCII.containsAll(type) || !ASCII_HYPHEN_DIGITS.containsAll(subType)) { throw new IllegalArgumentException("The type or subType are invalid."); } } @@ -207,7 +207,7 @@ public class MeasureUnit implements Serializable { } static final UnicodeSet ASCII = new UnicodeSet('a', 'z').freeze(); - static final UnicodeSet ASCII_HYPHEN = new UnicodeSet('-', '-', 'a', 'z').freeze(); + static final UnicodeSet ASCII_HYPHEN_DIGITS = new UnicodeSet('-', '-', '0', '9', 'a', 'z').freeze(); /** * @internal @@ -361,6 +361,13 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit RADIAN = MeasureUnit.internalGetInstance("angle", "radian"); + /** + * Constant for unit of angle: revolution + * @draft ICU 56 + * @provisional This API might change or be removed in a future release. + */ + public static final MeasureUnit REVOLUTION = MeasureUnit.internalGetInstance("angle", "revolution"); + /** * Constant for unit of area: acre * @stable ICU 53 @@ -418,6 +425,13 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit SQUARE_YARD = MeasureUnit.internalGetInstance("area", "square-yard"); + /** + * Constant for unit of consumption: liter-per-100kilometers + * @draft ICU 56 + * @provisional This API might change or be removed in a future release. + */ + public static final MeasureUnit LITER_PER_100KILOMETERS = MeasureUnit.internalGetInstance("consumption", "liter-per-100kilometers"); + /** * Constant for unit of consumption: liter-per-kilometer * @draft ICU 54 @@ -502,6 +516,13 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit TERABYTE = MeasureUnit.internalGetInstance("digital", "terabyte"); + /** + * Constant for unit of duration: century + * @draft ICU 56 + * @provisional This API might change or be removed in a future release. + */ + public static final MeasureUnit CENTURY = MeasureUnit.internalGetInstance("duration", "century"); + /** * Constant for unit of duration: day * @stable ICU 4.0 @@ -535,7 +556,6 @@ public class MeasureUnit implements Serializable { /** * Constant for unit of duration: month - * * @stable ICU 4.0 */ public static final TimeUnit MONTH = (TimeUnit) MeasureUnit.internalGetInstance("duration", "month"); @@ -740,6 +760,13 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit MILE = MeasureUnit.internalGetInstance("length", "mile"); + /** + * Constant for unit of length: mile-scandinavian + * @draft ICU 56 + * @provisional This API might change or be removed in a future release. + */ + public static final MeasureUnit MILE_SCANDINAVIAN = MeasureUnit.internalGetInstance("length", "mile-scandinavian"); + /** * Constant for unit of length: millimeter * @stable ICU 53 @@ -943,6 +970,13 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit KILOMETER_PER_HOUR = MeasureUnit.internalGetInstance("speed", "kilometer-per-hour"); + /** + * Constant for unit of speed: knot + * @draft ICU 56 + * @provisional This API might change or be removed in a future release. + */ + public static final MeasureUnit KNOT = MeasureUnit.internalGetInstance("speed", "knot"); + /** * Constant for unit of speed: meter-per-second * @stable ICU 53 @@ -967,6 +1001,13 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit FAHRENHEIT = MeasureUnit.internalGetInstance("temperature", "fahrenheit"); + /** + * Constant for unit of temperature: generic + * @draft ICU 55 + * @provisional This API might change or be removed in a future release. + */ + public static final MeasureUnit GENERIC = MeasureUnit.internalGetInstance("temperature", "generic"); + /** * Constant for unit of temperature: kelvin * @draft ICU 54 @@ -1049,6 +1090,13 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit CUP = MeasureUnit.internalGetInstance("volume", "cup"); + /** + * Constant for unit of volume: cup-metric + * @draft ICU 56 + * @provisional This API might change or be removed in a future release. + */ + public static final MeasureUnit CUP_METRIC = MeasureUnit.internalGetInstance("volume", "cup-metric"); + /** * Constant for unit of volume: deciliter * @draft ICU 54 @@ -1104,6 +1152,13 @@ public class MeasureUnit implements Serializable { */ public static final MeasureUnit PINT = MeasureUnit.internalGetInstance("volume", "pint"); + /** + * Constant for unit of volume: pint-metric + * @draft ICU 56 + * @provisional This API might change or be removed in a future release. + */ + public static final MeasureUnit PINT_METRIC = MeasureUnit.internalGetInstance("volume", "pint-metric"); + /** * Constant for unit of volume: quart * @draft ICU 54 diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java index 1c0c58e9f6f..26faf826beb 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/MeasureUnitTest.java @@ -67,7 +67,7 @@ public class MeasureUnitTest extends TestFmwk { } } - private static final String[] DRAFT_VERSIONS = {"54"}; + private static final String[] DRAFT_VERSIONS = {"54", "55", "56"}; private static final HashSet DRAFT_VERSION_SET = new HashSet(); @@ -195,6 +195,14 @@ public class MeasureUnitTest extends TestFmwk { {"QUART", "54"}, {"TABLESPOON", "54"}, {"TEASPOON", "54"}, + {"GENERIC", "55"}, + {"REVOLUTION", "56"}, + {"LITER_PER_100KILOMETERS", "56"}, + {"CENTURY", "56"}, + {"MILE_SCANDINAVIAN", "56"}, + {"KNOT", "56"}, + {"CUP_METRIC", "56"}, + {"PINT_METRIC", "56"}, }; private static final HashMap JAVA_VERSION_MAP = new HashMap(); @@ -224,6 +232,11 @@ public class MeasureUnitTest extends TestFmwk { new MeasureUnitTest().run(args); } + //public void testZZZ() { + // // various generateXXX calls go here, see + // // http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit + //} + public void TestCompatible53_1() { MeasureUnit[] units = { MeasureUnit.G_FORCE, @@ -403,6 +416,269 @@ public class MeasureUnitTest extends TestFmwk { assertEquals("", 121, units.length); } + public void TestCompatible55_1() { + MeasureUnit[] units = { + MeasureUnit.G_FORCE, + MeasureUnit.METER_PER_SECOND_SQUARED, + MeasureUnit.ARC_MINUTE, + MeasureUnit.ARC_SECOND, + MeasureUnit.DEGREE, + MeasureUnit.RADIAN, + MeasureUnit.ACRE, + MeasureUnit.HECTARE, + MeasureUnit.SQUARE_CENTIMETER, + MeasureUnit.SQUARE_FOOT, + MeasureUnit.SQUARE_INCH, + MeasureUnit.SQUARE_KILOMETER, + MeasureUnit.SQUARE_METER, + MeasureUnit.SQUARE_MILE, + MeasureUnit.SQUARE_YARD, + MeasureUnit.LITER_PER_KILOMETER, + MeasureUnit.MILE_PER_GALLON, + MeasureUnit.BIT, + MeasureUnit.BYTE, + MeasureUnit.GIGABIT, + MeasureUnit.GIGABYTE, + MeasureUnit.KILOBIT, + MeasureUnit.KILOBYTE, + MeasureUnit.MEGABIT, + MeasureUnit.MEGABYTE, + MeasureUnit.TERABIT, + MeasureUnit.TERABYTE, + MeasureUnit.DAY, + MeasureUnit.HOUR, + MeasureUnit.MICROSECOND, + MeasureUnit.MILLISECOND, + MeasureUnit.MINUTE, + MeasureUnit.MONTH, + MeasureUnit.NANOSECOND, + MeasureUnit.SECOND, + MeasureUnit.WEEK, + MeasureUnit.YEAR, + MeasureUnit.AMPERE, + MeasureUnit.MILLIAMPERE, + MeasureUnit.OHM, + MeasureUnit.VOLT, + MeasureUnit.CALORIE, + MeasureUnit.FOODCALORIE, + MeasureUnit.JOULE, + MeasureUnit.KILOCALORIE, + MeasureUnit.KILOJOULE, + MeasureUnit.KILOWATT_HOUR, + MeasureUnit.GIGAHERTZ, + MeasureUnit.HERTZ, + MeasureUnit.KILOHERTZ, + MeasureUnit.MEGAHERTZ, + MeasureUnit.ASTRONOMICAL_UNIT, + MeasureUnit.CENTIMETER, + MeasureUnit.DECIMETER, + MeasureUnit.FATHOM, + MeasureUnit.FOOT, + MeasureUnit.FURLONG, + MeasureUnit.INCH, + MeasureUnit.KILOMETER, + MeasureUnit.LIGHT_YEAR, + MeasureUnit.METER, + MeasureUnit.MICROMETER, + MeasureUnit.MILE, + MeasureUnit.MILLIMETER, + MeasureUnit.NANOMETER, + MeasureUnit.NAUTICAL_MILE, + MeasureUnit.PARSEC, + MeasureUnit.PICOMETER, + MeasureUnit.YARD, + MeasureUnit.LUX, + MeasureUnit.CARAT, + MeasureUnit.GRAM, + MeasureUnit.KILOGRAM, + MeasureUnit.METRIC_TON, + MeasureUnit.MICROGRAM, + MeasureUnit.MILLIGRAM, + MeasureUnit.OUNCE, + MeasureUnit.OUNCE_TROY, + MeasureUnit.POUND, + MeasureUnit.STONE, + MeasureUnit.TON, + MeasureUnit.GIGAWATT, + MeasureUnit.HORSEPOWER, + MeasureUnit.KILOWATT, + MeasureUnit.MEGAWATT, + MeasureUnit.MILLIWATT, + MeasureUnit.WATT, + MeasureUnit.HECTOPASCAL, + MeasureUnit.INCH_HG, + MeasureUnit.MILLIBAR, + MeasureUnit.MILLIMETER_OF_MERCURY, + MeasureUnit.POUND_PER_SQUARE_INCH, + MeasureUnit.KARAT, + MeasureUnit.KILOMETER_PER_HOUR, + MeasureUnit.METER_PER_SECOND, + MeasureUnit.MILE_PER_HOUR, + MeasureUnit.CELSIUS, + MeasureUnit.FAHRENHEIT, + MeasureUnit.GENERIC, + MeasureUnit.KELVIN, + MeasureUnit.ACRE_FOOT, + MeasureUnit.BUSHEL, + MeasureUnit.CENTILITER, + MeasureUnit.CUBIC_CENTIMETER, + MeasureUnit.CUBIC_FOOT, + MeasureUnit.CUBIC_INCH, + MeasureUnit.CUBIC_KILOMETER, + MeasureUnit.CUBIC_METER, + MeasureUnit.CUBIC_MILE, + MeasureUnit.CUBIC_YARD, + MeasureUnit.CUP, + MeasureUnit.DECILITER, + MeasureUnit.FLUID_OUNCE, + MeasureUnit.GALLON, + MeasureUnit.HECTOLITER, + MeasureUnit.LITER, + MeasureUnit.MEGALITER, + MeasureUnit.MILLILITER, + MeasureUnit.PINT, + MeasureUnit.QUART, + MeasureUnit.TABLESPOON, + MeasureUnit.TEASPOON, + }; + assertEquals("", 122, units.length); + } + + public void TestCompatible56_1() { + MeasureUnit[] units = { + MeasureUnit.G_FORCE, + MeasureUnit.METER_PER_SECOND_SQUARED, + MeasureUnit.ARC_MINUTE, + MeasureUnit.ARC_SECOND, + MeasureUnit.DEGREE, + MeasureUnit.RADIAN, + MeasureUnit.REVOLUTION, + MeasureUnit.ACRE, + MeasureUnit.HECTARE, + MeasureUnit.SQUARE_CENTIMETER, + MeasureUnit.SQUARE_FOOT, + MeasureUnit.SQUARE_INCH, + MeasureUnit.SQUARE_KILOMETER, + MeasureUnit.SQUARE_METER, + MeasureUnit.SQUARE_MILE, + MeasureUnit.SQUARE_YARD, + MeasureUnit.LITER_PER_100KILOMETERS, + MeasureUnit.LITER_PER_KILOMETER, + MeasureUnit.MILE_PER_GALLON, + MeasureUnit.BIT, + MeasureUnit.BYTE, + MeasureUnit.GIGABIT, + MeasureUnit.GIGABYTE, + MeasureUnit.KILOBIT, + MeasureUnit.KILOBYTE, + MeasureUnit.MEGABIT, + MeasureUnit.MEGABYTE, + MeasureUnit.TERABIT, + MeasureUnit.TERABYTE, + MeasureUnit.CENTURY, + MeasureUnit.DAY, + MeasureUnit.HOUR, + MeasureUnit.MICROSECOND, + MeasureUnit.MILLISECOND, + MeasureUnit.MINUTE, + MeasureUnit.MONTH, + MeasureUnit.NANOSECOND, + MeasureUnit.SECOND, + MeasureUnit.WEEK, + MeasureUnit.YEAR, + MeasureUnit.AMPERE, + MeasureUnit.MILLIAMPERE, + MeasureUnit.OHM, + MeasureUnit.VOLT, + MeasureUnit.CALORIE, + MeasureUnit.FOODCALORIE, + MeasureUnit.JOULE, + MeasureUnit.KILOCALORIE, + MeasureUnit.KILOJOULE, + MeasureUnit.KILOWATT_HOUR, + MeasureUnit.GIGAHERTZ, + MeasureUnit.HERTZ, + MeasureUnit.KILOHERTZ, + MeasureUnit.MEGAHERTZ, + MeasureUnit.ASTRONOMICAL_UNIT, + MeasureUnit.CENTIMETER, + MeasureUnit.DECIMETER, + MeasureUnit.FATHOM, + MeasureUnit.FOOT, + MeasureUnit.FURLONG, + MeasureUnit.INCH, + MeasureUnit.KILOMETER, + MeasureUnit.LIGHT_YEAR, + MeasureUnit.METER, + MeasureUnit.MICROMETER, + MeasureUnit.MILE, + MeasureUnit.MILE_SCANDINAVIAN, + MeasureUnit.MILLIMETER, + MeasureUnit.NANOMETER, + MeasureUnit.NAUTICAL_MILE, + MeasureUnit.PARSEC, + MeasureUnit.PICOMETER, + MeasureUnit.YARD, + MeasureUnit.LUX, + MeasureUnit.CARAT, + MeasureUnit.GRAM, + MeasureUnit.KILOGRAM, + MeasureUnit.METRIC_TON, + MeasureUnit.MICROGRAM, + MeasureUnit.MILLIGRAM, + MeasureUnit.OUNCE, + MeasureUnit.OUNCE_TROY, + MeasureUnit.POUND, + MeasureUnit.STONE, + MeasureUnit.TON, + MeasureUnit.GIGAWATT, + MeasureUnit.HORSEPOWER, + MeasureUnit.KILOWATT, + MeasureUnit.MEGAWATT, + MeasureUnit.MILLIWATT, + MeasureUnit.WATT, + MeasureUnit.HECTOPASCAL, + MeasureUnit.INCH_HG, + MeasureUnit.MILLIBAR, + MeasureUnit.MILLIMETER_OF_MERCURY, + MeasureUnit.POUND_PER_SQUARE_INCH, + MeasureUnit.KARAT, + MeasureUnit.KILOMETER_PER_HOUR, + MeasureUnit.KNOT, + MeasureUnit.METER_PER_SECOND, + MeasureUnit.MILE_PER_HOUR, + MeasureUnit.CELSIUS, + MeasureUnit.FAHRENHEIT, + MeasureUnit.GENERIC, + MeasureUnit.KELVIN, + MeasureUnit.ACRE_FOOT, + MeasureUnit.BUSHEL, + MeasureUnit.CENTILITER, + MeasureUnit.CUBIC_CENTIMETER, + MeasureUnit.CUBIC_FOOT, + MeasureUnit.CUBIC_INCH, + MeasureUnit.CUBIC_KILOMETER, + MeasureUnit.CUBIC_METER, + MeasureUnit.CUBIC_MILE, + MeasureUnit.CUBIC_YARD, + MeasureUnit.CUP, + MeasureUnit.CUP_METRIC, + MeasureUnit.DECILITER, + MeasureUnit.FLUID_OUNCE, + MeasureUnit.GALLON, + MeasureUnit.HECTOLITER, + MeasureUnit.LITER, + MeasureUnit.MEGALITER, + MeasureUnit.MILLILITER, + MeasureUnit.PINT, + MeasureUnit.PINT_METRIC, + MeasureUnit.QUART, + MeasureUnit.TABLESPOON, + MeasureUnit.TEASPOON, + }; + assertEquals("", 129, units.length); + } + public void TestExamplesInDocs() { MeasureFormat fmtFr = MeasureFormat.getInstance( ULocale.FRENCH, FormatWidth.SHORT); -- 2.40.0