// Copyright (c) 2020, 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.

// Tests that JS interop works with hot restart.

@JS()
library hot_restart_js_interop_test;

import 'dart:js' show context;
import 'dart:js_util';
import 'dart:_foreign_helper' as helper show JS;
import 'dart:_runtime' as dart;

import 'package:expect/expect.dart';
import 'package:js/js.dart';

@JS()
external void eval(String code);

@JS('window.MyClass')
class MyClass {
  external MyClass();
}

abstract class Wrapper<T> {
  T? rawObject;

  Wrapper() {
    final T defaultObject = createDefault();
    rawObject = defaultObject;
  }

  T createDefault();
}

class WrappedClass extends Wrapper<MyClass> {
  @override
  MyClass createDefault() => MyClass();
}

void main() {
  // See: https://github.com/flutter/flutter/issues/66361
  eval("self.MyClass = function MyClass() {}");
  var c = WrappedClass();
  dart.hotRestart();
  eval("self.MyClass = function MyClass() {}");
  c = WrappedClass();
}
