Files
sdk/pkg/dwds/test/integration/javascript_builder_test.dart
Jessy Yameogo e1d687cb9e [dwds][dwds_test_common] Base copy of DWDS and DWDS_TEST_COMMON from webdev@e43744b235531f409ab5e2f1271178943569697a
This CL migrates the `dwds` and `dwds_test_common` packages into the Dart SDK
repository.

Key Changes:
- Migration: Moved source code and tests into `pkg/dwds` & `pkg/dwds_test_common`.
- Linting and path resolution were updated in https://github.com/dart-lang/webdev/pull/2797, https://github.com/dart-lang/webdev/pull/2798 & https://github.com/dart-lang/webdev/pull/2799 to support both environments (webdev and sdk).


Testing:
- All tests passing locally.
- CI try bots are green.

Design Doc: http://goto.google.com/migrating-webdev and http://goto.google.com/migrating-dwds

Fixes https://github.com/dart-lang/sdk/issues/62100
Fixes https://github.com/dart-lang/sdk/issues/62101
Fixes https://github.com/dart-lang/sdk/issues/62102
Fixes https://github.com/dart-lang/sdk/issues/62103

Cq-Include-Trybots: luci.dart.try:pkg-win-release-try,pkg-win-release-arm64-try,pkg-mac-release-try,pkg-mac-release-arm64-try,pkg-linux-release-try,pkg-linux-release-arm64-try,pkg-linux-debug-try
Change-Id: Icc2bf9a86efb79d04a67053962a4548fe6e894f7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/494640
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Nate Biggs <natebiggs@google.com>
Reviewed-by: Ivan Inozemtsev <iinozemtsev@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Mark Zhou <markzipan@google.com>
2026-04-23 13:18:18 -07:00

192 lines
5.3 KiB
Dart

// 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'
'}',
);
});
});
}