| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /*
- * Copyright 2025, gRPC Authors 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.
- */
- import GRPCCodeGen
- import Testing
- extension StructuredSwiftTests {
- @Suite("Import")
- struct Import {
- static let translator = IDLToStructuredSwiftTranslator()
- static let allAccessLevels: [SourceGenerator.Config.AccessLevel] = [
- .internal, .public, .package,
- ]
- @Test(
- "import rendering",
- arguments: allAccessLevels
- )
- func imports(accessLevel: SourceGenerator.Config.AccessLevel) throws {
- var dependencies = [Dependency]()
- dependencies.append(Dependency(module: "Foo", accessLevel: .public))
- dependencies.append(
- Dependency(
- item: .init(kind: .typealias, name: "Bar"),
- module: "Foo",
- accessLevel: .internal
- )
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .struct, name: "Baz"),
- module: "Foo",
- accessLevel: .package
- )
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .class, name: "Bac"),
- module: "Foo",
- accessLevel: .package
- )
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .enum, name: "Bap"),
- module: "Foo",
- accessLevel: .package
- )
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .protocol, name: "Bat"),
- module: "Foo",
- accessLevel: .package
- )
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .let, name: "Baq"),
- module: "Foo",
- accessLevel: .package
- )
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .var, name: "Bag"),
- module: "Foo",
- accessLevel: .package
- )
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .func, name: "Bak"),
- module: "Foo",
- accessLevel: .package
- )
- )
- let expected =
- """
- \(accessLevel.level) import GRPCCore
- public import Foo
- internal import typealias Foo.Bar
- package import struct Foo.Baz
- package import class Foo.Bac
- package import enum Foo.Bap
- package import protocol Foo.Bat
- package import let Foo.Baq
- package import var Foo.Bag
- package import func Foo.Bak
- """
- let imports = try StructuredSwiftTests.Import.translator.makeImports(
- dependencies: dependencies,
- accessLevel: accessLevel,
- accessLevelOnImports: true
- )
- #expect(render(imports) == expected)
- }
- @Test(
- "preconcurrency import rendering",
- arguments: allAccessLevels
- )
- func preconcurrencyImports(accessLevel: SourceGenerator.Config.AccessLevel) throws {
- var dependencies = [Dependency]()
- dependencies.append(
- Dependency(
- module: "Foo",
- preconcurrency: .required,
- accessLevel: .internal
- )
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .enum, name: "Bar"),
- module: "Foo",
- preconcurrency: .required,
- accessLevel: .internal
- )
- )
- dependencies.append(
- Dependency(
- module: "Baz",
- preconcurrency: .requiredOnOS(["Deq", "Der"]),
- accessLevel: .internal
- )
- )
- let expected =
- """
- \(accessLevel.level) import GRPCCore
- @preconcurrency internal import Foo
- @preconcurrency internal import enum Foo.Bar
- #if os(Deq) || os(Der)
- @preconcurrency internal import Baz
- #else
- internal import Baz
- #endif
- """
- let imports = try StructuredSwiftTests.Import.translator.makeImports(
- dependencies: dependencies,
- accessLevel: accessLevel,
- accessLevelOnImports: true
- )
- #expect(render(imports) == expected)
- }
- @Test(
- "SPI import rendering",
- arguments: allAccessLevels
- )
- func spiImports(accessLevel: SourceGenerator.Config.AccessLevel) throws {
- var dependencies = [Dependency]()
- dependencies.append(
- Dependency(module: "Foo", spi: "Secret", accessLevel: .internal)
- )
- dependencies.append(
- Dependency(
- item: .init(kind: .enum, name: "Bar"),
- module: "Foo",
- spi: "Secret",
- accessLevel: .internal
- )
- )
- let expected =
- """
- \(accessLevel.level) import GRPCCore
- @_spi(Secret) internal import Foo
- @_spi(Secret) internal import enum Foo.Bar
- """
- let imports = try StructuredSwiftTests.Import.translator.makeImports(
- dependencies: dependencies,
- accessLevel: accessLevel,
- accessLevelOnImports: true
- )
- #expect(render(imports) == expected)
- }
- }
- }
|