From e3b1dc224a4a4ea023df80276684ea4fd5393c5c Mon Sep 17 00:00:00 2001 From: ASDAlexander77 Date: Mon, 20 Jul 2026 16:59:11 +0100 Subject: [PATCH] Extend cross-module coverage: boxed untyped-export with multiple methods export_object_literal_untyped.ts only ever exercised a single method (inc()) on a boxed ObjectType import. Adds a genuinely multi-method variant (add/ addTwice/scaled), covering both direct calls on the boxed global and an interface cast of it - a combination only made correct by the decl-text object-vs-tuple printer fix (#263), not previously tested. 736/736 suite. Co-Authored-By: Claude Sonnet 5 --- tslang/test/tester/CMakeLists.txt | 2 ++ ...ort_object_literal_untyped_multi_method.ts | 23 ++++++++++++++++++ ...ort_object_literal_untyped_multi_method.ts | 24 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 tslang/test/tester/tests/export_object_literal_untyped_multi_method.ts create mode 100644 tslang/test/tester/tests/import_object_literal_untyped_multi_method.ts diff --git a/tslang/test/tester/CMakeLists.txt b/tslang/test/tester/CMakeLists.txt index 1b5724478..a7b8fa511 100644 --- a/tslang/test/tester/CMakeLists.txt +++ b/tslang/test/tester/CMakeLists.txt @@ -854,6 +854,7 @@ add_test(NAME test-compile-shared-export-import-class-interface COMMAND test-run add_test(NAME test-compile-shared-export-import-object-literal-with-class-types COMMAND test-runner -shared "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_with_class_types.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_with_class_types.ts") add_test(NAME test-compile-shared-export-import-object-literal-with-interface COMMAND test-runner -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_with_interface.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_with_interface.ts") add_test(NAME test-compile-shared-export-import-object-literal-untyped COMMAND test-runner -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_untyped.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_untyped.ts") +add_test(NAME test-compile-shared-export-import-object-literal-untyped-multi-method COMMAND test-runner -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_untyped_multi_method.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_untyped_multi_method.ts") add_test(NAME test-compile-shared-export-import-object-literal-structural-typed COMMAND test-runner -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_structural_typed.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_structural_typed.ts") add_test(NAME test-compile-shared-export-import-object-literal-structural-typed-params COMMAND test-runner -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_structural_typed_params.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_structural_typed_params.ts") add_test(NAME test-compile-shared-export-import-object-literal-structural-typed-multi-method COMMAND test-runner -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_structural_typed_multi_method.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_structural_typed_multi_method.ts") @@ -873,6 +874,7 @@ add_test(NAME test-jit-shared-export-import-class-interface COMMAND test-runner add_test(NAME test-jit-shared-export-import-object-literal-with-class-types COMMAND test-runner -jit -shared "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_with_class_types.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_with_class_types.ts") add_test(NAME test-jit-shared-export-import-object-literal-with-interface COMMAND test-runner -jit -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_with_interface.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_with_interface.ts") add_test(NAME test-jit-shared-export-import-object-literal-untyped COMMAND test-runner -jit -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_untyped.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_untyped.ts") +add_test(NAME test-jit-shared-export-import-object-literal-untyped-multi-method COMMAND test-runner -jit -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_untyped_multi_method.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_untyped_multi_method.ts") add_test(NAME test-jit-shared-export-import-object-literal-structural-typed COMMAND test-runner -jit -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_structural_typed.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_structural_typed.ts") add_test(NAME test-jit-shared-export-import-object-literal-structural-typed-params COMMAND test-runner -jit -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_structural_typed_params.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_structural_typed_params.ts") add_test(NAME test-jit-shared-export-import-object-literal-structural-typed-multi-method COMMAND test-runner -jit -shared -gctors-as-method "${PROJECT_SOURCE_DIR}/test/tester/tests/import_object_literal_structural_typed_multi_method.ts" "${PROJECT_SOURCE_DIR}/test/tester/tests/export_object_literal_structural_typed_multi_method.ts") diff --git a/tslang/test/tester/tests/export_object_literal_untyped_multi_method.ts b/tslang/test/tester/tests/export_object_literal_untyped_multi_method.ts new file mode 100644 index 000000000..56877f8a3 --- /dev/null +++ b/tslang/test/tester/tests/export_object_literal_untyped_multi_method.ts @@ -0,0 +1,23 @@ +namespace A { + + export interface Accumulator { + total: number; + add(n: number): void; + addTwice(n: number): void; + scaled(factor: number): number; + } + + // untyped export (infers to a boxed ObjectType, like + // export_object_literal_untyped.ts) but extends that test's coverage to + // MULTIPLE methods - export_object_literal_untyped.ts only ever exercised + // a single method (inc()). Regression coverage for the combination of the + // @boxed dynamic-import mechanism (PR #262) and the decl-text + // object-vs-tuple printer fix (PR #263, which is what actually made + // multi-method fields round-trip correctly at all) applied together. + export var acc = { + total: 0.0, + add(n: number) { this.total = this.total + n; }, + addTwice(n: number) { this.add(n); this.add(n); }, + scaled(factor: number) { return this.total * factor; }, + }; +} diff --git a/tslang/test/tester/tests/import_object_literal_untyped_multi_method.ts b/tslang/test/tester/tests/import_object_literal_untyped_multi_method.ts new file mode 100644 index 000000000..6f29179da --- /dev/null +++ b/tslang/test/tester/tests/import_object_literal_untyped_multi_method.ts @@ -0,0 +1,24 @@ +import './export_object_literal_untyped_multi_method' + +// Direct calls on the imported boxed global, no interface cast - exercises +// every method field, not just the first (see export file's comment). +A.acc.add(3); +print(A.acc.total); +assert(A.acc.total == 3); + +A.acc.addTwice(2); +print(A.acc.total); +assert(A.acc.total == 7); + +print(A.acc.scaled(2)); +assert(A.acc.scaled(2) == 14); + +// Also exercise the interface-cast path on the same boxed value. +var acc2: A.Accumulator = A.acc; +print(acc2.total); +assert(acc2.total == 7); +acc2.add(1); +print(acc2.total); +assert(acc2.total == 8); + +print("done.");