Skip to content

Commit 6874b89

Browse files
committed
Add regression test for a bug that seems to be fixed
1 parent f166bb3 commit 6874b89

File tree

2 files changed

+158
-0
lines changed

2 files changed

+158
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// RUN: %target-swift-frontend %s -emit-ir
2+
3+
public class TiPresenter<V> {
4+
5+
private var view: V? = nil
6+
7+
public func create() {
8+
9+
}
10+
11+
public func attchView(view: V) {
12+
self.view = view
13+
}
14+
15+
public func detachView() {
16+
self.view = nil
17+
}
18+
19+
public func destroy() {
20+
21+
}
22+
}
23+
24+
25+
public class TiViewController<P: TiPresenter<V>, V>
26+
/*: UiViewController*/ // should extend UiViewController but this is not problem here
27+
{
28+
29+
lazy var presenter: P = {
30+
return self.providePresenter()
31+
}()
32+
33+
public init() {
34+
presenter.create()
35+
}
36+
37+
func providePresenter() -> P {
38+
fatalError("must override")
39+
}
40+
41+
func provideView() -> V {
42+
if (self is V) {
43+
return self as! V
44+
} else {
45+
fatalError("UIViewController doesn't implement TiView interface")
46+
}
47+
}
48+
}
49+
50+
51+
protocol MyView {
52+
func setDataItems(_: [String])
53+
}
54+
55+
class MyPresenter: TiPresenter<MyView> {
56+
}
57+
58+
59+
class MyController: TiViewController<MyPresenter, MyView>, MyView {
60+
61+
62+
override func providePresenter() -> MyPresenter {
63+
return MyPresenter()
64+
}
65+
66+
internal func setDataItems(_: [String]) {
67+
//TODO
68+
}
69+
}
70+
71+
let vc = MyController()
72+
let p = vc.presenter
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// RUN: not %target-swift-frontend %s -typecheck
2+
3+
public protocol TiView {
4+
5+
}
6+
7+
public class TiPresenter<V: TiView> {
8+
9+
private var view: V? = nil
10+
11+
public func create() {
12+
13+
}
14+
15+
public func attchView(view: V) {
16+
self.view = view
17+
}
18+
19+
public func detachView() {
20+
self.view = nil
21+
}
22+
23+
public func destroy() {
24+
25+
}
26+
}
27+
28+
29+
public class TiViewController<P: TiPresenter<V>, V: TiView>
30+
/*: UiViewController*/ // should extend UiViewController but this is not problem here
31+
{
32+
33+
lazy var presenter: P = {
34+
return self.providePresenter()
35+
}()
36+
37+
public init() {
38+
presenter.create()
39+
}
40+
41+
func providePresenter() -> P {
42+
fatalError("must override")
43+
}
44+
45+
func provideView() -> V {
46+
if (self is V) {
47+
return self as! V
48+
} else {
49+
fatalError("UIViewController doesn't implement TiView interface")
50+
}
51+
}
52+
}
53+
54+
55+
protocol MyView: TiView {
56+
func setDataItems(_: [String])
57+
}
58+
59+
class MyPresenter: TiPresenter<MyView> { //ERROR: Using 'MyView' as a concrete type conforming to protocol 'TiView' is not supported
60+
61+
}
62+
63+
64+
class MyController: TiViewController<MyPresenter, MyView>, MyView { // ERROR: 'TiViewController' requires that 'MyPresenter' inherit from 'TiPresenter<MyView>'
65+
66+
67+
override func providePresenter() -> MyPresenter {
68+
return MyPresenter()
69+
}
70+
71+
internal func setDataItems(_: [String]) {
72+
//TODO
73+
}
74+
}
75+
76+
let vc = MyController()
77+
let p = vc.presenter
78+
79+
class TestView: MyView {
80+
internal func setDataItems(_: [String]) {
81+
// TODO
82+
}
83+
}
84+
let view = TestView()
85+
86+
p.attchView(view: view)

0 commit comments

Comments
 (0)