Files
swift-mirror/test/Index/circular.swift
Ben Langmuir 26de7c1bf9 [index] Fix infinite loop while looking at superclasses
While checking for superclasses in isUnitTest, we need to handle
circular inheritance. For good measure, add tests for protocols as well.

The new API is designed to behave the same as walkInheritedProtocols
except that is walks over superclasses.

rdar://49434989
2019-03-29 15:56:46 -07:00

67 lines
3.9 KiB
Swift

// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %s | %FileCheck %s
class SelfCycle : SelfCycle {}
// CHECK: [[@LINE-1]]:7 | class/Swift | SelfCycle | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:19 | class/Swift | SelfCycle | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class/Swift | SelfCycle | {{\W*}}
class Cycle1_A: Cycle1_B {}
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle1_A | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle1_B | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class/Swift | Cycle1_A | {{[^ ]*}}
class Cycle1_B: Cycle1_A {}
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle1_B | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle1_A | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class/Swift | Cycle1_B | {{[^ ]*}}
class Cycle2_A: Cycle2_C {}
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_A | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_C | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class/Swift | Cycle2_A | {{[^ ]*}}
class Cycle2_B: Cycle2_A {}
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_B | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_A | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class/Swift | Cycle2_B | {{[^ ]*}}
class Cycle2_C: Cycle2_B {}
// CHECK: [[@LINE-1]]:7 | class/Swift | Cycle2_C | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:17 | class/Swift | Cycle2_B | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class/Swift | Cycle2_C | {{[^ ]*}}
class TestCase1: XCTestCase {}
// CHECK: [[@LINE-1]]:7 | class(test)/Swift | TestCase1 | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:18 | class/Swift | XCTestCase | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class(test)/Swift | TestCase1 | {{[^ ]*}}
class XCTestCase: TestCase1 {}
// CHECK: [[@LINE-1]]:7 | class/Swift | XCTestCase | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:19 | class(test)/Swift | TestCase1 | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class/Swift | XCTestCase | {{[^ ]*}}
class TestCase2: TestCase1 {}
// CHECK: [[@LINE-1]]:7 | class(test)/Swift | TestCase2 | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:18 | class(test)/Swift | TestCase1 | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | class(test)/Swift | TestCase2 | {{[^ ]*}}
protocol SelfCycleP: SelfCycleP {}
// CHECK: [[@LINE-1]]:10 | protocol/Swift | SelfCycleP | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:22 | protocol/Swift | SelfCycleP | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | protocol/Swift | SelfCycleP | {{[^ ]*}}
protocol Cycle1P_A: Cycle1P_B {}
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle1P_A | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle1P_B | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | protocol/Swift | Cycle1P_A | {{[^ ]*}}
protocol Cycle1P_B: Cycle1P_A {}
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle1P_B | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle1P_A | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | protocol/Swift | Cycle1P_B | {{[^ ]*}}
protocol Cycle2P_A: Cycle2P_C {}
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_A | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_C | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | protocol/Swift | Cycle2P_A | {{[^ ]*}}
protocol Cycle2P_B: Cycle2P_A {}
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_B | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_A | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | protocol/Swift | Cycle2P_B | {{[^ ]*}}
protocol Cycle2P_C: Cycle2P_B {}
// CHECK: [[@LINE-1]]:10 | protocol/Swift | Cycle2P_C | {{[^ ]*}} | Def | rel: 0
// CHECK: [[@LINE-2]]:21 | protocol/Swift | Cycle2P_B | {{[^ ]*}} | Ref,RelBase | rel: 1
// CHECK: RelBase | protocol/Swift | Cycle2P_C | {{[^ ]*}}