1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.text;
18
19 import static java.util.FormattableFlags.LEFT_JUSTIFY;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertThrowsExactly;
22
23 import java.util.Formattable;
24 import java.util.Formatter;
25
26 import org.junit.jupiter.api.Test;
27
28
29
30
31 class FormattableUtilsTest {
32
33 static class SimplestFormattable implements Formattable {
34 private final String text;
35
36 SimplestFormattable(final String text) {
37 this.text = text;
38 }
39
40 @Override
41 public void formatTo(final Formatter formatter, final int flags, final int width, final int precision) {
42 formatter.format(text);
43 }
44 }
45
46 private Formatter createFormatter() {
47 return new Formatter();
48 }
49
50 @Test
51 void testAlternatePadCharacter() {
52 final char pad = '_';
53 assertEquals("foo", FormattableUtils.append("foo", createFormatter(), 0, -1, -1, pad).toString());
54 assertEquals("fo", FormattableUtils.append("foo", createFormatter(), 0, -1, 2, pad).toString());
55 assertEquals("_foo", FormattableUtils.append("foo", createFormatter(), 0, 4, -1, pad).toString());
56 assertEquals("___foo", FormattableUtils.append("foo", createFormatter(), 0, 6, -1, pad).toString());
57 assertEquals("_fo", FormattableUtils.append("foo", createFormatter(), 0, 3, 2, pad).toString());
58 assertEquals("___fo", FormattableUtils.append("foo", createFormatter(), 0, 5, 2, pad).toString());
59 assertEquals("foo_", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 4, -1, pad).toString());
60 assertEquals("foo___", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 6, -1, pad).toString());
61 assertEquals("fo_", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 3, 2, pad).toString());
62 assertEquals("fo___", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 5, 2, pad).toString());
63 }
64
65 @Test
66 void testAlternatePadCharAndEllipsis() {
67 assertEquals("foo", FormattableUtils.append("foo", createFormatter(), 0, -1, -1, '_', "*").toString());
68 assertEquals("f*", FormattableUtils.append("foo", createFormatter(), 0, -1, 2, '_', "*").toString());
69 assertEquals("_foo", FormattableUtils.append("foo", createFormatter(), 0, 4, -1, '_', "*").toString());
70 assertEquals("___foo", FormattableUtils.append("foo", createFormatter(), 0, 6, -1, '_', "*").toString());
71 assertEquals("_f*", FormattableUtils.append("foo", createFormatter(), 0, 3, 2, '_', "*").toString());
72 assertEquals("___f*", FormattableUtils.append("foo", createFormatter(), 0, 5, 2, '_', "*").toString());
73 assertEquals("foo_", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 4, -1, '_', "*").toString());
74 assertEquals("foo___", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 6, -1, '_', "*").toString());
75 assertEquals("f*_", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 3, 2, '_', "*").toString());
76 assertEquals("f*___", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 5, 2, '_', "*").toString());
77
78 assertEquals("foo", FormattableUtils.append("foo", createFormatter(), 0, -1, -1, '_', "+*").toString());
79 assertEquals("+*", FormattableUtils.append("foo", createFormatter(), 0, -1, 2, '_', "+*").toString());
80 assertEquals("_foo", FormattableUtils.append("foo", createFormatter(), 0, 4, -1, '_', "+*").toString());
81 assertEquals("___foo", FormattableUtils.append("foo", createFormatter(), 0, 6, -1, '_', "+*").toString());
82 assertEquals("_+*", FormattableUtils.append("foo", createFormatter(), 0, 3, 2, '_', "+*").toString());
83 assertEquals("___+*", FormattableUtils.append("foo", createFormatter(), 0, 5, 2, '_', "+*").toString());
84 assertEquals("foo_", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 4, -1, '_', "+*").toString());
85 assertEquals("foo___", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 6, -1, '_', "+*").toString());
86 assertEquals("+*_", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 3, 2, '_', "+*").toString());
87 assertEquals("+*___", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 5, 2, '_', "+*").toString());
88 }
89
90 @Test
91 void testAppendWithNullFormatterAndIntsThrowsNullPointerException() {
92 assertThrowsExactly(NullPointerException.class, () -> FormattableUtils.append("", null, 0, 0, 0, '}'));
93 }
94
95 @Test
96 void testDefaultAppend() {
97 assertEquals("foo", FormattableUtils.append("foo", createFormatter(), 0, -1, -1).toString());
98 assertEquals("fo", FormattableUtils.append("foo", createFormatter(), 0, -1, 2).toString());
99 assertEquals(" foo", FormattableUtils.append("foo", createFormatter(), 0, 4, -1).toString());
100 assertEquals(" foo", FormattableUtils.append("foo", createFormatter(), 0, 6, -1).toString());
101 assertEquals(" fo", FormattableUtils.append("foo", createFormatter(), 0, 3, 2).toString());
102 assertEquals(" fo", FormattableUtils.append("foo", createFormatter(), 0, 5, 2).toString());
103 assertEquals("foo ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 4, -1).toString());
104 assertEquals("foo ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 6, -1).toString());
105 assertEquals("fo ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 3, 2).toString());
106 assertEquals("fo ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 5, 2).toString());
107 }
108
109 @Test
110 void testEllipsis() {
111 assertEquals("foo", FormattableUtils.append("foo", createFormatter(), 0, -1, -1, "*").toString());
112 assertEquals("f*", FormattableUtils.append("foo", createFormatter(), 0, -1, 2, "*").toString());
113 assertEquals(" foo", FormattableUtils.append("foo", createFormatter(), 0, 4, -1, "*").toString());
114 assertEquals(" foo", FormattableUtils.append("foo", createFormatter(), 0, 6, -1, "*").toString());
115 assertEquals(" f*", FormattableUtils.append("foo", createFormatter(), 0, 3, 2, "*").toString());
116 assertEquals(" f*", FormattableUtils.append("foo", createFormatter(), 0, 5, 2, "*").toString());
117 assertEquals("foo ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 4, -1, "*").toString());
118 assertEquals("foo ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 6, -1, "*").toString());
119 assertEquals("f* ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 3, 2, "*").toString());
120 assertEquals("f* ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 5, 2, "*").toString());
121
122 assertEquals("foo", FormattableUtils.append("foo", createFormatter(), 0, -1, -1, "+*").toString());
123 assertEquals("+*", FormattableUtils.append("foo", createFormatter(), 0, -1, 2, "+*").toString());
124 assertEquals(" foo", FormattableUtils.append("foo", createFormatter(), 0, 4, -1, "+*").toString());
125 assertEquals(" foo", FormattableUtils.append("foo", createFormatter(), 0, 6, -1, "+*").toString());
126 assertEquals(" +*", FormattableUtils.append("foo", createFormatter(), 0, 3, 2, "+*").toString());
127 assertEquals(" +*", FormattableUtils.append("foo", createFormatter(), 0, 5, 2, "+*").toString());
128 assertEquals("foo ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 4, -1, "+*").toString());
129 assertEquals("foo ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 6, -1, "+*").toString());
130 assertEquals("+* ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 3, 2, "+*").toString());
131 assertEquals("+* ", FormattableUtils.append("foo", createFormatter(), LEFT_JUSTIFY, 5, 2, "+*").toString());
132 }
133
134 @Test
135 void testIllegalEllipsis() {
136 assertThrowsExactly(IllegalArgumentException.class, () -> FormattableUtils.append("foo", createFormatter(), 0, -1, 1, "xx"));
137 }
138
139 @Test
140 void testIllegalEllipsisWith7Args() {
141 final String ellipsis = "xxxx";
142 final int precisionLessThanEllipsisLength = ellipsis.length() - 1;
143 assertThrowsExactly(IllegalArgumentException.class,
144 () -> FormattableUtils.append("foo", createFormatter(), 0, 0, precisionLessThanEllipsisLength, '}', ellipsis));
145 }
146
147 @Test
148 void testPublicConstructorExists() {
149 new FormattableUtils();
150 }
151
152 @Test
153 void testSimplestFormat() {
154 final Formattable formattable = new SimplestFormattable("foo");
155 assertEquals("foo", FormattableUtils.toString(formattable));
156 }
157
158 }