|  | // 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.9 | 
|  |  | 
|  | @JS() | 
|  | library js_dart_to_string_test; | 
|  |  | 
|  | import 'dart:html'; | 
|  |  | 
|  | import 'package:js/js.dart'; | 
|  | import 'package:expect/minitest.dart'; | 
|  |  | 
|  | _injectJs() { | 
|  | document.body.append(new ScriptElement() | 
|  | ..type = 'text/javascript' | 
|  | ..innerHtml = r""" | 
|  |  | 
|  | function jsToStringViaCoercion(a) { | 
|  | return a + ''; | 
|  | }; | 
|  | """); | 
|  | } | 
|  |  | 
|  | @JS() | 
|  | external String jsToStringViaCoercion(obj); | 
|  |  | 
|  | class ExampleClassWithCustomToString { | 
|  | var x; | 
|  | ExampleClassWithCustomToString(this.x); | 
|  | String toString() => "#$x#"; | 
|  | } | 
|  |  | 
|  | main() { | 
|  | _injectJs(); | 
|  |  | 
|  | group('toString', () { | 
|  | test('custom dart', () { | 
|  | var x = new ExampleClassWithCustomToString("fooBar"); | 
|  | expect(jsToStringViaCoercion(x), equals("#fooBar#")); | 
|  | expect(jsToStringViaCoercion({'a': 1, 'b': 2}), equals("{a: 1, b: 2}")); | 
|  | }); | 
|  | }); | 
|  | } |