Skip to content

Commit 31ef9fd

Browse files
author
Craig Cornelius
authored
Mark "standard" datetime format type as "unsupported". Classify more … (#515)
* Mark "standard" datetime format type as "unsupported". Classify more things as "known issues" * Fix some warnings * Update message for unsupported dateTimeFormatType
1 parent 4c4f463 commit 31ef9fd

File tree

6 files changed

+66
-9
lines changed

6 files changed

+66
-9
lines changed

executors/icu4j/74/executor-icu4j/src/main/java/org/unicode/conformance/testtype/datetimeformatter/DateTimeFormatterInputJson.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public class DateTimeFormatterInputJson implements ITestTypeInputJson {
3131

3232
public DateTimeFormatterTimeStyle timeStyle;
3333

34+
public String dateTimeFormatType;
35+
3436
// TODO!!!
3537
public String calendar_string;
3638
// Set calendar from calendar_string!

executors/icu4j/74/executor-icu4j/src/main/java/org/unicode/conformance/testtype/datetimeformatter/DateTimeFormatterOutputJson.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ public class DateTimeFormatterOutputJson implements ITestTypeOutputJson {
1111
public String result;
1212

1313
public String error;
14+
public String error_type;
15+
public String error_detail;
16+
public String unsupported;
1417

1518
public String error_message;
1619
}

executors/icu4j/74/executor-icu4j/src/main/java/org/unicode/conformance/testtype/datetimeformatter/DateTimeFormatterTester.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public ITestTypeInputJson inputMapToJson(Map<String, Object> inputMapData) {
6161

6262
result.calendar_string = (String) inputOptions.get("calendar");
6363

64+
result.dateTimeFormatType = (String) inputOptions.get("dateTimeFormatType");
65+
6466
result.locale_with_calendar = new Builder().setLanguageTag(result.locale_string)
6567
.setUnicodeLocaleKeyword("ca", result.calendar_string)
6668
.build();
@@ -87,6 +89,14 @@ public ITestTypeOutputJson execute(ITestTypeInputJson inputJson) {
8789
return output;
8890
}
8991

92+
if (input.dateTimeFormatType != null && input.dateTimeFormatType.equals("standard")) {
93+
output.error_message = input.dateTimeFormatType;
94+
output.error_detail = "not atTime";
95+
output.error_type = "unsupported";
96+
output.unsupported = "format type";
97+
return output;
98+
}
99+
90100
// If we get here, it's a pass/fail result (supported options and no runtime errors/exceptions)
91101
return output;
92102
}

executors/icu4j/74/executor-icu4j/src/test/java/org/unicode/conformance/datetimeformatter/DateTimeFormatterTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,15 @@ public void testDate217() {
147147

148148
assertEquals("3/6/2567 BE, 4:00 PM", output.result);
149149
}
150+
151+
@Test
152+
public void testDateTimeFormatType() {
153+
String testInput = "{\"test_type\": \"datetime_fmt\", \"label\":\"00000\",\"locale\":\"en-US\",\"input_string\":\"2024-03-17T00:00:00Z\",\"options\":{\"timeZone\":\"America/Los_Angeles\",\"dateStyle\":\"short\",\"timeStyle\":\"short\",\"dateTimeFormatType\":\"standard\",\"calendar\":\"gregory\"},\"tz_offset_secs\":-25200,\"original_input\":\"2024-03-16T17:00-07:00[America/Los_Angeles]\",\"hexhash\":\"4411425489f619054642a18e13b68490544728cb\"}";
154+
155+
DateTimeFormatterOutputJson output =
156+
(DateTimeFormatterOutputJson) DateTimeFormatterTester.INSTANCE.getStructuredOutputFromInputStr(
157+
testInput);
158+
159+
assertEquals("format type", output.unsupported);
160+
}
150161
}

executors/node/datetime_fmt.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,15 @@ module.exports = {
169169
test_options['dateStyle'] = input_options['dateStyle'];
170170
}
171171

172+
if ('dateTimeFormatType' in input_options &&
173+
input_options['dateTimeFormatType'] == 'standard') {
174+
return_json['error_type'] = 'unsupported';
175+
return_json['error_detail'] = 'dateTimeFormatType: ' +
176+
input_options['dateTimeFormatType'];
177+
return_json['unsupported'] = 'format type';
178+
return return_json;
179+
}
180+
172181
if ('semanticSkeleton' in input_options) {
173182
// Check for known issue when format output should give only the time zone.
174183
if (input_options['semanticSkeleton'] == 'Z') {

verifier/check_known_issues.py

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class knownIssueType(Enum):
5858
datetime_fmt_at_inserted = 'Alternate formatting with "at" between time and date'
5959
datetime_fmt_arabic_comma = 'Arabic comma vs. ASCII comma'
6060
datetime_unexpected_comma = 'Unexpected comma'
61+
datetime_inserted_comma = 'inserted comma'
6162

6263
datetime_semantic_Z = 'NodeJS always includes date or time'
6364

@@ -109,7 +110,7 @@ def diff_ascii_space_vs_nbsp(actual, expected_value):
109110

110111
# If replacing all the NBSP characdters in expected gives the actual result,
111112
# then the only differences were with this type of space in formatted output.
112-
if expected_value.replace(SP, NBSP) == actual:
113+
if expected_value.replace(NBSP, SP) == actual:
113114
return knownIssueType.known_issue_sp_nbsp
114115
else:
115116
return None
@@ -169,13 +170,19 @@ def dt_check_for_alternate_long_form(test, actual, expected):
169170
return None
170171
if actual.replace(' at', ',') == expected:
171172
return knownIssueType.datetime_fmt_at_inserted
173+
172174
# Thai language difference with "time" inserted
173-
if actual.replace(' เวลา', '') == expected:
175+
if actual.replace('เวลา ', '') == expected:
174176
return knownIssueType.datetime_fmt_at_inserted
175177
# Arabic
176178
if actual.replace(' في', '،') == expected:
177179
return knownIssueType.datetime_fmt_at_inserted
178-
180+
# Vietnamese
181+
if actual.replace('lúc ', '') == expected:
182+
return knownIssueType.datetime_fmt_at_inserted
183+
# Bengali
184+
if actual.replace('এ ', '') == expected:
185+
return knownIssueType.datetime_fmt_at_inserted
179186
return None
180187

181188

@@ -185,19 +192,35 @@ def dt_check_arabic_comma(test, actual, expected):
185192
return None
186193

187194

188-
def dt_unexpected_comma(test, actual, expected):
195+
def dt_unexpected_comma(test, actual, expected):
189196
if actual.replace('\u002c', '') == expected:
190197
return knownIssueType.datetime_unexpected_comma
191198
else:
192199
return None
193200

201+
def dt_inserted_comma(test, actual, expected):
202+
sm = SequenceMatcher(None, expected, actual)
203+
sm_opcodes = sm.get_opcodes()
204+
# Look for one additional comma
205+
for opcode in sm_opcodes:
206+
if opcode[0] == 'insert':
207+
j1 = opcode[3]
208+
j2 = opcode[4]
209+
if actual[j1:j2] == ',':
210+
return knownIssueType.datetime_inserted_comma
211+
return None
212+
194213

195214
def check_datetime_known_issues(test):
196215
# Examine a single test for date/time isses
197216
# Returns known issues identified for this test in this category
198217
remove_this_one = False
199218
try:
200-
result = test['result']
219+
try:
220+
result = test['result']
221+
except KeyError as error:
222+
# This lack of a result may be expected.
223+
return False
201224
expected = test['expected']
202225
input_data = test.get('input_data')
203226

@@ -233,10 +256,9 @@ def check_datetime_known_issues(test):
233256
test['known_issue_id'] = is_ki.value
234257
remove_this_one = True
235258

236-
# Check if the semantic skeleton has "Z"
237-
if input_data and 'semanticSkeleton' in input_data['options'] and \
238-
input_data['options']['semanticSkeleton'] == 'Z':
239-
test['known_issud_id'] = knownIssueType.datetime_semantic_Z.value
259+
is_ki = dt_inserted_comma(test, result, expected)
260+
if is_ki:
261+
test['known_issue_id'] = is_ki.value
240262
remove_this_one = True
241263

242264
except BaseException as err:

0 commit comments

Comments
 (0)