• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // © 2022 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 
4 package com.ibm.icu.dev.test.message2;
5 
6 import java.util.ArrayList;
7 import java.util.Arrays;
8 import java.util.List;
9 import java.util.Locale;
10 import java.util.Locale.Category;
11 import java.util.Map;
12 import java.util.StringJoiner;
13 
14 /** Utility class encapsulating what we need for a simple test. */
15 class TestCase {
16         final String message;
17         final Locale locale;
18         final Map<String, Object> arguments;
19         final String expected;
20         final boolean ignore;
21         final String ignoreReason;
22         final List<String> errors;
23 
24         @Override
toString()25         public String toString() {
26             StringJoiner result = new StringJoiner(",\n  ", "TestCase {\n  ", "\n}");
27             result.add("message: " + message + "'");
28             result.add("locale: '" + locale.toLanguageTag() + "'");
29             result.add("arguments: " + arguments);
30             result.add("expected: '" + expected + "'");
31             result.add("ignore: " + ignore);
32             result.add("ignoreReason: '" + ignoreReason + "'");
33             result.add("errors: " + errors);
34             return result.toString();
35         }
36 
TestCase(TestCase.Builder builder)37         private TestCase(TestCase.Builder builder) {
38             this.ignore = builder.ignore;
39             this.message = builder.pattern == null ? "" : builder.pattern;
40             this.locale = (builder.localeId == null)
41                     ? Locale.getDefault(Category.FORMAT)
42                     : Locale.forLanguageTag(builder.localeId);
43             this.arguments = builder.arguments == null ? Args.NONE : builder.arguments;
44             this.expected = builder.expected == null ? "" : builder.expected;
45             this.errors = builder.errors == null ? new ArrayList<String>() : builder.errors;
46             this.ignoreReason = builder.ignoreReason == null ? "" : builder.ignoreReason;
47         }
48 
49         static class Builder {
50             private String pattern;
51             private String localeId;
52             private Map<String, Object> arguments;
53             private String expected;
54             private boolean ignore = false;
55             private String ignoreReason;
56             private List<String> errors;
57 
build()58             public TestCase build() {
59                 return new TestCase(this);
60             }
61 
pattern(String pattern)62             public TestCase.Builder pattern(String pattern) {
63                 this.pattern = pattern;
64                 return this;
65             }
66 
patternJs(String patternJs)67             public TestCase.Builder patternJs(String patternJs) {
68                 // Ignore the JavaScript stuff
69                 return this;
70             }
71 
arguments(Map<String, Object> arguments)72             public TestCase.Builder arguments(Map<String, Object> arguments) {
73                 this.arguments = arguments;
74                 return this;
75             }
76 
expected(String expected)77             public TestCase.Builder expected(String expected) {
78                 this.expected = expected;
79                 return this;
80             }
81 
errors(String .... errors)82             public TestCase.Builder errors(String ... errors) {
83                 this.errors = new ArrayList<>();
84                 this.errors.addAll(Arrays.asList(errors));
85                 return this;
86             }
87 
locale(String localeId)88             public TestCase.Builder locale(String localeId) {
89                 this.localeId = localeId;
90                 return this;
91             }
92 
ignore()93             public TestCase.Builder ignore() {
94                 this.ignore = true;
95                 this.ignoreReason = "";
96                 return this;
97             }
98 
ignore(String reason)99             public TestCase.Builder ignore(String reason) {
100                 this.ignore = true;
101                 this.ignoreReason = reason;
102                 return this;
103             }
104         }
105     }