as-test 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "as-test",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Testing framework for AssemblyScript. Compatible with WASI or Bindings ",
5
5
  "types": "assembly/index.ts",
6
6
  "author": "Jairus Tanaka",
@@ -31,7 +31,6 @@
31
31
  "as-variant": "^0.4.1",
32
32
  "chalk": "^5.3.0",
33
33
  "glob": "^11.0.0",
34
- "jest": "^29.7.0",
35
34
  "json-as": "^0.9.14",
36
35
  "typer-diff": "^1.1.1"
37
36
  },
package/run/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@as-test/run",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Testing framework for AssemblyScript. Compatible with WASI or Bindings ",
5
5
  "main": "./lib/index.js",
6
6
  "author": "Jairus Tanaka",
@@ -0,0 +1,14 @@
1
+ import { readFileSync } from "fs";
2
+ import { instantiate } from "../build/mock.spec.js";
3
+
4
+ const binary = readFileSync("./build/mock.spec.wasm");
5
+ const module = new WebAssembly.Module(binary);
6
+
7
+ const exports = instantiate(module, {
8
+ "mock.spec": {},
9
+ mock: {
10
+ foo: () => {
11
+ return "buz";
12
+ },
13
+ },
14
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAEL,IAAI,EAGJ,MAAM,EACN,SAAS,EACV,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAEhD,UAAU,CAAC,MAAc;QAEvB,MAAM,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAGzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;aAC3B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACrC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YACf,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjC,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC;iBAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxC,OAAO,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC,CAAC,CAAC;QACL,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAwB,CAC5C,CAAC,UAAU,CAAC;QAEb,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CACvC,IAAI,EACJ;gBACE,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,EAC3D,IAAI,KAEJ,IAAI,EACJ,IAAI,CAAC,6BAA6B,CAAC,SAAS,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EACnE,MAAM,CAAC,KAAK,CACb;aACF,EACD,MAAM,CAAC,KAAK,CACb,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBACxD,MAAM,SAAS,GAAG,IAAI,SAAS,CAC7B,IAAI,MAAM,IAER,MAAM,CAAC,cAAc,EACrB,kEAAkE,CACnE,CACF,CAAC;gBACF,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC;gBACxC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAE,CAAC,CAAC;gBACrE,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;YAChC,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,gBAAgB,GAAG,EAAE,CAAC;IACjC,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAEL,IAAI,EAGJ,MAAM,EACN,SAAS,GACV,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAEhD,UAAU,CAAC,MAAc;QAEvB,MAAM,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAGzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;aAC3B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACrC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YACf,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjC,OAAO,CAAC,CAAC,CAAC;YACZ,CAAC;iBAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxC,OAAO,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC,CAAC,CAAC;QACL,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAwB,CAC5C,CAAC,UAAU,CAAC;QAEb,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CACvC,IAAI,EACJ;gBACE,IAAI,CAAC,yBAAyB,CAC5B,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,EAC3D,IAAI,KAEJ,IAAI,EACJ,IAAI,CAAC,6BAA6B,CAAC,SAAS,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EACnE,MAAM,CAAC,KAAK,CACb;aACF,EACD,MAAM,CAAC,KAAK,CACb,CAAC;YACF,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBACxD,MAAM,SAAS,GAAG,IAAI,SAAS,CAC7B,IAAI,MAAM,IAER,MAAM,CAAC,cAAc,EACrB,kEAAkE,CACnE,CACF,CAAC;gBACF,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC;gBACxC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAE,CAAC,CAAC;gBACrE,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;YAChC,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,gBAAgB,GAAG,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -1,11 +1,15 @@
1
- import { Node } from "assemblyscript/dist/assemblyscript.js";
1
+ import {
2
+ Node,
3
+ FunctionDeclaration,
4
+ } from "assemblyscript/dist/assemblyscript.js";
2
5
  import { BaseVisitor } from "visitor-as/dist/index.js";
3
6
  import { isStdlib, toString } from "visitor-as/dist/utils.js";
4
7
  export class MockTransform extends BaseVisitor {
5
8
  currentSource;
6
9
  globalStatements = [];
7
- fn = new Map();
8
10
  mocked = new Set();
11
+ importFns = [];
12
+ importMocked = new Set();
9
13
  visitCallExpression(node) {
10
14
  super.visitCallExpression(node);
11
15
  const name = toString(node.expression)
@@ -19,10 +23,13 @@ export class MockTransform extends BaseVisitor {
19
23
  );
20
24
  return;
21
25
  }
26
+ if (name == "mockImport") {
27
+ this.importMocked.add(node.args[0].value);
28
+ }
22
29
  if (name != "mockFn") return;
23
- const ov = node.args[0];
30
+ const ov = toString(node.args[0]);
24
31
  const cb = node.args[1];
25
- const newName = ov.value
32
+ const newName = ov
26
33
  .replaceAll(".", "_")
27
34
  .replaceAll("[", "_")
28
35
  .replaceAll("]", "_");
@@ -49,10 +56,8 @@ export class MockTransform extends BaseVisitor {
49
56
  this.mocked.add(newFn.name.text);
50
57
  }
51
58
  visitFunctionDeclaration(node, isDefault) {
59
+ if (!node.body) this.importFns.push(node);
52
60
  super.visitFunctionDeclaration(node, isDefault);
53
- const name = node.name.text;
54
- if (!name) return;
55
- this.fn.set(name, node);
56
61
  }
57
62
  visitSource(node) {
58
63
  if (node.isLibrary || isStdlib(node)) {
@@ -63,6 +68,70 @@ export class MockTransform extends BaseVisitor {
63
68
  this.mocked = new Set();
64
69
  this.currentSource = node;
65
70
  super.visitSource(node);
71
+ for (const node of this.importFns) {
72
+ let path = "";
73
+ const dec = node.decorators?.find((v) => v.name.text == "external");
74
+ if (dec.args[0] && dec.args[1])
75
+ path = dec.args.map((v) => v.value).join(".");
76
+ else if (dec.args[0])
77
+ path = this.currentSource.simplePath + "." + dec.args[0].value;
78
+ else path = this.currentSource.simplePath + "." + node.name.text;
79
+ if (!this.importMocked.has(path)) return;
80
+ let args = [
81
+ Node.createCallExpression(
82
+ Node.createPropertyAccessExpression(
83
+ Node.createIdentifierExpression("__mock_import", node.range),
84
+ Node.createIdentifierExpression("get", node.range),
85
+ node.range,
86
+ ),
87
+ null,
88
+ [Node.createStringLiteralExpression(path, node.range)],
89
+ node.range,
90
+ ),
91
+ ];
92
+ for (const param of node.signature.parameters) {
93
+ args.push(Node.createIdentifierExpression(param.name.text, node.range));
94
+ }
95
+ const newFn = Node.createFunctionDeclaration(
96
+ node.name,
97
+ node.decorators.filter((v) => v.name.text != "external"),
98
+ node.flags - 32768 - 4,
99
+ null,
100
+ node.signature,
101
+ Node.createBlockStatement(
102
+ [
103
+ Node.createReturnStatement(
104
+ Node.createCallExpression(
105
+ Node.createIdentifierExpression("call_indirect", node.range),
106
+ null,
107
+ args,
108
+ node.range,
109
+ ),
110
+ node.range,
111
+ ),
112
+ ],
113
+ node.range,
114
+ ),
115
+ 0,
116
+ node.range,
117
+ );
118
+ newFn.signature = node.signature;
119
+ const stmts = this.currentSource.statements;
120
+ let index = -1;
121
+ for (let i = 0; i < stmts.length; i++) {
122
+ const stmt = stmts[i];
123
+ if (
124
+ stmt instanceof FunctionDeclaration &&
125
+ stmt.name.text === node.name.text
126
+ ) {
127
+ index = i;
128
+ break;
129
+ }
130
+ }
131
+ if (index === -1) return;
132
+ stmts.splice(index, 1, newFn);
133
+ }
134
+ this.importFns = [];
66
135
  }
67
136
  }
68
137
  //# sourceMappingURL=mock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock.js","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@as-test/transform",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Testing framework for AssemblyScript. Compatible with WASI or Bindings ",
5
5
  "main": "./lib/index.js",
6
6
  "author": "Jairus Tanaka",
@@ -6,16 +6,20 @@ import {
6
6
  FunctionExpression,
7
7
  CommonFlags,
8
8
  Node,
9
+ ArrowKind,
10
+ IdentifierExpression,
11
+ Expression,
12
+ FunctionDeclaration,
9
13
  } from "assemblyscript/dist/assemblyscript.js";
10
- import { FunctionDeclaration } from "types:assemblyscript/src/ast";
11
14
 
12
15
  import { BaseVisitor } from "visitor-as/dist/index.js";
13
16
  import { isStdlib, toString } from "visitor-as/dist/utils.js";
14
17
  export class MockTransform extends BaseVisitor {
15
18
  public currentSource: Source;
16
19
  public globalStatements: Statement[] = [];
17
- public fn = new Map<string, FunctionDeclaration>();
18
20
  public mocked = new Set<string>();
21
+ public importFns: FunctionDeclaration[] = [];
22
+ public importMocked: Set<string> = new Set<string>();
19
23
  visitCallExpression(node: CallExpression): void {
20
24
  super.visitCallExpression(node);
21
25
  const name = toString(node.expression)
@@ -31,11 +35,13 @@ export class MockTransform extends BaseVisitor {
31
35
  return;
32
36
  }
33
37
 
38
+ if (name == "mockImport") {
39
+ this.importMocked.add((node.args[0] as StringLiteralExpression).value);
40
+ }
34
41
  if (name != "mockFn") return;
35
- const ov = node.args[0] as StringLiteralExpression;
42
+ const ov = toString(node.args[0]);
36
43
  const cb = node.args[1] as FunctionExpression;
37
-
38
- const newName = ov.value
44
+ const newName = ov
39
45
  .replaceAll(".", "_")
40
46
  .replaceAll("[", "_")
41
47
  .replaceAll("]", "_");
@@ -67,10 +73,8 @@ export class MockTransform extends BaseVisitor {
67
73
  node: FunctionDeclaration,
68
74
  isDefault?: boolean,
69
75
  ): void {
76
+ if (!node.body) this.importFns.push(node);
70
77
  super.visitFunctionDeclaration(node, isDefault);
71
- const name = node.name.text;
72
- if (!name) return;
73
- this.fn.set(name, node);
74
78
  }
75
79
  visitSource(node: Source): void {
76
80
  if (node.isLibrary || isStdlib(node)) {
@@ -81,5 +85,85 @@ export class MockTransform extends BaseVisitor {
81
85
  this.mocked = new Set<string>();
82
86
  this.currentSource = node;
83
87
  super.visitSource(node);
88
+
89
+ for (const node of this.importFns) {
90
+ let path = "";
91
+ const dec = node.decorators?.find(
92
+ (v) => (v.name as IdentifierExpression).text == "external",
93
+ );
94
+ if (dec.args[0] && dec.args[1])
95
+ path = dec.args
96
+ .map((v) => (v as StringLiteralExpression).value)
97
+ .join(".");
98
+ else if (dec.args[0])
99
+ path =
100
+ this.currentSource.simplePath +
101
+ "." +
102
+ (dec.args[0] as StringLiteralExpression).value;
103
+ else path = this.currentSource.simplePath + "." + node.name.text;
104
+
105
+ if (!this.importMocked.has(path)) return;
106
+
107
+ let args: Expression[] = [
108
+ Node.createCallExpression(
109
+ Node.createPropertyAccessExpression(
110
+ Node.createIdentifierExpression("__mock_import", node.range),
111
+ Node.createIdentifierExpression("get", node.range),
112
+ node.range,
113
+ ),
114
+ null,
115
+ [Node.createStringLiteralExpression(path, node.range)],
116
+ node.range,
117
+ ),
118
+ ];
119
+
120
+ for (const param of node.signature.parameters) {
121
+ args.push(Node.createIdentifierExpression(param.name.text, node.range));
122
+ }
123
+
124
+ const newFn = Node.createFunctionDeclaration(
125
+ node.name,
126
+ node.decorators.filter(
127
+ (v) => (v.name as IdentifierExpression).text != "external",
128
+ ),
129
+ node.flags - CommonFlags.Ambient - CommonFlags.Declare,
130
+ null,
131
+ node.signature,
132
+ Node.createBlockStatement(
133
+ [
134
+ Node.createReturnStatement(
135
+ Node.createCallExpression(
136
+ Node.createIdentifierExpression("call_indirect", node.range),
137
+ null,
138
+ args,
139
+ node.range,
140
+ ),
141
+ node.range,
142
+ ),
143
+ ],
144
+ node.range,
145
+ ),
146
+ ArrowKind.None,
147
+ node.range,
148
+ );
149
+
150
+ newFn.signature = node.signature;
151
+
152
+ const stmts = this.currentSource.statements;
153
+ let index = -1;
154
+ for (let i = 0; i < stmts.length; i++) {
155
+ const stmt = stmts[i];
156
+ if (
157
+ stmt instanceof FunctionDeclaration &&
158
+ stmt.name.text === node.name.text
159
+ ) {
160
+ index = i;
161
+ break;
162
+ }
163
+ }
164
+ if (index === -1) return;
165
+ stmts.splice(index, 1, newFn);
166
+ }
167
+ this.importFns = [];
84
168
  }
85
169
  }
Binary file
package/jest.test.js DELETED
@@ -1,44 +0,0 @@
1
- describe("Math operations", () => {
2
- // Setup before each test in this group (optional)
3
- beforeEach(() => {
4
- log("Initializing test...");
5
- });
6
-
7
- // Teardown after each test in this group (optional)
8
- afterEach(() => {
9
- log("Cleaning up after test...");
10
- });
11
-
12
- test("Addition", () => {
13
- expect(1 + 2).toBe(3);
14
- });
15
-
16
- test("Comparison", () => {
17
- expect(5).toBeGreaterThan(3);
18
- expect(2).toBeLessThan(4);
19
- });
20
-
21
- test("Type checking", () => {
22
- expect("hello").toBeString();
23
- expect(true).toBeBoolean();
24
- expect(10.5).toBeNumber();
25
- });
26
- });
27
-
28
- let myArray = [];
29
-
30
- describe("Array manipulation", () => {
31
- beforeAll(() => {
32
- myArray = [1, 2, 3];
33
- });
34
-
35
- test("Array length", () => {
36
- expect(myArray).toHaveLength(3);
37
- });
38
-
39
- test("Array inclusion", () => {
40
- expect(myArray).toContain(2);
41
- });
42
- });
43
-
44
- function foo() {}