# Copyright 2022 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from flatc_test import * class TsTests(): def Base(self): # Generate just foo with no extra arguments flatc(["--ts", "foo.fbs"]) # Should generate the module that exports both foo and its direct # include, bar. assert_file_and_contents( "foo_generated.ts", [ "export { Bar } from './bar.js';", "export { Foo } from './foo.js';", ], ) # Foo should be generated in place and exports the Foo table. assert_file_and_contents("foo.ts", "export class Foo {") # Included files, like bar, should not be generated. assert_file_doesnt_exists("bar.ts") def BaseMultipleFiles(self): # Generate both foo and bar with no extra arguments flatc(["--ts", "foo.fbs", "bar/bar.fbs"]) # Should generate the module that exports both foo and its direct # include, bar. assert_file_and_contents( "foo_generated.ts", [ "export { Bar } from './bar.js';", "export { Foo } from './foo.js';", ], ) # Foo should be generated in place and exports the Foo table. assert_file_and_contents("foo.ts", "export class Foo {") # Bar should also be generatd in place and exports the Bar table. assert_file_and_contents("bar.ts", "export class Bar {") def BaseWithNamespace(self): # Generate foo with namespacing, with no extra arguments flatc(["--ts", "foo_with_ns.fbs"]) # Should generate the module that exports both foo in its namespace # directory and its direct include, bar. assert_file_and_contents( "foo_with_ns_generated.ts", [ "export { Bar } from './bar/bar.js';", "export { Foo } from './something/foo.js';", ], ) # Foo should be placed in the namespaced directory. It should export # Foo, and the import of Bar should be relative to its location. assert_file_and_contents( "something/foo.ts", [ "export class Foo {", "import { Bar } from '../bar/bar.js';", ], ) # Included files, like bar, should not be generated. assert_file_doesnt_exists("bar.ts") def GenAll(self): # Generate foo with generate all options flatc(["--ts", "--gen-all", "foo.fbs"]) # Should generate a single file that exports all the generated types. assert_file_and_contents( "foo_generated.ts", [ "export { Bar } from './bar.js'", "export { Baz } from './baz.js'", "export { Foo } from './foo.js'", ], ) # Foo should be generated with an import to Bar and an export of itself. assert_file_and_contents( "foo.ts", [ "import { Bar } from './bar.js';", "export class Foo {", ], ) # Bar should be generated with an import to Baz and an export of itself. assert_file_and_contents( "bar.ts", [ "import { Baz } from './baz.js';", "export class Bar {", ], ) # Baz should be generated with an export of itself. assert_file_and_contents( "baz.ts", [ "export enum Baz {", ], ) def FlatFiles(self): # Generate just foo with the flat files option flatc(["--ts", "--ts-flat-files", "foo.fbs"]) # Should generate a single file that imports bar as a single file, and # exports the Foo table. assert_file_and_contents( "foo_generated.ts", [ "import {Bar as Bar} from './bar_generated.js';", "export class Foo {", ], ) # The root type Foo should not be generated in its own file. assert_file_doesnt_exists("foo.ts") def FlatFilesWithNamespace(self): # Generate just foo with the flat files option flatc(["--ts", "--ts-flat-files", "foo_with_ns.fbs"]) # Should generate a single file that imports bar as a single file, and # exports the Foo table. assert_file_and_contents( "foo_with_ns_generated.ts", [ "import {Bar as Bar} from './bar_with_ns_generated.js';", "export class Foo {", ], ) # The root type Foo should not be generated in its own file. assert_file_doesnt_exists("foo.ts") def FlatFilesMultipleFiles(self): # Generate both foo and bar with the flat files option flatc(["--ts", "--ts-flat-files", "foo.fbs", "bar/bar.fbs"]) # Should generate a single foo file that imports bar as a single file, # and exports the Foo table. assert_file_and_contents( "foo_generated.ts", [ "import {Bar as Bar} from './bar_generated.js';", "export class Foo {", ], ) # Should generate a single bar file that imports bar as a single file, # and exports the Bar table. assert_file_and_contents( "bar_generated.ts", [ "import {Baz as Baz} from './baz_generated.js';", "export class Bar {", ], ) # The types Foo and Bar should not be generated in their own files assert_file_doesnt_exists("foo.ts") assert_file_doesnt_exists("bar.ts") def FlatFilesGenAll(self): # Generate foo with all of its dependents with the flat files option flatc(["--ts", "--ts-flat-files", "--gen-all", "foo.fbs"]) # Should generate a single foo file assert_file_and_contents( "foo_generated.ts", # Should export each of the types within the single file [ "export class Foo {", "export class Bar {", "export enum Baz {", ], # No includes for the dependent types should be present. doesnt_contain=[ "import {Bar as Bar}", "import {Baz as Baz}", ], ) # The types Foo, Bar and Baz should not be generated in their own files. assert_file_doesnt_exists("foo.ts") assert_file_doesnt_exists("bar.ts") assert_file_doesnt_exists("baz.ts") def ZFlatFilesGenAllWithNamespacing(self): # Generate foo with all of its dependents with the flat files option flatc(["--ts", "--ts-flat-files", "--gen-all", "foo_with_ns.fbs"]) # Should generate a single foo file assert_file_and_contents( "foo_with_ns_generated.ts", # Should export each of the types within the single file [ "export class bar_Bar {", "export class bar_Foo {", "export enum Baz {", "export enum baz_Baz {", "export class something_Foo {" ], # No includes for the dependent types should be present. doesnt_contain=[ "import {Bar as Bar}", "import {Baz as Baz}", ], ) # The types Foo, Bar and Baz should not be generated in their own files. assert_file_doesnt_exists("foo.ts") assert_file_doesnt_exists("bar.ts") assert_file_doesnt_exists("baz.ts")