1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
//===-------------- ClassExtensionTest.swift - Swift Testing --------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import XCTest
import TSCBasic
import SwiftOptions
import IncrementalTestFramework
/// Test what happens when adding a function in an extension to a class and a struct.
class AddFuncInImportedExtensionTest: XCTestCase {
func testAddFuncInImportedExtension() throws {
// MARK: - Define sources & imported module
let definer = Source(named: "definer", containing: """
// Define a class and a struct
open class C {public init() {}}
public struct S {public init() {}}
""")
let structExtension = Source( named: "structExtension", containing: """
// Extend the struct, possibly with an additional function.
public extension S{
//# withFunc func foo() {}
}
""")
let classExtension = Source( named: "classExtension", containing: """
// Extend the class, possibly with an additional function.
public extension C{
//# withFunc func foo() {}
}
""")
let importedModule = Module(
named: "ImportedModule",
containing: [definer, structExtension, classExtension],
producing: .library)
// MARK: - Define main module
let structConstructor = Source(named: "structConstructor", containing: """
// Instantiate the struct
import ImportedModule
func su() {_ = S()}
""")
let classConstructor = Source(named: "classConstructor", containing: """
/// Instantiate the class
import ImportedModule
func cu() {_ = C()}
""")
let mainFile = Source(named: "main", containing: "")
let mainModule = Module(
named: "main",
containing: [mainFile, structConstructor, classConstructor],
importing: [importedModule],
producing: .executable)
// MARK: - Define the test
// Define module ordering & what to compile
let modules = [importedModule, mainModule]
// Define what is expected
let whenAddOrRmFunc = ExpectedCompilations(
always: [structExtension, classExtension, ],
andWhenDisabled: [mainFile, structConstructor, classConstructor])
let steps = [
Step( building: modules, .expecting(modules.allSourcesToCompile)),
Step( building: modules, .expecting(.none)),
Step(adding: "withFunc", building: modules, .expecting(whenAddOrRmFunc)),
Step( building: modules, .expecting(whenAddOrRmFunc)),
Step(adding: "withFunc", building: modules, .expecting(whenAddOrRmFunc)),
]
// Do the test
try IncrementalTest.perform(steps)
}
}
|