@@ -6059,30 +6059,40 @@ void NumberFormatterApiTest::microPropsInternals() {
6059
6059
void NumberFormatterApiTest::formatUnitsAliases () {
6060
6060
IcuTestErrorCode status (*this , " formatUnitsAliases" );
6061
6061
6062
- if (logKnownIssue (" ICU-23105" , " With CLDR 48m1, C++ NumberFormatterApiTest::formatUnitsAliases fails (J passes)" )) {
6063
- return ;
6064
- }
6065
6062
struct TestCase {
6066
- const MeasureUnit measureUnit;
6063
+ std::unique_ptr<MeasureUnit> measureUnit;
6064
+ const char * measureUnitString; // Only used if measureUnit is nullptr
6067
6065
const UnicodeString expectedFormat;
6068
6066
} testCases[]{
6069
6067
// Aliases
6070
- {MeasureUnit::getMilligramPerDeciliter () , u" 2 milligrams per deciliter" },
6071
- {MeasureUnit::getLiterPer100Kilometers (), u" 2 liters per 100 kilometers " },
6072
- {MeasureUnit::getPartPerMillion (), u" 2 parts per million " },
6073
- {MeasureUnit::forIdentifier ( " permillion " , status) , u" 2 parts per million" },
6074
- {MeasureUnit::getMillimeterOfMercury (), u" 2 millimeters of mercury" },
6068
+ {std::make_unique< MeasureUnit>( MeasureUnit::getMilligramOfglucosePerDeciliter ()), nullptr , u" 2 milligrams per deciliter" },
6069
+ {std::make_unique< MeasureUnit>( MeasureUnit::getMilligramPerDeciliter ()), nullptr , u" 2 milligrams per deciliter " },
6070
+ {std::make_unique< MeasureUnit>( MeasureUnit::getLiterPer100Kilometers ()), nullptr , u" 2 liters per 100 kilometers " },
6071
+ {std::make_unique< MeasureUnit>( MeasureUnit::getPartPerMillion ()), nullptr , u" 2 parts per million" },
6072
+ {std::make_unique< MeasureUnit>( MeasureUnit ::getMillimeterOfMercury ()), nullptr , u" 2 millimeters of mercury" },
6075
6073
6076
6074
// Some replacements
6077
- {MeasureUnit::getMilligramOfglucosePerDeciliter (), u" 2 milligrams per deciliter" },
6078
- {MeasureUnit::getLiterPer100Kilometers (), u" 2 liters per 100 kilometers" },
6079
- {MeasureUnit::getPartPer1E6 (), u" 2 parts per million" },
6080
- {MeasureUnit::forIdentifier (" millimeter-ofhg" , status), u" 2 millimeters of mercury" },
6075
+ {nullptr , " millimeter-ofhg" , u" 2 millimeters of mercury" },
6076
+ {nullptr , " liter-per-100-kilometer" , u" 2 liters per 100 kilometers" },
6077
+ {nullptr , " permillion" , u" 2 parts per million" },
6078
+ {nullptr , " part-per-million" , u" 2 parts per million" },
6079
+ {nullptr , " part-per-1e6" , u" 2 parts per million" },
6081
6080
};
6082
6081
6083
6082
for (const auto &testCase : testCases) {
6083
+ if (testCase.measureUnitString != nullptr &&
6084
+ (uprv_strcmp (" permillion" , testCase.measureUnitString ) == 0 ||
6085
+ uprv_strcmp (" part-per-million" , testCase.measureUnitString ) == 0 )) {
6086
+ logKnownIssue (" ICU-23222" , " Ensure unit aliases work correctly to avoid breaking callers" );
6087
+ continue ;
6088
+ }
6089
+
6090
+ MeasureUnit unit = testCase.measureUnit ? *testCase.measureUnit : MeasureUnit::forIdentifier (testCase.measureUnitString , status);
6091
+ if (status.errIfFailureAndReset ()) {
6092
+ continue ;
6093
+ }
6084
6094
UnicodeString actualFormat = NumberFormatter::withLocale (icu::Locale::getEnglish ())
6085
- .unit (testCase. measureUnit )
6095
+ .unit (unit )
6086
6096
.unitWidth (UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME)
6087
6097
.formatDouble (2.0 , status)
6088
6098
.toString (status);
0 commit comments