#!/bin/sh
# Smoke test for the installed intl library; runs offline.
set -eu

work=$(mktemp -d)
export HOME="$work"
trap 'rm -rf "$work"' EXIT INT TERM

DART=$(command -v dart 2>/dev/null || true)
[ -n "$DART" ] || DART=/usr/lib/dart/bin/dart

mkdir -p "$work/.dart_tool"
cat > "$work/.dart_tool/package_config.json" <<'JSON'
{"configVersion":2,"packages":[
{"name":"intl","rootUri":"file:///usr/share/dart/packages/intl","packageUri":"lib/","languageVersion":"3.4"},
{"name":"clock","rootUri":"file:///usr/share/dart/packages/clock","packageUri":"lib/","languageVersion":"3.4"},
{"name":"meta","rootUri":"file:///usr/share/dart/packages/meta","packageUri":"lib/","languageVersion":"3.4"},
{"name":"path","rootUri":"file:///usr/share/dart/packages/path","packageUri":"lib/","languageVersion":"3.4"}
]}
JSON

cat > "$work/main.dart" <<'DART'
import "package:intl/date_symbol_data_local.dart";
import "package:intl/intl.dart";

Future<void> main() async {
  final date = DateTime(2020, 1, 2, 3, 4, 5);

  final shortDate = DateFormat.yMd("en_US").format(date);
  if (shortDate != "1/2/2020") {
    throw StateError("DateFormat.yMd: $shortDate");
  }

  final decimal = NumberFormat.decimalPattern("en_US").format(1234.5);
  if (decimal != "1,234.5") {
    throw StateError("NumberFormat.decimalPattern: $decimal");
  }

  final percent = NumberFormat.percentPattern("en_US").format(0.25);
  if (percent != "25%") {
    throw StateError("NumberFormat.percentPattern: $percent");
  }

  // A non-English locale exercises the bundled locale data (CLDR yMd for de).
  await initializeDateFormatting("de");
  final german = DateFormat.yMd("de").format(date);
  if (german != "2.1.2020") {
    throw StateError("DateFormat.yMd(de): $german");
  }

  print("intl smoke test passed");
}
DART

cd "$work"
"$DART" run main.dart
