// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:io';
import 'dart:typed_data';

import 'package:path/path.dart' as path;
import 'package:wasm_builder/wasm_builder.dart';

import 'self_compile_test.dart' show expectEqualBytes;
import 'util.dart';

Future main() async {
  if (!Platform.isLinux && !Platform.isMacOS) return;

  await withTempDir((String tempDir) async {
    final dartFilename = 'third_party/flute/benchmarks/lib/complex.dart';

    final wasmFilename = path.join(tempDir, 'flute.wasm');
    final wasmFile = File(wasmFilename);

    await run([
      Platform.executable,
      'compile',
      'wasm',
      '-O0',
      dartFilename,
      '-o',
      wasmFilename,
    ]);
    final wasmBytes = wasmFile.readAsBytesSync();
    expectEqualBytes(wasmBytes, readWrite(wasmBytes));
    // Temporary files will be deleted when returning to [withTempDir].
  });
}

Uint8List readWrite(Uint8List wasmBytes) {
  final deserializer = Deserializer(wasmBytes);
  final module = Module.deserialize(deserializer);

  final serializer = Serializer();
  module.serialize(serializer);
  return serializer.data;
}
