Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
91d3344
baseline e2e proj
ArcadeMode Jan 18, 2026
ddbf214
basic e2e project works
ArcadeMode Jan 18, 2026
47eedc7
factor + test if normal long works as expected
ArcadeMode Jan 18, 2026
eb28297
base e2e working
ArcadeMode Jan 20, 2026
4e8323c
fix imports
ArcadeMode Jan 20, 2026
5dd0077
add e2e to CI
ArcadeMode Jan 20, 2026
9e01428
condense
ArcadeMode Jan 20, 2026
82653ae
remove unused
ArcadeMode Jan 20, 2026
250fdd0
change npm run command name
ArcadeMode Jan 20, 2026
4e35c8b
try fix root assembly
ArcadeMode Jan 20, 2026
6221c65
ensure path correctness on linux
ArcadeMode Jan 20, 2026
7cc694d
wip multi runtime e2e
ArcadeMode Jan 20, 2026
a9b222e
implement configurable runtime node/browser + apply in CI
ArcadeMode Jan 20, 2026
1fe093c
fix npm run commands
ArcadeMode Jan 20, 2026
66d753f
reorganize ci as setup + 3x test with no cancel on error
ArcadeMode Jan 20, 2026
fe84b0f
no switch between reporters based on CI/local
ArcadeMode Jan 20, 2026
c16e0b7
skip tests waiting for runtime fix in CI
ArcadeMode Jan 20, 2026
b4acdda
add types
ArcadeMode Jan 21, 2026
f1ddbc5
use test over it.
ArcadeMode Jan 21, 2026
6340581
warning patch script to replace webpack annotations with vite
ArcadeMode Jan 21, 2026
81d59fd
remove obsolete e2e stuff from sample
ArcadeMode Jan 21, 2026
f9ea7c4
more e2e tests, demonstrate issues in task datetime
ArcadeMode Jan 21, 2026
9dca295
runmain to not end runtime on interop assertion failure
ArcadeMode Jan 23, 2026
e301229
patch up date tests, first basic set/get tests for other task types
ArcadeMode Jan 23, 2026
2cbe027
first error path tests, noted runtime issue, skip tests while fix pen…
ArcadeMode Jan 23, 2026
c5b9d95
enable headless in non-ci when running browser tests
ArcadeMode Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,14 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
global-json-file: global.json
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: npm
cache-dependency-path: TypeShim.E2E/vitest/package-lock.json

- name: Restore
run: >
dotnet nuget disable source LocalDev &&
Expand All @@ -26,16 +33,33 @@ jobs:
dotnet build TypeShim.slnx
--configuration Release
--no-restore
- name: Test

- name: Initialize E2E
working-directory: TypeShim.E2E/vitest
run: npm run initialize

- name: Run Unit Tests
run: >
dotnet test TypeShim.slnx
--configuration Release
--no-build
--verbosity normal
--logger "trx;LogFileName=test-results.trx"

- name: Run E2E (Node)
if: (!cancelled())
working-directory: TypeShim.E2E/vitest
run: npm run test:node

- name: Run E2E (Browser)
if: (!cancelled())
working-directory: TypeShim.E2E/vitest
run: npm run test:browser

- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: (!cancelled())
with:
files: |
**/*.trx
**/e2e-report-*.xml
89 changes: 1 addition & 88 deletions Sample/TypeShim.Sample.Client/@typeshim/app/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ import { useMemo, useState } from 'react';
import Home from './pages/Home';
import People from './pages/People';
import CapabilitiesPage from './pages/Capabilities';

import { createWasmRuntime, MyApp, TypeShimInitializer } from '@typeshim/wasm-exports';
import { CompilationTest, ExportedClass } from "@typeshim/wasm-exports";

type Page = 'home' | 'people' | 'capabilities';

Expand All @@ -15,8 +13,6 @@ function App() {
const runtimeInfo = await createWasmRuntime();
TypeShimInitializer.initialize(runtimeInfo);
MyApp.Initialize(document.baseURI);

E2E();
}, []);

return (
Expand Down Expand Up @@ -62,87 +58,4 @@ function App() {
);
}

export default App;

function E2E() {
console.log("Starting E2E CompilationTest...");
const exportedClass = new ExportedClass({ Id: 1 });
const testObject = new CompilationTest({
NIntProperty: 1,
ByteProperty: 2,
ShortProperty: 3,
IntProperty: 4,
LongProperty: 5,
BoolProperty: true,
StringProperty: "Test",
CharProperty: 'A',
DoubleProperty: 6.7,
FloatProperty: 8.9,
DateTimeProperty: new Date(),
DateTimeOffsetProperty: new Date(),
ExportedClassProperty: exportedClass,
ObjectProperty: exportedClass.instance,
JSObjectProperty: { foo: "bar" },
TaskProperty: Promise.resolve(),
TaskOfByteProperty: Promise.resolve(22),
TaskOfNIntProperty: Promise.resolve(42),
TaskOfShortProperty: Promise.resolve(43),
TaskOfIntProperty: Promise.resolve(44),
TaskOfLongProperty: Promise.resolve(45),
TaskOfBoolProperty: Promise.resolve(true),
TaskOfCharProperty: Promise.resolve('B'),
TaskOfStringProperty: Promise.resolve("Task String"),
TaskOfDoubleProperty: Promise.resolve(67.8),
TaskOfFloatProperty: Promise.resolve(89.0),
TaskOfDateTimeProperty: Promise.resolve(new Date()),
TaskOfDateTimeOffsetProperty: Promise.resolve(new Date()),
TaskOfObjectProperty: Promise.resolve(exportedClass.instance),
TaskOfExportedClassProperty: Promise.resolve(exportedClass),
TaskOfJSObjectProperty: Promise.resolve({ baz: "qux" }),
ByteArrayProperty: [1, 2, 3],
IntArrayProperty: [7, 8, 9],
StringArrayProperty: ["one", "two", "three"],
DoubleArrayProperty: [1.1, 2.2, 3.3],
JSObjectArrayProperty: [{ a: 1 }, { b: 2 }, { c: 3 }],
ObjectArrayProperty: [exportedClass.instance],
ExportedClassArrayProperty: [exportedClass],
});

console.log("E2E CompilationTest instance:", testObject, CompilationTest.materialize(testObject));

testObject.CharProperty = 'Z';
if (testObject.CharProperty !== 'Z') {
console.error(`E2E CharProperty value mismatch. Expected 'Z', got '${testObject.CharProperty}'`);
}
testObject.TaskOfCharProperty = Promise.resolve('Y');
testObject.TaskOfCharProperty.then(value => {
if (value === 'Y') return;
console.error(`E2E TaskOfCharProperty value mismatch. Expected 'Y', got '${value}'`);
}).catch(err => {
console.error("E2E TaskOfCharProperty error:", err);
});

testObject.StringProperty = "Updated Test";
if (testObject.StringProperty !== "Updated Test") {
console.error(`E2E StringProperty value mismatch. Expected 'Updated Test', got '${testObject.StringProperty}'`);
}
testObject.TaskOfStringProperty = Promise.resolve("Updated Task String");
testObject.TaskOfStringProperty.then(value => {
if (value === "Updated Task String") return;
console.error(`E2E TaskOfStringProperty value mismatch. Expected 'Updated Task String', got '${value}'`);
}).catch(err => {
console.error("E2E TaskOfStringProperty error:", err);
});

testObject.ExportedClassProperty.Id = 99;
if (testObject.ExportedClassProperty.Id !== 99) {
console.error(`E2E ExportedClassProperty.Id value mismatch. Expected 99, got '${testObject.ExportedClassProperty.Id}'`);
}
const newExport = new ExportedClass({ Id: 100 });
testObject.ExportedClassProperty = newExport;
if (testObject.ExportedClassProperty.Id !== 100) {
console.error(`E2E ExportedClassProperty reassignment value mismatch. Expected 100, got '${testObject.ExportedClassProperty.Id}'`);
}

console.log("E2E CompilationTest completed.");
}
export default App;
Loading
Loading