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