243 lines
8.1 KiB
Python
Executable File
243 lines
8.1 KiB
Python
Executable File
# 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")
|
|
|