GitHub Sync (#405)

* Refactor the pattern for skipping tests

Use the `skip` argument so that tests are reported as skipped consistently
across all reporters rather than output with `print` which is easily missed.

Use a single list of unsupported chrome locales for both short and long formats.
It is not useful to run tests for the locales that coincidentally match the
fallback. Keep the variables separate since there will become new locales that
are only skipped for short formats.

Make some utility methods inside test files private.

PiperOrigin-RevId: 359697870

* Skip some locales for web tests

Skip the locales that cause failures in chrome version 88. This should unblock
running tests on CI in github.

PiperOrigin-RevId: 360139777

* Add optional parameter to NumberFormat.compact() to provide custom pattern.

In Play Console UI we need to format positive values that represent a change
with explicit + sign. CompactNumberFormat does not allow us to do so.

#custom_kpi

PiperOrigin-RevId: 361142234

* Remove the const tag for date time pattern data

- The file documentation says it's generated by google3/i18n/tools/generate_datetime_pattern_dart.cc, but the generator file is out of sync with the generated file since 2020-08-19. I just followed the previous CLs and manually edited the file.

PiperOrigin-RevId: 377081517

* Collapse null safety changelogs

PiperOrigin-RevId: 377975405

* Organize imports

https://github.com/dart-lang/intl/commit/f22f7b5ad58a5006fbb415576bcbcfcd88fa918b

PiperOrigin-RevId: 378011273

* Exclude github config from sync

These files can be maintained on github exclusively.

PiperOrigin-RevId: 378013048

* Update LICENSE

https://github.com/dart-lang/intl/pull/377

PiperOrigin-RevId: 378022812

* Use correct stable version for ffi dep

PiperOrigin-RevId: 378025311

* Restore github config

Co-authored-by: Googler <noreply@google.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 284b31e..615d9f2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,13 +1,6 @@
-## 0.17.0-nullsafety.2
+## 0.17.1-dev
 
-* Update SDK constraints to >=2.12.0-0 <3.0.0 based on beta release guidelines.
-
-## 0.17.0-nullsafety.1
-
-* Allow prereleases of the 2.12 Dart SDK.
-
-## 0.17.0-nullsafety
-
+## 0.17.0
  * Migrate to null safety.
  * Add `@pragma('vm:prefer-inline')` to `Intl` methods that already have
    `@pragma('dart2js:tryInline')`, for the same reason: to help omit message
diff --git a/LICENSE b/LICENSE
index ab3bfa0..7efe25f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2013, the Dart project authors. 
+Copyright 2013, the Dart project authors.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
diff --git a/lib/date_time_patterns.dart b/lib/date_time_patterns.dart
index 162dc20..af734be 100644
--- a/lib/date_time_patterns.dart
+++ b/lib/date_time_patterns.dart
@@ -16,7 +16,7 @@
 /// Returns a Map from locale names to another Map that goes from skeletons
 /// to the locale-specific formatting patterns.
 /// Internal use only. Call initializeDateFormatting instead.
-Map<String, Map<String, String>> dateTimePatternMap() => const {
+Map<String, Map<String, String>> dateTimePatternMap() => {
       /// Extended set of localized date/time patterns for locale af.
       'af': const {
         'd': 'd', // DAY
diff --git a/lib/src/intl/number_format.dart b/lib/src/intl/number_format.dart
index 9a3a8f2..85c1b05 100644
--- a/lib/src/intl/number_format.dart
+++ b/lib/src/intl/number_format.dart
@@ -364,18 +364,24 @@
 
   /// A number format for compact representations, e.g. "1.2M" instead
   /// of "1,200,000".
-  factory NumberFormat.compact({String? locale}) {
+  factory NumberFormat.compact({String? locale, String? pattern}) {
     return _CompactNumberFormat(
         locale: locale,
-        formatType: _CompactFormatType.COMPACT_DECIMAL_SHORT_PATTERN);
+        formatType: _CompactFormatType.COMPACT_DECIMAL_SHORT_PATTERN,
+        getPattern: pattern != null
+            ? (x) => pattern
+            : _CompactNumberFormat._forDecimal);
   }
 
   /// A number format for "long" compact representations, e.g. "1.2 million"
-  /// instead of of "1,200,000".
-  factory NumberFormat.compactLong({String? locale}) {
+  /// instead of "1,200,000".
+  factory NumberFormat.compactLong({String? locale, String? pattern}) {
     return _CompactNumberFormat(
         locale: locale,
-        formatType: _CompactFormatType.COMPACT_DECIMAL_LONG_PATTERN);
+        formatType: _CompactFormatType.COMPACT_DECIMAL_LONG_PATTERN,
+        getPattern: pattern != null
+            ? (x) => pattern
+            : _CompactNumberFormat._forDecimal);
   }
 
   /// A number format for compact currency representations, e.g. "$1.2M" instead
diff --git a/pubspec.yaml b/pubspec.yaml
index 6e8de71..870f832 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: intl
-version: 0.17.0-nullsafety.2
+version: 0.17.1-dev
 homepage: https://github.com/dart-lang/intl
 description: >-
   Contains code to deal with internationalized/localized messages, date and
@@ -10,11 +10,11 @@
   sdk: '>=2.12.0-0 <3.0.0'
 
 dependencies:
-  clock: ^1.1.0-nullsafety.1
-  path: ^1.8.0-nullsafety.1
+  clock: ^1.1.0
+  path: ^1.8.0
 
 dev_dependencies:
-  ffi: ^0.2.0-nullsafety.1
-  fixnum: ^1.0.0-nullsafety.0
-  js: ^0.6.3-nullsafety
-  test: ^1.16.0-nullsafety.4
+  ffi: ^1.0.0
+  fixnum: ^1.0.0
+  js: ^0.6.3
+  test: ^1.16.0
diff --git a/test/number_format_compact_icu_test.dart b/test/number_format_compact_icu_test.dart
index b48f91c..5cb1255 100644
--- a/test/number_format_compact_icu_test.dart
+++ b/test/number_format_compact_icu_test.dart
@@ -16,58 +16,62 @@
 import 'more_compact_number_test_data.dart' as more_testdata;
 
 main() {
-  var problemLocales = [
+  var problemLocales = {
     // ICU produces numerals in Arabic script, package:intl uses Latin script.
     'ar',
     // package:intl includes some tweaks to compact numbers for Bengali.
     'bn',
-  ];
-
+  };
   runICUTests(systemIcuVersion: 63, skipLocales: problemLocales);
 }
 
 void runICUTests(
-    {int? systemIcuVersion, String? specialIcuLib, List<String>? skipLocales}) {
-  if (!setupICU(
+    {int? systemIcuVersion,
+    String? specialIcuLib,
+    Set<String> skipLocales = const {}}) {
+  if (!_setupICU(
       systemIcuVersion: systemIcuVersion, specialIcuLibPath: specialIcuLib)) {
     return;
   }
 
-  print("Skipping problem locales $skipLocales.");
-  testdata35.compactNumberTestData
-      .removeWhere((k, v) => skipLocales!.contains(k));
+  void validate(String locale, List<List<String>> expected) {
+    _validateShort(locale, expected, skipLocales);
+    _validateLong(locale, expected, skipLocales);
+  }
+
   testdata35.compactNumberTestData.forEach(validate);
-  more_testdata.cldr35CompactNumTests.forEach(validateFancy);
+  more_testdata.cldr35CompactNumTests.forEach(_validateFancy);
 
   test('UNumberFormatter simple integer formatting', () {
-    expect(FormatWithUnumf('en', 'precision-integer', 5142.3), '5,142');
+    expect(_formatWithUnumf('en', 'precision-integer', 5142.3), '5,142');
   });
 }
 
-void validate(String locale, List<List<String>> expected) {
-  validateShort(locale, expected);
-  validateLong(locale, expected);
-}
-
-void validateShort(String locale, List<List<String>> expected) {
+void _validateShort(
+    String locale, List<List<String>> expected, Set<String> skipLocales) {
+  var skip =
+      skipLocales.contains(locale) ? 'Skipping problem locale $locale' : false;
   test('Validate $locale SHORT', () {
     for (var data in expected) {
       var number = num.parse(data.first);
-      expect(FormatWithUnumf(locale, 'compact-short', number), data[1]);
+      expect(_formatWithUnumf(locale, 'compact-short', number), data[1]);
     }
-  });
+  }, skip: skip);
 }
 
-void validateLong(String locale, List<List<String>> expected) {
+void _validateLong(
+    String locale, List<List<String>> expected, Set<String> skipLocales) {
+  var skip =
+      skipLocales.contains(locale) ? 'Skipping problem locale $locale' : false;
   test('Validate $locale LONG', () {
     for (var data in expected) {
       var number = num.parse(data.first);
-      expect(FormatWithUnumf(locale, 'compact-long', number), data[2]);
+      expect(_formatWithUnumf(locale, 'compact-long', number), data[2]);
     }
-  });
+  }, skip: skip);
 }
 
-void validateFancy(more_testdata.CompactRoundingTestCase t) {
+void _validateFancy(more_testdata.CompactRoundingTestCase t) {
   var locale = 'en';
   var skel = 'compact-short';
   if (t.minimumIntegerDigits != null) {
@@ -84,7 +88,7 @@
     skel += ' .' + '#' * t.maximumFractionDigits!;
   }
   test(t.toString(), () {
-    expect(FormatWithUnumf(locale, skel, t.number), t.expected,
+    expect(_formatWithUnumf(locale, skel, t.number), t.expected,
         reason: 'Skeleton: $skel');
   });
 }
@@ -106,7 +110,7 @@
 ///
 /// If [systemIcuVersion] is unspecified, we expect to find all functions in a
 /// library with filename [specialIcuLibPath].
-bool setupICU({int? systemIcuVersion, String? specialIcuLibPath}) {
+bool _setupICU({int? systemIcuVersion, String? specialIcuLibPath}) {
   DynamicLibrary libicui18n;
   String icuVersionSuffix;
   if (systemIcuVersion != null) {
@@ -152,7 +156,7 @@
   return true;
 }
 
-String FormatWithUnumf(String locale, String skeleton, num number) {
+String _formatWithUnumf(String locale, String skeleton, num number) {
   // // Setup:
   // UErrorCode ec = U_ZERO_ERROR;
   // UNumberFormatter* uformatter =
diff --git a/test/number_format_compact_test.dart b/test/number_format_compact_test.dart
index f645cc0..1545815 100644
--- a/test/number_format_compact_test.dart
+++ b/test/number_format_compact_test.dart
@@ -7,6 +7,7 @@
 
 import 'package:fixnum/fixnum.dart';
 import 'package:intl/intl.dart';
+import 'package:intl/number_symbols_data.dart';
 import 'package:intl/number_symbols_data.dart' as patterns;
 import 'package:test/test.dart';
 
@@ -21,13 +22,43 @@
 //  'mn' : [['4321', '4.32M', 'whatever']]
 };
 
+var compactWithPatternCases = <List<String>>[
+  ['0.012', '+0.01', '+0.01'],
+  ['0.123', '+0.12', '+0.12'],
+  ['1.234', '+1.23', '+1.23'],
+  ['12.34', '+12.3', '+12.3'],
+  ['123.4', '+123', '+123'],
+  ['123.41', '+123', '+123'],
+  ['1234.1', '+1.23K', '+1.23 thousand'],
+  ['12341', '+12.3K', '+12.3 thousand'],
+  ['123412', '+123K', '+123 thousand'],
+  ['1234123', '+1.23M', '+1.23 million'],
+  ['12341234', '+12.3M', '+12.3 million'],
+  ['123412341', '+123M', '+123 million'],
+  ['1234123412', '+1.23B', '+1.23 billion'],
+  ['-0.012', '-0.01', '-0.01'],
+  ['-0.123', '-0.12', '-0.12'],
+  ['-1.234', '-1.23', '-1.23'],
+  ['-12.34', '-12.3', '-12.3'],
+  ['-123.4', '-123', '-123'],
+  ['-123.41', '-123', '-123'],
+  ['-1234.1', '-1.23K', '-1.23 thousand'],
+  ['-12341', '-12.3K', '-12.3 thousand'],
+  ['-123412', '-123K', '-123 thousand'],
+  ['-1234123', '-1.23M', '-1.23 million'],
+  ['-12341234', '-12.3M', '-12.3 million'],
+  ['-123412341', '-123M', '-123 million'],
+  ['-1234123412', '-1.23B', '-1.23 billion'],
+];
+
 void main() {
-  interestingCases.forEach(validate);
-  testdata33.compactNumberTestData.forEach(validate);
-  more_testdata.oldIntlCompactNumTests.forEach(validateFancy);
+  interestingCases.forEach(_validate);
+  testdata33.compactNumberTestData.forEach(_validate);
+  more_testdata.oldIntlCompactNumTests.forEach(_validateFancy);
   // Once code and data is updated to CLDR35:
   // testdata35.compactNumberTestData.forEach(validate);
   // more_testdata.cldr35CompactNumTests.forEach(validateFancy);
+  compactWithPatternCases.forEach(_validateWithPattern);
 
   test("Patterns are consistent across locales", () {
     patterns.compactNumberSymbols.forEach((locale, patterns) {
@@ -141,7 +172,7 @@
 // case.
 // TODO(alanknight): Fix the problems, or at least figure out precisely where
 // the differences are.
-var problemLocalesShort = [
+var _skipLocalsShort = {
   'am', // AM Suffixes differ, not sure why.
   'ca', // For CA, CLDR rules are different. Jumps from 0000 to 00 prefix, so
   // 11 digits prints as 11900.
@@ -169,7 +200,7 @@
   'tr', // TR Doesn't have a 0B format, goes directly to 00B, as a result 54321
   // just prints as 54321
   'ur', // UR Fails one with Expected: '15 ٹریلین'  Actual: '150 کھرب'
-];
+};
 
 /// Locales that have problems in the long format.
 ///
@@ -180,7 +211,7 @@
 ///
 //TODO(alanknight): Narrow these down to particular numbers. Often it's just
 // 999999.
-var problemLocalesLong = [
+var _skipLocalesLong = {
   'ar', 'ar_DZ', 'ar_EG',
   'be', 'bg', 'bs',
   'ca', 'cs', 'da', 'de', 'de_AT', 'de_CH', 'el', 'es', 'es_419', 'es_ES',
@@ -202,55 +233,53 @@
   'sk', 'sl', 'sr', 'sr_Latn', 'sv', 'te', 'tl',
   'ur',
   'uk',
-];
+};
 
-void validate(String locale, List<List<String>> expected) {
-  validateShort(locale, expected);
-  validateLong(locale, expected);
+void _validate(String locale, List<List<String>> expected) {
+  _validateShort(locale, expected);
+  _validateLong(locale, expected);
 }
 
 /// Check each bit of test data against the short compact format, both
 /// formatting and parsing.
-void validateShort(String locale, List<List<String>> expected) {
-  if (problemLocalesShort.contains(locale)) {
-    print("Skipping problem locale '$locale' for SHORT compact number tests");
-    return;
-  }
+void _validateShort(String locale, List<List<String>> expected) {
+  var skip = _skipLocalsShort.contains(locale)
+      ? "Skipping problem locale '$locale' for SHORT compact number tests"
+      : false;
   var shortFormat = NumberFormat.compact(locale: locale);
   test('Validate $locale SHORT', () {
     for (var data in expected) {
       var number = num.parse(data.first);
-      validateNumber(number, shortFormat, data[1]);
+      _validateNumber(number, shortFormat, data[1]);
       var int64Number = Int64(number as int);
-      validateNumber(int64Number, shortFormat, data[1]);
+      _validateNumber(int64Number, shortFormat, data[1]);
       // TODO(alanknight): Make this work for MicroMoney
     }
-  });
+  }, skip: skip);
 }
 
-void validateLong(String locale, List<List<String>> expected) {
-  if (problemLocalesLong.contains(locale)) {
-    print("Skipping problem locale '$locale' for LONG compact number tests");
-    return;
-  }
+void _validateLong(String locale, List<List<String>> expected) {
+  var skip = _skipLocalesLong.contains(locale)
+      ? "Skipping problem locale '$locale' for LONG compact number tests"
+      : false;
   var longFormat = NumberFormat.compactLong(locale: locale);
   test('Validate $locale LONG', () {
     for (var data in expected) {
       var number = num.parse(data.first);
-      validateNumber(number, longFormat, data[2]);
+      _validateNumber(number, longFormat, data[2]);
     }
-  });
+  }, skip: skip);
 }
 
-void validateNumber(number, NumberFormat format, String expected) {
+void _validateNumber(number, NumberFormat format, String expected) {
   var formatted = format.format(number);
-  var ok = closeEnough(formatted, expected);
+  var ok = _closeEnough(formatted, expected);
   if (!ok) {
     expect(
         '$formatted ${formatted.codeUnits}', '$expected ${expected.codeUnits}');
   }
   var parsed = format.parse(formatted);
-  var rounded = roundForPrinting(number, format);
+  var rounded = _roundForPrinting(number, format);
   expect((parsed - rounded) / rounded < 0.001, isTrue);
 }
 
@@ -258,7 +287,7 @@
 /// number that will round to print differently depending on the number
 /// of significant digits, we need to check that as well, e.g.
 /// 999999 may print as 1M.
-num roundForPrinting(number, NumberFormat format) {
+num _roundForPrinting(number, NumberFormat format) {
   var originalLength = NumberFormat.numberOfIntegerDigits(number);
   var additionalDigits = originalLength - format.significantDigits!;
   if (additionalDigits > 0) {
@@ -280,7 +309,7 @@
 /// currently producing and the CLDR data. So if the strings differ only in the
 /// presence or absence of a period at the end or of a space between the number
 /// and the suffix, consider it close enough and return true.
-bool closeEnough(String result, String reference) {
+bool _closeEnough(String result, String reference) {
   var expected = reference.replaceAll(' ', _nbspString);
   if (result == expected) {
     return true;
@@ -315,7 +344,7 @@
       expectedDifference <= 1;
 }
 
-void validateFancy(more_testdata.CompactRoundingTestCase t) {
+void _validateFancy(more_testdata.CompactRoundingTestCase t) {
   var shortFormat = NumberFormat.compact(locale: 'en');
   if (t.maximumIntegerDigits != null) {
     shortFormat.maximumIntegerDigits = t.maximumIntegerDigits!;
@@ -345,3 +374,21 @@
     expect(shortFormat.format(t.number), t.expected);
   });
 }
+
+void _validateWithPattern(List<String> testData) {
+  final locale = 'en_US';
+  final currentLocale = Intl.verifiedLocale(locale, NumberFormat.localeExists);
+  final symbols = numberFormatSymbols[currentLocale];
+  final pattern = '${symbols.PLUS_SIGN}${symbols.DECIMAL_PATTERN};'
+      '${symbols.MINUS_SIGN}${symbols.DECIMAL_PATTERN}';
+  final input = num.parse(testData[0]);
+  test('Validate compact with $locale and $pattern', () {
+    final numberFormat = NumberFormat.compact(locale: locale, pattern: pattern);
+    expect(testData[1], numberFormat.format(input));
+  });
+  test('Validate compactLong with $locale and $pattern', () {
+    final numberFormat =
+        NumberFormat.compactLong(locale: locale, pattern: pattern);
+    expect(testData[2], numberFormat.format(input));
+  });
+}
diff --git a/test/number_format_compact_web_test.dart b/test/number_format_compact_web_test.dart
index 8738a14..b211f56 100644
--- a/test/number_format_compact_web_test.dart
+++ b/test/number_format_compact_web_test.dart
@@ -13,15 +13,15 @@
 import 'more_compact_number_test_data.dart' as more_testdata;
 
 void main() {
-  testdata35.compactNumberTestData.forEach(validate);
-  more_testdata.cldr35CompactNumTests.forEach(validateMore);
+  testdata35.compactNumberTestData.forEach(_validate);
+  more_testdata.cldr35CompactNumTests.forEach(_validateMore);
 
   test('RTL currency formatting', () {
     var basic = intl.NumberFormat.currency(locale: 'he');
     expect(basic.format(1234), '\u200F1,234.00 ILS');
     basic = intl.NumberFormat.currency(locale: 'he', symbol: '₪');
     expect(basic.format(1234), '\u200F1,234.00 ₪');
-    expect(ecmaFormatNumber('he', 1234, style: 'currency', currency: 'ILS'),
+    expect(_ecmaFormatNumber('he', 1234, style: 'currency', currency: 'ILS'),
         '\u200F1,234.00 ₪');
 
     var compact = intl.NumberFormat.compactCurrency(locale: 'he');
@@ -32,19 +32,19 @@
     expect(compact.format(1234), '₪ \u200F1.23K');
     // ECMAScript skips the RTL character for notation:'compact':
     expect(
-        ecmaFormatNumber('he', 1234,
+        _ecmaFormatNumber('he', 1234,
             style: 'currency', currency: 'ILS', notation: 'compact'),
         '₪ 1.2K');
     // short/long compactDisplay doesn't change anything here:
     expect(
-        ecmaFormatNumber('he', 1234,
+        _ecmaFormatNumber('he', 1234,
             style: 'currency',
             currency: 'ILS',
             notation: 'compact',
             compactDisplay: 'short'),
         '₪ 1.2K');
     expect(
-        ecmaFormatNumber('he', 1234,
+        _ecmaFormatNumber('he', 1234,
             style: 'currency',
             currency: 'ILS',
             notation: 'compact',
@@ -56,7 +56,7 @@
   });
 }
 
-String ecmaFormatNumber(String locale, num number,
+String _ecmaFormatNumber(String locale, num number,
     {String? style,
     String? currency,
     String? notation,
@@ -71,60 +71,59 @@
   return js.callMethod(number, 'toLocaleString', [locale, options]);
 }
 
-var ecmaProblemLocalesShort = [
+var _unsupportedChromeLocales = {
   // Not supported in Chrome:
   'af', 'az', 'be', 'br', 'bs', 'eu', 'ga', 'gl', 'gsw', 'haw', 'hy', 'is',
   'ka', 'kk', 'km', 'ky', 'ln', 'lo', 'mk', 'mn', 'mt', 'my', 'ne', 'no',
-  'no-NO', 'or', 'pa', 'si', 'sq', 'ur', 'uz', 'ps',
+  'no-NO', 'or', 'pa', 'si', 'sq', 'ur', 'uz', 'ps', 'chr', 'cy', 'tl', 'zu'
+};
+
+var _skipLocalesShort = [
+  'am', 'bn', 'fa', // Some results change in chrome 88
+  ..._unsupportedChromeLocales
 ];
 
-var ecmaProblemLocalesLong = ecmaProblemLocalesShort +
-    [
-      // Short happens to match 'en', but actually not in Chrome:
-      'chr', 'cy', 'tl', 'zu'
-    ];
+var _skipLocalesLong = _unsupportedChromeLocales;
 
-String fixLocale(String locale) {
+String _fixLocale(String locale) {
   return locale.replaceAll('_', '-');
 }
 
-void validate(String locale, List<List<String>> expected) {
-  validateShort(fixLocale(locale), expected);
-  validateLong(fixLocale(locale), expected);
+void _validate(String locale, List<List<String>> expected) {
+  _validateShort(_fixLocale(locale), expected);
+  _validateLong(_fixLocale(locale), expected);
 }
 
-void validateShort(String locale, List<List<String>> expected) {
-  if (ecmaProblemLocalesShort.contains(locale)) {
-    print("Skipping problem locale '$locale' for SHORT compact number tests");
-    return;
-  }
+void _validateShort(String locale, List<List<String>> expected) {
+  var skip = _skipLocalesShort.contains(locale)
+      ? "Skipping problem locale '$locale' for SHORT compact number tests"
+      : false;
 
   test('Validate $locale SHORT', () {
     for (var data in expected) {
       var number = num.parse(data.first);
-      expect(ecmaFormatNumber(locale, number, notation: 'compact'), data[1]);
+      expect(_ecmaFormatNumber(locale, number, notation: 'compact'), data[1]);
     }
-  });
+  }, skip: skip);
 }
 
-void validateLong(String locale, List<List<String>> expected) {
-  if (ecmaProblemLocalesLong.contains(locale)) {
-    print("Skipping problem locale '$locale' for LONG compact number tests");
-    return;
-  }
+void _validateLong(String locale, List<List<String>> expected) {
+  var skip = _skipLocalesLong.contains(locale)
+      ? "Skipping problem locale '$locale' for LONG compact number tests"
+      : false;
 
   test('Validate $locale LONG', () {
     for (var data in expected) {
       var number = num.parse(data.first);
       expect(
-          ecmaFormatNumber(locale, number,
+          _ecmaFormatNumber(locale, number,
               notation: 'compact', compactDisplay: 'long'),
           data[2]);
     }
-  });
+  }, skip: skip);
 }
 
-void validateMore(more_testdata.CompactRoundingTestCase t) {
+void _validateMore(more_testdata.CompactRoundingTestCase t) {
   var options = js.newObject();
   js.setProperty(options, 'notation', 'compact');
   if (t.maximumIntegerDigits != null) {