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 }