| // Copyright (c) 2015, 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. | 
 |  | 
 | // @dart = 2.7 | 
 |  | 
 | // Test that when a deferred import fails to load, it is possible to retry. | 
 |  | 
 | import "deferred_fail_and_retry_lib.dart" deferred as lib; | 
 | import "package:expect/expect.dart"; | 
 | import "package:async_helper/async_helper.dart"; | 
 | import "dart:js" as js; | 
 |  | 
 | main() { | 
 |   // We patch document.body.appendChild to change the script src on first | 
 |   // invocation. | 
 |   js.context.callMethod("eval", [ | 
 |     """ | 
 |     if (self.document) { | 
 |       oldAppendChild = document.body.appendChild; | 
 |       document.body.appendChild = function(element) { | 
 |         element.src = "non_existing.js"; | 
 |         document.body.appendChild = oldAppendChild; | 
 |         document.body.appendChild(element); | 
 |       } | 
 |     } | 
 |     if (self.load) { | 
 |       oldLoad = load; | 
 |       load = function(uri) { | 
 |         load = oldLoad; | 
 |         load("non_existing.js"); | 
 |       } | 
 |     } | 
 |   """ | 
 |   ]); | 
 |  | 
 |   asyncStart(); | 
 |   lib.loadLibrary().then((_) { | 
 |     Expect.fail("Library should not have loaded"); | 
 |   }, onError: (error) { | 
 |     lib.loadLibrary().then((_) { | 
 |       Expect.equals("loaded", lib.foo()); | 
 |     }, onError: (error) { | 
 |       Expect.fail("Library should have loaded this time"); | 
 |     }).whenComplete(() { | 
 |       asyncEnd(); | 
 |     }); | 
 |   }); | 
 | } |