| // Copyright (c) 2023, 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. | |
| @TestOn('vm') | |
| @Timeout(Duration(minutes: 2)) | |
| library; | |
| import 'package:dwds/src/services/javascript_builder.dart'; | |
| import 'package:test/test.dart'; | |
| void main() async { | |
| group('JavaScriptBuilder |', () { | |
| test('write', () async { | |
| expect((JsBuilder()..write('Hello')).build(), 'Hello'); | |
| }); | |
| test('writeLine', () async { | |
| expect((JsBuilder()..writeLine('Hello')).build(), 'Hello\n'); | |
| }); | |
| test('writeAll with separator', () async { | |
| expect( | |
| (JsBuilder()..writeAll(['Hello', 'World'], ' ')).build(), | |
| 'Hello World', | |
| ); | |
| }); | |
| test('writeAll with default separator', () async { | |
| expect((JsBuilder()..writeAll(['Hello', 'World'])).build(), 'HelloWorld'); | |
| }); | |
| test('writeWithIndent', () async { | |
| expect((JsBuilder()..writeWithIndent('Hello')).build(), 'Hello'); | |
| }); | |
| test('writeWithIndent', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.increaseIndent(); | |
| jsBuilder.writeWithIndent('Hello'); | |
| jsBuilder.decreaseIndent(); | |
| jsBuilder.writeWithIndent('World'); | |
| expect(jsBuilder.build(), ' HelloWorld'); | |
| }); | |
| test('writeLineWithIndent', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.increaseIndent(); | |
| jsBuilder.writeLineWithIndent('Hello'); | |
| jsBuilder.decreaseIndent(); | |
| jsBuilder.writeLineWithIndent('World'); | |
| expect(jsBuilder.build(), ' Hello\nWorld\n'); | |
| }); | |
| test('writeAllLinesWithIndent', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.increaseIndent(); | |
| jsBuilder.writeMultiLineExpression(['Hello', 'World']); | |
| jsBuilder.decreaseIndent(); | |
| jsBuilder.writeMultiLineExpression(['Hello', 'World']); | |
| expect(jsBuilder.build(), 'Hello\n WorldHello\nWorld'); | |
| }); | |
| test('writeCallExpression', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.writeCallExpression(['a1', 'a2'], () => jsBuilder.write('foo')); | |
| expect(jsBuilder.build(), 'foo(a1, a2)'); | |
| }); | |
| test('writeTryCatchExpression', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.writeTryCatchExpression(() => jsBuilder.write('x')); | |
| expect( | |
| jsBuilder.build(), | |
| 'try {\n' | |
| ' x\n' | |
| '} catch (error) {\n' | |
| ' error.name + ": " + error.message;\n' | |
| '}', | |
| ); | |
| }); | |
| test('writeTryCatchStatement', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.writeTryCatchStatement( | |
| () => jsBuilder.writeReturnStatement(() => jsBuilder.write('x')), | |
| ); | |
| expect( | |
| jsBuilder.build(), | |
| 'try {\n' | |
| ' return x;\n' | |
| '} catch (error) {\n' | |
| ' return error.name + ": " + error.message;\n' | |
| '}', | |
| ); | |
| }); | |
| test('writeReturnStatement', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.writeReturnStatement(() => jsBuilder.write('x')); | |
| expect(jsBuilder.build(), 'return x;'); | |
| }); | |
| test('writeFunctionDefinition', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.writeFunctionDefinition( | |
| ['a1', 'a2'], | |
| () => jsBuilder.writeReturnStatement(() => jsBuilder.write('a1 + a2')), | |
| ); | |
| expect( | |
| jsBuilder.build(), | |
| 'function (a1, a2) {\n' | |
| ' return a1 + a2;\n' | |
| '}', | |
| ); | |
| }); | |
| test('writeBindExpression', () async { | |
| final jsBuilder = JsBuilder(); | |
| jsBuilder.writeBindExpression( | |
| 'x', | |
| () => jsBuilder.writeFunctionDefinition( | |
| [], | |
| () => jsBuilder.writeReturnStatement(() => jsBuilder.write('this.a')), | |
| ), | |
| ); | |
| expect( | |
| jsBuilder.build(), | |
| 'function () {\n' | |
| ' return this.a;\n' | |
| '}.bind(x)', | |
| ); | |
| }); | |
| test('createEvalExpression', () async { | |
| final expression = JsBuilder.createEvalExpression([ | |
| 'var e = 1;', | |
| 'return e', | |
| ]); | |
| expect( | |
| expression, | |
| 'try {\n' | |
| ' var e = 1;\n' | |
| ' return e;\n' | |
| '} catch (error) {\n' | |
| ' error.name + ": " + error.message;\n' | |
| '}', | |
| ); | |
| }); | |
| test('createEvalStaticFunction', () async { | |
| final function = JsBuilder.createEvalStaticFunction( | |
| ['function(e, e2) {', ' return e;', '}'], | |
| ['e', 'e2'], | |
| ); | |
| expect( | |
| function, | |
| 'function (e, e2) {\n' | |
| ' try {\n' | |
| ' return function(e, e2) {\n' | |
| ' return e;\n' | |
| ' }(e, e2);\n' | |
| ' } catch (error) {\n' | |
| ' return error.name + ": " + error.message;\n' | |
| ' }\n' | |
| '}', | |
| ); | |
| }); | |
| test('createEvalBoundFunction', () async { | |
| final function = JsBuilder.createEvalBoundFunction( | |
| ['function(e, e2) {', ' return e;', '}'], | |
| ['e', 'e2'], | |
| ); | |
| expect( | |
| function, | |
| 'function (e, e2, __t\$this) {\n' | |
| ' try {\n' | |
| ' return function (e, e2) {\n' | |
| ' return function(e, e2) {\n' | |
| ' return e;\n' | |
| ' }(e, e2);\n' | |
| ' }.bind(__t\$this)(e, e2);\n' | |
| ' } catch (error) {\n' | |
| ' return error.name + ": " + error.message;\n' | |
| ' }\n' | |
| '}', | |
| ); | |
| }); | |
| }); | |
| } |