1#!/usr/bin/env python3
2#
3# Copyright 2022 Google Inc. All rights reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17import platform
18import shutil
19import subprocess
20import sys
21from pathlib import Path
22
23# Get the path where this script is located so we can invoke the script from
24# any directory and have the paths work correctly.
25tests_path = Path(__file__).parent.resolve()
26
27# Get the root path as an absolute path, so all derived paths are absolute.
28root_path = tests_path.parent.parent.absolute()
29
30# Windows works with subprocess.run a bit differently.
31is_windows = platform.system() == "Windows"
32
33# Get the location of the flatc executable
34flatc_exe = Path("flatc.exe" if is_windows else "flatc")
35
36# Find and assert flatc compiler is present.
37if root_path in flatc_exe.parents:
38 flatc_exe = flatc_exe.relative_to(root_path)
39flatc_path = Path(root_path, flatc_exe)
40assert flatc_path.exists(), "Cannot find the flatc compiler " + str(flatc_path)
41
42def check_call(args, cwd=tests_path):
43 subprocess.check_call(args, cwd=str(cwd), shell=is_windows)
44
45# Execute the flatc compiler with the specified parameters
46def flatc(options, schema, prefix=None, include=None, data=None, cwd=tests_path):
47 print("Invoking flatc on schema " + str(schema))
48 cmd = [str(flatc_path)] + options
49 if prefix:
50 cmd += ["-o"] + [prefix]
51 if include:
52 cmd += ["-I"] + [include]
53 cmd += [schema] if isinstance(schema, str) else schema
54 if data:
55 cmd += [data] if isinstance(data, str) else data
56 check_call(cmd)
57
58# Execute esbuild with the specified parameters
59def esbuild(input, output):
60 cmd = ["esbuild", input, "--outfile=" + output]
61 cmd += ["--format=cjs", "--bundle", "--external:flatbuffers"]
62 check_call(cmd)
63
64print("Removing node_modules/ directory...")
65shutil.rmtree(Path(tests_path, "node_modules"), ignore_errors=True)
66
67check_call(["npm", "install", "--silent"])
68
69flatc(
70 options=["--ts", "--reflect-names", "--gen-name-strings", "--gen-mutable", "--gen-object-api", "--ts-entry-points", "--ts-flat-files"],
71 schema="../monster_test.fbs",
72 include="../include_test",
73)
74esbuild("monster_test.ts", "monster_test_generated.cjs")
75
76flatc(
77 options=["--gen-object-api", "-b"],
78 schema="../monster_test.fbs",
79 include="../include_test",
80 data="../unicode_test.json",
81)
82
83flatc(
84 options=["--ts", "--reflect-names", "--gen-name-strings", "--gen-mutable", "--gen-object-api", "--ts-entry-points", "--ts-flat-files"],
85 schema="../union_vector/union_vector.fbs",
86 prefix="union_vector",
87)
88esbuild("union_vector/union_vector.ts", "union_vector/union_vector_generated.cjs")
89
90flatc(
91 options=["--ts", "--reflect-names", "--gen-name-strings"],
92 schema="../optional_scalars.fbs",
93)
94
95flatc(
96 options=["--ts", "--reflect-names", "--gen-name-strings", "--ts-no-import-ext"],
97 schema="../optional_scalars.fbs",
98 prefix="no_import_ext",
99)
100
101flatc(
102 options=["--ts", "--reflect-names", "--gen-name-strings", "--gen-object-api", "--ts-entry-points", "--ts-flat-files"],
103 schema="arrays_test_complex/arrays_test_complex.fbs",
104 prefix="arrays_test_complex"
105)
106esbuild("arrays_test_complex/my-game/example.ts", "arrays_test_complex/arrays_test_complex_generated.cjs")
107
108flatc(
109 options=["--ts", "--reflect-names", "--gen-name-strings", "--gen-mutable", "--gen-object-api", "--ts-entry-points", "--ts-flat-files"],
110 schema=[
111 "typescript_keywords.fbs",
112 "test_dir/typescript_include.fbs",
113 "test_dir/typescript_transitive_include.fbs",
114 "../../reflection/reflection.fbs",
115 ],
116 include="../../",
117)
118esbuild("typescript_keywords.ts", "typescript_keywords_generated.cjs")
119
120flatc(
121 options=["--ts", "--reflect-names", "--gen-name-strings", "--gen-mutable", "--gen-object-api", "--ts-entry-points", "--ts-flat-files"],
122 schema="../union_underlying_type_test.fbs"
123)
124
125print("Running TypeScript Compiler...")
126check_call(["tsc"])
127print("Running TypeScript Compiler in old node resolution mode for no_import_ext...")
128check_call(["tsc", "-p", "./tsconfig.node.json"])
129
130NODE_CMD = ["node"]
131
132print("Running TypeScript Tests...")
133check_call(NODE_CMD + ["JavaScriptTest"])
134check_call(NODE_CMD + ["JavaScriptUnionVectorTest"])
135check_call(NODE_CMD + ["JavaScriptFlexBuffersTest"])
136check_call(NODE_CMD + ["JavaScriptComplexArraysTest"])
137check_call(NODE_CMD + ["JavaScriptUnionUnderlyingTypeTest"])
138
139print("Running old v1 TypeScript Tests...")
140check_call(NODE_CMD + ["JavaScriptTestv1.cjs", "./monster_test_generated.cjs"])
View as plain text