Change public method to use StringPiece

This commit is contained in:
Shane F. Carr 2020-01-17 17:13:16 +01:00
parent 6369aba35a
commit 2ea62fea16
3 changed files with 7 additions and 2 deletions

View file

@ -731,7 +731,7 @@ private:
} // namespace
MeasureUnit MeasureUnit::forIdentifier(const char* identifier, UErrorCode& status) {
MeasureUnit MeasureUnit::forIdentifier(StringPiece identifier, UErrorCode& status) {
return Parser::from(identifier, status).getOnlySequenceUnit(status).build(status);
}

View file

@ -265,7 +265,7 @@ class U_I18N_API MeasureUnit: public UObject {
* @param status Set if the identifier is invalid.
* @draft ICU 67
*/
static MeasureUnit forIdentifier(const char* identifier, UErrorCode& status);
static MeasureUnit forIdentifier(StringPiece identifier, UErrorCode& status);
/**
* Copy assignment operator.

View file

@ -3355,6 +3355,11 @@ void MeasureFormatTest::TestCompoundUnitOperations() {
meterSecond.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
// Test that StringPiece does not overflow
MeasureUnit kiloSquareSecond2 = MeasureUnit::forIdentifier({secondCentimeter.getIdentifier(), 17}, status);
verifySingleUnit(kiloSquareSecond2, UMEASURE_SI_PREFIX_KILO, 2, "square-kilosecond");
assertTrue("string piece equality", kiloSquareSecond == kiloSquareSecond2);
MeasureUnit footInch = MeasureUnit::forIdentifier("foot+inch", status);
MeasureUnit inchFoot = MeasureUnit::forIdentifier("inch+foot", status);