// Copyright (c) 2016, 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 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';

import 'deferred_custom_loader_lib.dart' deferred as def;

void setup() native """
// In d8 we don't have any way to load the content of the file, so just use
// the preamble's loader.
if (!self.dartDeferredLibraryLoader) {
  self.dartDeferredLibraryLoader = function(uri, success, error) {
    var req = new XMLHttpRequest();
    req.addEventListener("load", function() {
      eval(this.responseText);
      success();
    });
    req.open("GET", uri);
    req.send();
  };
}
""";


runTest() async {
  setup();
  await def.loadLibrary();
  Expect.equals(499, def.foo());
}

main() {
  asyncStart();
  runTest().then((_) => asyncEnd());
}
