1/* GENERATED SOURCE. DO NOT MODIFY. */ 2// © 2017 and later: Unicode, Inc. and others. 3// License & terms of use: http://www.unicode.org/copyright.html#License 4package android.icu.dev.test.number; 5 6import static org.junit.Assert.assertEquals; 7import static org.junit.Assert.assertFalse; 8import static org.junit.Assert.assertTrue; 9 10import org.junit.Test; 11 12import android.icu.impl.number.DecimalQuantity; 13import android.icu.impl.number.DecimalQuantity_DualStorageBCD; 14import android.icu.impl.number.MicroProps; 15import android.icu.impl.number.MutablePatternModifier; 16import android.icu.impl.number.NumberStringBuilder; 17import android.icu.impl.number.PatternStringParser; 18import android.icu.number.NumberFormatter.SignDisplay; 19import android.icu.number.NumberFormatter.UnitWidth; 20import android.icu.text.DecimalFormatSymbols; 21import android.icu.util.Currency; 22import android.icu.util.ULocale; 23import android.icu.testsharding.MainTestShard; 24 25@MainTestShard 26public class MutablePatternModifierTest { 27 28 @Test 29 public void basic() { 30 MutablePatternModifier mod = new MutablePatternModifier(false); 31 mod.setPatternInfo(PatternStringParser.parseToPatternInfo("a0b")); 32 mod.setPatternAttributes(SignDisplay.AUTO, false); 33 mod.setSymbols( 34 DecimalFormatSymbols.getInstance(ULocale.ENGLISH), 35 Currency.getInstance("USD"), 36 UnitWidth.SHORT, 37 null); 38 39 mod.setNumberProperties(false, null); 40 assertEquals("a", getPrefix(mod)); 41 assertEquals("b", getSuffix(mod)); 42 mod.setPatternAttributes(SignDisplay.ALWAYS, false); 43 assertEquals("+a", getPrefix(mod)); 44 assertEquals("b", getSuffix(mod)); 45 mod.setNumberProperties(true, null); 46 assertEquals("-a", getPrefix(mod)); 47 assertEquals("b", getSuffix(mod)); 48 mod.setPatternAttributes(SignDisplay.NEVER, false); 49 assertEquals("a", getPrefix(mod)); 50 assertEquals("b", getSuffix(mod)); 51 52 mod.setPatternInfo(PatternStringParser.parseToPatternInfo("a0b;c-0d")); 53 mod.setPatternAttributes(SignDisplay.AUTO, false); 54 mod.setNumberProperties(false, null); 55 assertEquals("a", getPrefix(mod)); 56 assertEquals("b", getSuffix(mod)); 57 mod.setPatternAttributes(SignDisplay.ALWAYS, false); 58 assertEquals("c+", getPrefix(mod)); 59 assertEquals("d", getSuffix(mod)); 60 mod.setNumberProperties(true, null); 61 assertEquals("c-", getPrefix(mod)); 62 assertEquals("d", getSuffix(mod)); 63 mod.setPatternAttributes(SignDisplay.NEVER, false); 64 assertEquals("c-", getPrefix(mod)); // TODO: What should this behavior be? 65 assertEquals("d", getSuffix(mod)); 66 } 67 68 @Test 69 public void mutableEqualsImmutable() { 70 MutablePatternModifier mod = new MutablePatternModifier(false); 71 mod.setPatternInfo(PatternStringParser.parseToPatternInfo("a0b;c-0d")); 72 mod.setPatternAttributes(SignDisplay.AUTO, false); 73 mod.setSymbols(DecimalFormatSymbols.getInstance(ULocale.ENGLISH), null, UnitWidth.SHORT, null); 74 DecimalQuantity fq = new DecimalQuantity_DualStorageBCD(1); 75 76 NumberStringBuilder nsb1 = new NumberStringBuilder(); 77 MicroProps micros1 = new MicroProps(false); 78 mod.addToChain(micros1); 79 mod.processQuantity(fq); 80 micros1.modMiddle.apply(nsb1, 0, 0); 81 82 NumberStringBuilder nsb2 = new NumberStringBuilder(); 83 MicroProps micros2 = new MicroProps(true); 84 mod.createImmutable().applyToMicros(micros2, fq); 85 micros2.modMiddle.apply(nsb2, 0, 0); 86 87 NumberStringBuilder nsb3 = new NumberStringBuilder(); 88 MicroProps micros3 = new MicroProps(false); 89 mod.addToChain(micros3); 90 mod.setPatternAttributes(SignDisplay.ALWAYS, false); 91 mod.processQuantity(fq); 92 micros3.modMiddle.apply(nsb3, 0, 0); 93 94 assertTrue(nsb1 + " vs. " + nsb2, nsb1.contentEquals(nsb2)); 95 assertFalse(nsb1 + " vs. " + nsb3, nsb1.contentEquals(nsb3)); 96 } 97 98 private static String getPrefix(MutablePatternModifier mod) { 99 NumberStringBuilder nsb = new NumberStringBuilder(); 100 mod.apply(nsb, 0, 0); 101 return nsb.subSequence(0, mod.getPrefixLength()).toString(); 102 } 103 104 private static String getSuffix(MutablePatternModifier mod) { 105 NumberStringBuilder nsb = new NumberStringBuilder(); 106 mod.apply(nsb, 0, 0); 107 return nsb.subSequence(mod.getPrefixLength(), nsb.length()).toString(); 108 } 109} 110