Skip to content

Commit 38545a0

Browse files
committed
Merge pull request ReactiveX#77 from kzaher/feature/interaction-tests
Adds automations tests for example app
2 parents 2580ba9 + ae04b4c commit 38545a0

File tree

10 files changed

+514
-49
lines changed

10 files changed

+514
-49
lines changed

RxExample/RxExample/Examples/APIWrappers/APIWrappersViewController.swift

Lines changed: 75 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,26 @@ import RxSwift
1111
import RxCocoa
1212
import CoreLocation
1313

14+
extension UILabel {
15+
public override var accessibilityValue: String! {
16+
get {
17+
return self.text
18+
}
19+
set {
20+
self.text = newValue
21+
self.accessibilityValue = newValue
22+
}
23+
}
24+
}
25+
1426
class APIWrappersViewController: ViewController {
1527

28+
@IBOutlet weak var debugLabel: UILabel!
29+
30+
@IBOutlet weak var openActionSheet: UIButton!
31+
32+
@IBOutlet weak var openAlertView: UIButton!
33+
1634
@IBOutlet weak var bbitem: UIBarButtonItem!
1735

1836
@IBOutlet weak var segmentedControl: UISegmentedControl!
@@ -32,130 +50,142 @@ class APIWrappersViewController: ViewController {
3250
let disposeBag = DisposeBag()
3351

3452
let manager = CLLocationManager()
35-
53+
3654
override func viewDidLoad() {
3755
super.viewDidLoad()
3856

57+
datePicker.date = NSDate(timeIntervalSince1970: 0)
58+
3959
let ash = UIActionSheet(title: "Title", delegate: nil, cancelButtonTitle: "Cancel", destructiveButtonTitle: "OK")
4060
let av = UIAlertView(title: "Title", message: "The message", delegate: nil, cancelButtonTitle: "Cancel", otherButtonTitles: "OK", "Two", "Three", "Four", "Five")
4161

62+
openActionSheet.rx_tap
63+
>- subscribeNext { x in
64+
ash.showInView(self.view)
65+
}
66+
>- disposeBag.addDisposable
67+
68+
openAlertView.rx_tap
69+
>- subscribeNext { x in
70+
av.show()
71+
}
72+
>- disposeBag.addDisposable
73+
4274
// MARK: UIActionSheet
4375

4476
ash.rx_clickedButtonAtIndex
45-
>- subscribeNext { x in
46-
println("UIActionSheet clickedButtonAtIndex \(x)")
77+
>- subscribeNext { [weak self] x in
78+
self?.debug("UIActionSheet clickedButtonAtIndex \(x)")
4779
}
4880
>- disposeBag.addDisposable
4981

5082
ash.rx_willDismissWithButtonIndex
51-
>- subscribeNext { x in
52-
println("UIActionSheet willDismissWithButtonIndex \(x)")
83+
>- subscribeNext { [weak self] x in
84+
self?.debug("UIActionSheet willDismissWithButtonIndex \(x)")
5385
}
5486
>- disposeBag.addDisposable
5587

5688
ash.rx_didDismissWithButtonIndex
57-
>- subscribeNext { x in
58-
println("UIActionSheet didDismissWithButtonIndex \(x)")
59-
60-
av.show()
89+
>- subscribeNext { [weak self] x in
90+
self?.debug("UIActionSheet didDismissWithButtonIndex \(x)")
6191
}
6292
>- disposeBag.addDisposable
6393

6494

6595
// MARK: UIAlertView
6696

6797
av.rx_clickedButtonAtIndex
68-
>- subscribeNext { x in
69-
println("UIAlertView clickedButtonAtIndex \(x)")
98+
>- subscribeNext { [weak self] x in
99+
self?.debug("UIAlertView clickedButtonAtIndex \(x)")
70100
}
71101
>- disposeBag.addDisposable
72102

73103
av.rx_willDismissWithButtonIndex
74-
>- subscribeNext { x in
75-
println("UIAlertView willDismissWithButtonIndex \(x)")
104+
>- subscribeNext { [weak self] x in
105+
self?.debug("UIAlertView willDismissWithButtonIndex \(x)")
76106
}
77107
>- disposeBag.addDisposable
78108

79109
av.rx_didDismissWithButtonIndex
80-
>- subscribeNext { x in
81-
println("UIAlertView didDismissWithButtonIndex \(x)")
110+
>- subscribeNext { [weak self] x in
111+
self?.debug("UIAlertView didDismissWithButtonIndex \(x)")
82112
}
83113
>- disposeBag.addDisposable
84114

85115

86116

87117

88-
ash.showInView(view)
118+
89119

90120

91121
// MARK: UIBarButtonItem
92122

93123
bbitem.rx_tap
94-
>- subscribeNext { x in
95-
println("UIBarButtonItem Tapped")
124+
>- subscribeNext { [weak self] x in
125+
self?.debug("UIBarButtonItem Tapped")
96126
}
97127
>- disposeBag.addDisposable
98128

99129
// MARK: UISegmentedControl
100130

101131
segmentedControl.rx_value
102-
>- subscribeNext { x in
103-
println("UISegmentedControl value \(x)")
132+
>- subscribeNext { [weak self] x in
133+
self?.debug("UISegmentedControl value \(x)")
104134
}
105135
>- disposeBag.addDisposable
106136

107137

108138
// MARK: UISwitch
109139

110140
switcher.rx_value
111-
>- subscribeNext { x in
112-
println("UISwitch value \(x)")
141+
>- subscribeNext { [weak self] x in
142+
self?.debug("UISwitch value \(x)")
113143
}
114144
>- disposeBag.addDisposable
115145

116146

117147
// MARK: UIButton
118148

119149
button.rx_tap
120-
>- subscribeNext { x in
121-
println("UIButton Tapped")
150+
>- subscribeNext { [weak self] x in
151+
self?.debug("UIButton Tapped")
122152
}
123153
>- disposeBag.addDisposable
124154

125155

126156
// MARK: UISlider
127157

128158
slider.rx_value
129-
>- subscribeNext { x in
130-
println("UISlider value \(x)")
159+
>- subscribeNext { [weak self] x in
160+
self?.debug("UISlider value \(x)")
131161
}
132162
>- disposeBag.addDisposable
133163

134164

135165
// MARK: UIDatePicker
136166

137167
datePicker.rx_date
138-
>- subscribeNext { x in
139-
println("UIDatePicker date \(x)")
168+
>- subscribeNext { [weak self] x in
169+
self?.debug("UIDatePicker date \(x)")
140170
}
141171
>- disposeBag.addDisposable
142172

143173

144174
// MARK: UITextField
145175

146176
textField.rx_text
147-
>- subscribeNext { [unowned self] x in
148-
println("UITextField text \(x)")
149-
self.textField.resignFirstResponder()
177+
>- subscribeNext { [weak self] x in
178+
self?.debug("UITextField text \(x)")
179+
self?.textField.resignFirstResponder()
150180
}
151181
>- disposeBag.addDisposable
152182

153183

154184
// MARK: UIGestureRecognizer
155185

156186
mypan.rx_event
157-
>- subscribeNext { x in
158-
println("UIGestureRecognizer event \(x)")
187+
>- subscribeNext { [weak self] x in
188+
self?.debug("UIGestureRecognizer event \(x.state)")
159189
}
160190
>- disposeBag.addDisposable
161191

@@ -166,22 +196,27 @@ class APIWrappersViewController: ViewController {
166196
manager.requestWhenInUseAuthorization()
167197

168198
manager.rx_didUpdateLocations
169-
>- subscribeNext { x in
170-
println("rx_didUpdateLocations \(x)")
199+
>- subscribeNext { [weak self] x in
200+
self?.debug("rx_didUpdateLocations \(x)")
171201
}
172202
>- disposeBag.addDisposable
173203

174204
manager.rx_didFailWithError
175-
>- subscribeNext { x in
176-
println("rx_didFailWithError \(x)")
205+
>- subscribeNext { [weak self] x in
206+
self?.debug("rx_didFailWithError \(x)")
177207
}
178208
>- disposeBag.addDisposable
179-
209+
180210

181211
manager.startUpdatingLocation()
182212

213+
214+
215+
}
216+
217+
func debug(string: String) {
218+
println(string)
219+
debugLabel.text = string
183220
}
184-
185-
186221
}
187222

RxExample/RxExample/iOS/Main.storyboard

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@
281281
</collectionViewCell>
282282
</cells>
283283
<collectionReusableView key="sectionHeaderView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="Section" id="myv-cg-TS9" customClass="NumberSectionView" customModule="RxExample" customModuleProvider="target">
284-
<rect key="frame" x="0.0" y="0.0" width="107.5" height="25"/>
284+
<rect key="frame" x="0.0" y="0.0" width="108" height="25"/>
285285
<autoresizingMask key="autoresizingMask"/>
286286
<subviews>
287287
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dob-Ct-qBk">
@@ -548,37 +548,37 @@ This is only showcase app, not intended for production purposes.</string>
548548
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
549549
<subviews>
550550
<segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="UpX-Bf-ZT6">
551-
<rect key="frame" x="16" y="85" width="123" height="29"/>
551+
<rect key="frame" x="16" y="110" width="123" height="29"/>
552552
<segments>
553553
<segment title="First"/>
554554
<segment title="Second"/>
555555
</segments>
556556
</segmentedControl>
557557
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="WB2-p2-bYm">
558-
<rect key="frame" x="14" y="124" width="292" height="31"/>
558+
<rect key="frame" x="14" y="149" width="292" height="31"/>
559559
</slider>
560560
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QsG-uN-yAh">
561-
<rect key="frame" x="147" y="85" width="51" height="31"/>
561+
<rect key="frame" x="147" y="110" width="51" height="31"/>
562562
</switch>
563563
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0br-EX-AUP">
564-
<rect key="frame" x="204" y="85" width="46" height="30"/>
564+
<rect key="frame" x="204" y="110" width="46" height="30"/>
565565
<state key="normal" title="TapMe">
566566
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
567567
</state>
568568
</button>
569569
<datePicker contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" datePickerMode="dateAndTime" minuteInterval="1" translatesAutoresizingMaskIntoConstraints="NO" id="JEV-nj-tQA">
570-
<rect key="frame" x="16" y="162" width="288" height="162"/>
570+
<rect key="frame" x="16" y="187" width="288" height="162"/>
571571
<date key="date" timeIntervalSinceReferenceDate="458137679.98291397">
572572
<!--2015-07-09 12:27:59 +0000-->
573573
</date>
574574
</datePicker>
575575
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Eas-vY-Wds">
576-
<rect key="frame" x="258" y="86" width="46" height="30"/>
576+
<rect key="frame" x="258" y="111" width="46" height="30"/>
577577
<fontDescription key="fontDescription" type="system" pointSize="14"/>
578578
<textInputTraits key="textInputTraits"/>
579579
</textField>
580580
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gjR-nX-oAX">
581-
<rect key="frame" x="16" y="332" width="288" height="116"/>
581+
<rect key="frame" x="16" y="357" width="288" height="116"/>
582582
<subviews>
583583
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Test Pan gesture in this view" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fQw-v9-hRf">
584584
<rect key="frame" x="35" y="47" width="218" height="21"/>
@@ -593,13 +593,32 @@ This is only showcase app, not intended for production purposes.</string>
593593
<outletCollection property="gestureRecognizers" destination="Shn-qP-Kjy" appends="YES" id="3n5-2m-td7"/>
594594
</connections>
595595
</view>
596+
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FAz-sk-QmU">
597+
<rect key="frame" x="16" y="481" width="288" height="21"/>
598+
<accessibility key="accessibilityConfiguration" label="debugLabel"/>
599+
<fontDescription key="fontDescription" type="system" pointSize="12"/>
600+
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
601+
<nil key="highlightedColor"/>
602+
</label>
603+
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VeZ-e0-mdh">
604+
<rect key="frame" x="16" y="72" width="125" height="30"/>
605+
<state key="normal" title="Open ActionSheet">
606+
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
607+
</state>
608+
</button>
609+
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gVF-My-cWk">
610+
<rect key="frame" x="198" y="73" width="106" height="30"/>
611+
<state key="normal" title="Open AlertView">
612+
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
613+
</state>
614+
</button>
596615
</subviews>
597616
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
598617
<gestureRecognizers/>
599618
<constraints>
600619
<constraint firstItem="WB2-p2-bYm" firstAttribute="trailing" secondItem="wXQ-4H-OJk" secondAttribute="trailingMargin" id="bhR-hJ-vQh"/>
601620
<constraint firstItem="WB2-p2-bYm" firstAttribute="leading" secondItem="wXQ-4H-OJk" secondAttribute="leadingMargin" id="gkz-kY-Bej"/>
602-
<constraint firstItem="WB2-p2-bYm" firstAttribute="top" secondItem="wXQ-4H-OJk" secondAttribute="topMargin" constant="124" id="xVe-Ni-yEy"/>
621+
<constraint firstItem="WB2-p2-bYm" firstAttribute="top" secondItem="wXQ-4H-OJk" secondAttribute="topMargin" constant="149" id="xVe-Ni-yEy"/>
603622
</constraints>
604623
</view>
605624
<navigationItem key="navigationItem" id="jLb-0R-htG">
@@ -609,7 +628,10 @@ This is only showcase app, not intended for production purposes.</string>
609628
<outlet property="bbitem" destination="PtG-IX-ax4" id="Sl6-M4-8r0"/>
610629
<outlet property="button" destination="0br-EX-AUP" id="6RQ-bH-oin"/>
611630
<outlet property="datePicker" destination="JEV-nj-tQA" id="LdZ-qr-RIy"/>
631+
<outlet property="debugLabel" destination="FAz-sk-QmU" id="nRF-PL-5LD"/>
612632
<outlet property="mypan" destination="Shn-qP-Kjy" id="sbA-Xi-VQW"/>
633+
<outlet property="openActionSheet" destination="VeZ-e0-mdh" id="yif-jw-oVc"/>
634+
<outlet property="openAlertView" destination="gVF-My-cWk" id="aVd-Gf-sqQ"/>
613635
<outlet property="segmentedControl" destination="UpX-Bf-ZT6" id="QKf-Ut-0ah"/>
614636
<outlet property="slider" destination="WB2-p2-bYm" id="XV2-ty-qzT"/>
615637
<outlet property="switcher" destination="QsG-uN-yAh" id="wpt-IK-hWW"/>

automation-tests.sh

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
CURRENT_DIR="$( dirname "${BASH_SOURCE[0]}" )"
6+
7+
cd $CURRENT_DIR
8+
9+
RxSwiftTest='iPhone 6 Plus'
10+
11+
xcodebuild -workspace Rx.xcworkspace -scheme RxExample-iOS -derivedDataPath $TMPDIR/build -configuration Release -destination name='iPhone 6 Plus' build
12+
13+
osascript -e 'quit app "iOS Simulator.app"'
14+
15+
xcrun instruments -w 'iPhone 6 Plus' > /dev/null 2>&1 || echo
16+
17+
sleep 2
18+
19+
xcrun simctl install 'iPhone 6 Plus' $TMPDIR/build/Build/Products/Release-iphonesimulator/RxExample.app
20+
21+
sleep 10
22+
23+
cd $TMPDIR
24+
25+
rm -rf instrumentscli0.trace || echo
26+
27+
instruments -w 'iPhone 6 Plus' -t Automation RxExample -e UIASCRIPT $CURRENT_DIR/automation-tests/main.js
28+
29+
open instrumentscli0.trace
30+

0 commit comments

Comments
 (0)