xref: /aosp_15_r20/external/flatbuffers/tests/flatc/flatc_ts_tests.py (revision 890232f25432b36107d06881e0a25aaa6b473652)
1*890232f2SAndroid Build Coastguard Worker# Copyright 2022 Google Inc. All rights reserved.
2*890232f2SAndroid Build Coastguard Worker#
3*890232f2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*890232f2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*890232f2SAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*890232f2SAndroid Build Coastguard Worker#
7*890232f2SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*890232f2SAndroid Build Coastguard Worker#
9*890232f2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*890232f2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*890232f2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*890232f2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*890232f2SAndroid Build Coastguard Worker# limitations under the License.
14*890232f2SAndroid Build Coastguard Worker
15*890232f2SAndroid Build Coastguard Workerfrom flatc_test import *
16*890232f2SAndroid Build Coastguard Worker
17*890232f2SAndroid Build Coastguard Worker
18*890232f2SAndroid Build Coastguard Workerclass TsTests():
19*890232f2SAndroid Build Coastguard Worker
20*890232f2SAndroid Build Coastguard Worker    def Base(self):
21*890232f2SAndroid Build Coastguard Worker        # Generate just foo with no extra arguments
22*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "foo.fbs"])
23*890232f2SAndroid Build Coastguard Worker
24*890232f2SAndroid Build Coastguard Worker        # Should generate the module that exports both foo and its direct
25*890232f2SAndroid Build Coastguard Worker        # include, bar.
26*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
27*890232f2SAndroid Build Coastguard Worker            "foo_generated.ts",
28*890232f2SAndroid Build Coastguard Worker            [
29*890232f2SAndroid Build Coastguard Worker                "export { Bar } from './bar';",
30*890232f2SAndroid Build Coastguard Worker                "export { Foo } from './foo';",
31*890232f2SAndroid Build Coastguard Worker            ],
32*890232f2SAndroid Build Coastguard Worker        )
33*890232f2SAndroid Build Coastguard Worker
34*890232f2SAndroid Build Coastguard Worker        # Foo should be generated in place and exports the Foo table.
35*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents("foo.ts", "export class Foo {")
36*890232f2SAndroid Build Coastguard Worker
37*890232f2SAndroid Build Coastguard Worker        # Included files, like bar, should not be generated.
38*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("bar.ts")
39*890232f2SAndroid Build Coastguard Worker
40*890232f2SAndroid Build Coastguard Worker    def BaseMultipleFiles(self):
41*890232f2SAndroid Build Coastguard Worker        # Generate both foo and bar with no extra arguments
42*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "foo.fbs", "bar/bar.fbs"])
43*890232f2SAndroid Build Coastguard Worker
44*890232f2SAndroid Build Coastguard Worker        # Should generate the module that exports both foo and its direct
45*890232f2SAndroid Build Coastguard Worker        # include, bar.
46*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
47*890232f2SAndroid Build Coastguard Worker            "foo_generated.ts",
48*890232f2SAndroid Build Coastguard Worker            [
49*890232f2SAndroid Build Coastguard Worker                "export { Bar } from './bar';",
50*890232f2SAndroid Build Coastguard Worker                "export { Foo } from './foo';",
51*890232f2SAndroid Build Coastguard Worker            ],
52*890232f2SAndroid Build Coastguard Worker        )
53*890232f2SAndroid Build Coastguard Worker
54*890232f2SAndroid Build Coastguard Worker        # Foo should be generated in place and exports the Foo table.
55*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents("foo.ts", "export class Foo {")
56*890232f2SAndroid Build Coastguard Worker
57*890232f2SAndroid Build Coastguard Worker        # Bar should also be generatd in place and exports the Bar table.
58*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents("bar.ts", "export class Bar {")
59*890232f2SAndroid Build Coastguard Worker
60*890232f2SAndroid Build Coastguard Worker    def BaseWithNamespace(self):
61*890232f2SAndroid Build Coastguard Worker        # Generate foo with namespacing, with no extra arguments
62*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "foo_with_ns.fbs"])
63*890232f2SAndroid Build Coastguard Worker
64*890232f2SAndroid Build Coastguard Worker        # Should generate the module that exports both foo in its namespace
65*890232f2SAndroid Build Coastguard Worker        # directory and its direct include, bar.
66*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
67*890232f2SAndroid Build Coastguard Worker            "foo_with_ns_generated.ts",
68*890232f2SAndroid Build Coastguard Worker            [
69*890232f2SAndroid Build Coastguard Worker                "export { Bar } from './bar/bar';",
70*890232f2SAndroid Build Coastguard Worker                "export { Foo } from './something/foo';",
71*890232f2SAndroid Build Coastguard Worker            ],
72*890232f2SAndroid Build Coastguard Worker        )
73*890232f2SAndroid Build Coastguard Worker
74*890232f2SAndroid Build Coastguard Worker        # Foo should be placed in the namespaced directory. It should export
75*890232f2SAndroid Build Coastguard Worker        # Foo, and the import of Bar should be relative to its location.
76*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
77*890232f2SAndroid Build Coastguard Worker            "something/foo.ts",
78*890232f2SAndroid Build Coastguard Worker            [
79*890232f2SAndroid Build Coastguard Worker                "export class Foo {",
80*890232f2SAndroid Build Coastguard Worker                "import { Bar } from '../bar/bar';",
81*890232f2SAndroid Build Coastguard Worker            ],
82*890232f2SAndroid Build Coastguard Worker        )
83*890232f2SAndroid Build Coastguard Worker
84*890232f2SAndroid Build Coastguard Worker        # Included files, like bar, should not be generated.
85*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("bar.ts")
86*890232f2SAndroid Build Coastguard Worker
87*890232f2SAndroid Build Coastguard Worker    def GenAll(self):
88*890232f2SAndroid Build Coastguard Worker        # Generate foo with generate all options
89*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "--gen-all", "foo.fbs"])
90*890232f2SAndroid Build Coastguard Worker
91*890232f2SAndroid Build Coastguard Worker        # Should generate a single file that exports all the generated types.
92*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
93*890232f2SAndroid Build Coastguard Worker            "foo_generated.ts",
94*890232f2SAndroid Build Coastguard Worker            [
95*890232f2SAndroid Build Coastguard Worker                "export { Bar } from './bar'",
96*890232f2SAndroid Build Coastguard Worker                "export { Baz } from './baz'",
97*890232f2SAndroid Build Coastguard Worker                "export { Foo } from './foo'",
98*890232f2SAndroid Build Coastguard Worker            ],
99*890232f2SAndroid Build Coastguard Worker        )
100*890232f2SAndroid Build Coastguard Worker
101*890232f2SAndroid Build Coastguard Worker        # Foo should be generated with an import to Bar and an export of itself.
102*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
103*890232f2SAndroid Build Coastguard Worker            "foo.ts",
104*890232f2SAndroid Build Coastguard Worker            [
105*890232f2SAndroid Build Coastguard Worker                "import { Bar } from './bar';",
106*890232f2SAndroid Build Coastguard Worker                "export class Foo {",
107*890232f2SAndroid Build Coastguard Worker            ],
108*890232f2SAndroid Build Coastguard Worker        )
109*890232f2SAndroid Build Coastguard Worker
110*890232f2SAndroid Build Coastguard Worker        # Bar should be generated with an import to Baz and an export of itself.
111*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
112*890232f2SAndroid Build Coastguard Worker            "bar.ts",
113*890232f2SAndroid Build Coastguard Worker            [
114*890232f2SAndroid Build Coastguard Worker                "import { Baz } from './baz';",
115*890232f2SAndroid Build Coastguard Worker                "export class Bar {",
116*890232f2SAndroid Build Coastguard Worker            ],
117*890232f2SAndroid Build Coastguard Worker        )
118*890232f2SAndroid Build Coastguard Worker
119*890232f2SAndroid Build Coastguard Worker        # Baz should be generated with an export of itself.
120*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
121*890232f2SAndroid Build Coastguard Worker            "baz.ts",
122*890232f2SAndroid Build Coastguard Worker            [
123*890232f2SAndroid Build Coastguard Worker                "export enum Baz {",
124*890232f2SAndroid Build Coastguard Worker            ],
125*890232f2SAndroid Build Coastguard Worker        )
126*890232f2SAndroid Build Coastguard Worker
127*890232f2SAndroid Build Coastguard Worker
128*890232f2SAndroid Build Coastguard Worker    def FlatFiles(self):
129*890232f2SAndroid Build Coastguard Worker        # Generate just foo with the flat files option
130*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "--ts-flat-files", "foo.fbs"])
131*890232f2SAndroid Build Coastguard Worker
132*890232f2SAndroid Build Coastguard Worker        # Should generate a single file that imports bar as a single file, and
133*890232f2SAndroid Build Coastguard Worker        # exports the Foo table.
134*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
135*890232f2SAndroid Build Coastguard Worker            "foo_generated.ts",
136*890232f2SAndroid Build Coastguard Worker            [
137*890232f2SAndroid Build Coastguard Worker                "import {Bar as Bar} from './bar_generated';",
138*890232f2SAndroid Build Coastguard Worker                "export class Foo {",
139*890232f2SAndroid Build Coastguard Worker            ],
140*890232f2SAndroid Build Coastguard Worker        )
141*890232f2SAndroid Build Coastguard Worker
142*890232f2SAndroid Build Coastguard Worker        # The root type Foo should not be generated in its own file.
143*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("foo.ts")
144*890232f2SAndroid Build Coastguard Worker
145*890232f2SAndroid Build Coastguard Worker    def FlatFilesWithNamespace(self):
146*890232f2SAndroid Build Coastguard Worker        # Generate just foo with the flat files option
147*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "--ts-flat-files", "foo_with_ns.fbs"])
148*890232f2SAndroid Build Coastguard Worker
149*890232f2SAndroid Build Coastguard Worker        # Should generate a single file that imports bar as a single file, and
150*890232f2SAndroid Build Coastguard Worker        # exports the Foo table.
151*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
152*890232f2SAndroid Build Coastguard Worker            "foo_with_ns_generated.ts",
153*890232f2SAndroid Build Coastguard Worker            [
154*890232f2SAndroid Build Coastguard Worker                "import {Bar as Bar} from './bar_with_ns_generated';",
155*890232f2SAndroid Build Coastguard Worker                "export class Foo {",
156*890232f2SAndroid Build Coastguard Worker            ],
157*890232f2SAndroid Build Coastguard Worker        )
158*890232f2SAndroid Build Coastguard Worker
159*890232f2SAndroid Build Coastguard Worker        # The root type Foo should not be generated in its own file.
160*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("foo.ts")
161*890232f2SAndroid Build Coastguard Worker
162*890232f2SAndroid Build Coastguard Worker    def FlatFilesMultipleFiles(self):
163*890232f2SAndroid Build Coastguard Worker        # Generate both foo and bar with the flat files option
164*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "--ts-flat-files", "foo.fbs", "bar/bar.fbs"])
165*890232f2SAndroid Build Coastguard Worker
166*890232f2SAndroid Build Coastguard Worker        # Should generate a single foo file that imports bar as a single file,
167*890232f2SAndroid Build Coastguard Worker        # and exports the Foo table.
168*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
169*890232f2SAndroid Build Coastguard Worker            "foo_generated.ts",
170*890232f2SAndroid Build Coastguard Worker            [
171*890232f2SAndroid Build Coastguard Worker                "import {Bar as Bar} from './bar_generated';",
172*890232f2SAndroid Build Coastguard Worker                "export class Foo {",
173*890232f2SAndroid Build Coastguard Worker            ],
174*890232f2SAndroid Build Coastguard Worker        )
175*890232f2SAndroid Build Coastguard Worker
176*890232f2SAndroid Build Coastguard Worker        # Should generate a single bar file that imports bar as a single file,
177*890232f2SAndroid Build Coastguard Worker        # and exports the Bar table.
178*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
179*890232f2SAndroid Build Coastguard Worker            "bar_generated.ts",
180*890232f2SAndroid Build Coastguard Worker            [
181*890232f2SAndroid Build Coastguard Worker                "import {Baz as Baz} from './baz_generated';",
182*890232f2SAndroid Build Coastguard Worker                "export class Bar {",
183*890232f2SAndroid Build Coastguard Worker            ],
184*890232f2SAndroid Build Coastguard Worker        )
185*890232f2SAndroid Build Coastguard Worker
186*890232f2SAndroid Build Coastguard Worker        # The types Foo and Bar should not be generated in their own files
187*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("foo.ts")
188*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("bar.ts")
189*890232f2SAndroid Build Coastguard Worker
190*890232f2SAndroid Build Coastguard Worker    def FlatFilesGenAll(self):
191*890232f2SAndroid Build Coastguard Worker        # Generate foo with all of its dependents with the flat files option
192*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "--ts-flat-files", "--gen-all", "foo.fbs"])
193*890232f2SAndroid Build Coastguard Worker
194*890232f2SAndroid Build Coastguard Worker        # Should generate a single foo file
195*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
196*890232f2SAndroid Build Coastguard Worker            "foo_generated.ts",
197*890232f2SAndroid Build Coastguard Worker            # Should export each of the types within the single file
198*890232f2SAndroid Build Coastguard Worker            [
199*890232f2SAndroid Build Coastguard Worker                "export class Foo {",
200*890232f2SAndroid Build Coastguard Worker                "export class Bar {",
201*890232f2SAndroid Build Coastguard Worker                "export enum Baz {",
202*890232f2SAndroid Build Coastguard Worker            ],
203*890232f2SAndroid Build Coastguard Worker            # No includes for the dependent types should be present.
204*890232f2SAndroid Build Coastguard Worker            doesnt_contain=[
205*890232f2SAndroid Build Coastguard Worker                "import {Bar as Bar}",
206*890232f2SAndroid Build Coastguard Worker                "import {Baz as Baz}",
207*890232f2SAndroid Build Coastguard Worker            ],
208*890232f2SAndroid Build Coastguard Worker        )
209*890232f2SAndroid Build Coastguard Worker
210*890232f2SAndroid Build Coastguard Worker        # The types Foo, Bar and Baz should not be generated in their own files.
211*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("foo.ts")
212*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("bar.ts")
213*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("baz.ts")
214*890232f2SAndroid Build Coastguard Worker
215*890232f2SAndroid Build Coastguard Worker
216*890232f2SAndroid Build Coastguard Worker    def ZFlatFilesGenAllWithNamespacing(self):
217*890232f2SAndroid Build Coastguard Worker        # Generate foo with all of its dependents with the flat files option
218*890232f2SAndroid Build Coastguard Worker        flatc(["--ts", "--ts-flat-files", "--gen-all", "foo_with_ns.fbs"])
219*890232f2SAndroid Build Coastguard Worker
220*890232f2SAndroid Build Coastguard Worker        # Should generate a single foo file
221*890232f2SAndroid Build Coastguard Worker        assert_file_and_contents(
222*890232f2SAndroid Build Coastguard Worker            "foo_with_ns_generated.ts",
223*890232f2SAndroid Build Coastguard Worker            # Should export each of the types within the single file
224*890232f2SAndroid Build Coastguard Worker            [
225*890232f2SAndroid Build Coastguard Worker                "export class bar_Bar {",
226*890232f2SAndroid Build Coastguard Worker                "export class bar_Foo {",
227*890232f2SAndroid Build Coastguard Worker                "export enum Baz {",
228*890232f2SAndroid Build Coastguard Worker                "export enum baz_Baz {",
229*890232f2SAndroid Build Coastguard Worker                "export class something_Foo {"
230*890232f2SAndroid Build Coastguard Worker            ],
231*890232f2SAndroid Build Coastguard Worker            # No includes for the dependent types should be present.
232*890232f2SAndroid Build Coastguard Worker            doesnt_contain=[
233*890232f2SAndroid Build Coastguard Worker                "import {Bar as Bar}",
234*890232f2SAndroid Build Coastguard Worker                "import {Baz as Baz}",
235*890232f2SAndroid Build Coastguard Worker            ],
236*890232f2SAndroid Build Coastguard Worker        )
237*890232f2SAndroid Build Coastguard Worker
238*890232f2SAndroid Build Coastguard Worker        # The types Foo, Bar and Baz should not be generated in their own files.
239*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("foo.ts")
240*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("bar.ts")
241*890232f2SAndroid Build Coastguard Worker        assert_file_doesnt_exists("baz.ts")
242*890232f2SAndroid Build Coastguard Worker
243