#!/bin/sh
# Compiles a small program against the installed bindings, entirely 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

# Register every installed Dart package so the import resolves.
mkdir -p "$work/.dart_tool"
{
    printf '{"configVersion":2,"packages":['
    first=1
    for dir in /usr/share/dart/packages/*/; do
        name=$(basename "$dir")
        [ "$first" -eq 1 ] || printf ','
        first=0
        printf '{"name":"%s","rootUri":"file:///usr/share/dart/packages/%s","packageUri":"lib/"}' "$name" "$name"
    done
    printf ']}\n'
} > "$work/.dart_tool/package_config.json"

# The bindings only exist for the browser, so compile rather than run.
cat > "$work/main.dart" <<'DART'
import 'package:web/web.dart' as web;

void main() {
  final element = web.document.createElement('div');
  element.textContent = 'ok';
  if (element.tagName != 'DIV') {
    throw StateError('unexpected tag ${element.tagName}');
  }
}
DART

cd "$work"
"$DART" compile js -o out.js main.dart
[ -s out.js ] || { echo "no JavaScript emitted" >&2; exit 1; }
echo "web smoke test passed"
