e1d687cb9e
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>
192 lines
5.3 KiB
Dart
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'
|
|
'}',
|
|
);
|
|
});
|
|
});
|
|
}
|