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