cukunity 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (226) hide show
  1. data/.document +5 -0
  2. data/.gitmodules +0 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +60 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +214 -0
  8. data/Rakefile +51 -0
  9. data/Unity/Assets/Demo/Art/Buttons/down.png +0 -0
  10. data/Unity/Assets/Demo/Art/Buttons/down.png.meta +28 -0
  11. data/Unity/Assets/Demo/Art/Buttons/left.png +0 -0
  12. data/Unity/Assets/Demo/Art/Buttons/left.png.meta +28 -0
  13. data/Unity/Assets/Demo/Art/Buttons/ok.png +0 -0
  14. data/Unity/Assets/Demo/Art/Buttons/ok.png.meta +28 -0
  15. data/Unity/Assets/Demo/Art/Buttons/options.png +0 -0
  16. data/Unity/Assets/Demo/Art/Buttons/options.png.meta +28 -0
  17. data/Unity/Assets/Demo/Art/Buttons/play.png +0 -0
  18. data/Unity/Assets/Demo/Art/Buttons/play.png.meta +28 -0
  19. data/Unity/Assets/Demo/Art/Buttons/quit.png +0 -0
  20. data/Unity/Assets/Demo/Art/Buttons/quit.png.meta +28 -0
  21. data/Unity/Assets/Demo/Art/Buttons/retry.png +0 -0
  22. data/Unity/Assets/Demo/Art/Buttons/retry.png.meta +28 -0
  23. data/Unity/Assets/Demo/Art/Buttons/right.png +0 -0
  24. data/Unity/Assets/Demo/Art/Buttons/right.png.meta +28 -0
  25. data/Unity/Assets/Demo/Art/Buttons/up.png +0 -0
  26. data/Unity/Assets/Demo/Art/Buttons/up.png.meta +28 -0
  27. data/Unity/Assets/Demo/Art/Buttons.meta +2 -0
  28. data/Unity/Assets/Demo/Art/clear.png +0 -0
  29. data/Unity/Assets/Demo/Art/clear.png.meta +28 -0
  30. data/Unity/Assets/Demo/Art/options.png +0 -0
  31. data/Unity/Assets/Demo/Art/options.png.meta +28 -0
  32. data/Unity/Assets/Demo/Art/sokoban.png +0 -0
  33. data/Unity/Assets/Demo/Art/sokoban.png.meta +28 -0
  34. data/Unity/Assets/Demo/Art.meta +2 -0
  35. data/Unity/Assets/Demo/Cubes/CrateCube.mat +0 -0
  36. data/Unity/Assets/Demo/Cubes/CrateCube.mat.meta +2 -0
  37. data/Unity/Assets/Demo/Cubes/CrateCube.prefab +0 -0
  38. data/Unity/Assets/Demo/Cubes/CrateCube.prefab.meta +2 -0
  39. data/Unity/Assets/Demo/Cubes/FloorCube.mat +0 -0
  40. data/Unity/Assets/Demo/Cubes/FloorCube.mat.meta +2 -0
  41. data/Unity/Assets/Demo/Cubes/FloorCube.prefab +0 -0
  42. data/Unity/Assets/Demo/Cubes/FloorCube.prefab.meta +2 -0
  43. data/Unity/Assets/Demo/Cubes/GoalCube.mat +0 -0
  44. data/Unity/Assets/Demo/Cubes/GoalCube.mat.meta +2 -0
  45. data/Unity/Assets/Demo/Cubes/GoalCube.prefab +0 -0
  46. data/Unity/Assets/Demo/Cubes/GoalCube.prefab.meta +2 -0
  47. data/Unity/Assets/Demo/Cubes/PlayerCube.mat +0 -0
  48. data/Unity/Assets/Demo/Cubes/PlayerCube.mat.meta +2 -0
  49. data/Unity/Assets/Demo/Cubes/PlayerCube.prefab +0 -0
  50. data/Unity/Assets/Demo/Cubes/PlayerCube.prefab.meta +2 -0
  51. data/Unity/Assets/Demo/Cubes/WallCube.mat +0 -0
  52. data/Unity/Assets/Demo/Cubes/WallCube.mat.meta +2 -0
  53. data/Unity/Assets/Demo/Cubes/WallCube.prefab +0 -0
  54. data/Unity/Assets/Demo/Cubes/WallCube.prefab.meta +2 -0
  55. data/Unity/Assets/Demo/Cubes.meta +2 -0
  56. data/Unity/Assets/Demo/Resources/MainMenu.prefab +0 -0
  57. data/Unity/Assets/Demo/Resources/MainMenu.prefab.meta +2 -0
  58. data/Unity/Assets/Demo/Resources/OptionsMenu.prefab +0 -0
  59. data/Unity/Assets/Demo/Resources/OptionsMenu.prefab.meta +2 -0
  60. data/Unity/Assets/Demo/Resources.meta +2 -0
  61. data/Unity/Assets/Demo/Scripts/CameraController.js +18 -0
  62. data/Unity/Assets/Demo/Scripts/CameraController.js.meta +2 -0
  63. data/Unity/Assets/Demo/Scripts/EnterPlayerName.js +21 -0
  64. data/Unity/Assets/Demo/Scripts/EnterPlayerName.js.meta +2 -0
  65. data/Unity/Assets/Demo/Scripts/GameLeftButton.js +18 -0
  66. data/Unity/Assets/Demo/Scripts/GameLeftButton.js.meta +2 -0
  67. data/Unity/Assets/Demo/Scripts/GameQuitButton.js +6 -0
  68. data/Unity/Assets/Demo/Scripts/GameQuitButton.js.meta +2 -0
  69. data/Unity/Assets/Demo/Scripts/GameRetryButton.js +7 -0
  70. data/Unity/Assets/Demo/Scripts/GameRetryButton.js.meta +2 -0
  71. data/Unity/Assets/Demo/Scripts/GameRightButton.js +18 -0
  72. data/Unity/Assets/Demo/Scripts/GameRightButton.js.meta +2 -0
  73. data/Unity/Assets/Demo/Scripts/GameUpButton.js +18 -0
  74. data/Unity/Assets/Demo/Scripts/GameUpButton.js.meta +2 -0
  75. data/Unity/Assets/Demo/Scripts/OnTouchGUIElementDown.js +34 -0
  76. data/Unity/Assets/Demo/Scripts/OnTouchGUIElementDown.js.meta +2 -0
  77. data/Unity/Assets/Demo/Scripts/PlayerData.js +3 -0
  78. data/Unity/Assets/Demo/Scripts/PlayerData.js.meta +2 -0
  79. data/Unity/Assets/Demo/Scripts/SokobanController.js +240 -0
  80. data/Unity/Assets/Demo/Scripts/SokobanController.js.meta +2 -0
  81. data/Unity/Assets/Demo/Scripts/TakeScreenShot.js +26 -0
  82. data/Unity/Assets/Demo/Scripts/TakeScreenShot.js.meta +2 -0
  83. data/Unity/Assets/Demo/Scripts/TitleOptionsButton.js +8 -0
  84. data/Unity/Assets/Demo/Scripts/TitleOptionsButton.js.meta +2 -0
  85. data/Unity/Assets/Demo/Scripts/TitleOptionsOkButton.js +8 -0
  86. data/Unity/Assets/Demo/Scripts/TitleOptionsOkButton.js.meta +2 -0
  87. data/Unity/Assets/Demo/Scripts/TitlePlayButton.js +6 -0
  88. data/Unity/Assets/Demo/Scripts/TitlePlayButton.js.meta +2 -0
  89. data/Unity/Assets/Demo/Scripts/TitleQuitButton.js +7 -0
  90. data/Unity/Assets/Demo/Scripts/TitleQuitButton.js.meta +2 -0
  91. data/Unity/Assets/Demo/Scripts/UpdateMovesLabel.js +26 -0
  92. data/Unity/Assets/Demo/Scripts/UpdateMovesLabel.js.meta +2 -0
  93. data/Unity/Assets/Demo/Scripts/UpdatePlayerName.js +14 -0
  94. data/Unity/Assets/Demo/Scripts/UpdatePlayerName.js.meta +2 -0
  95. data/Unity/Assets/Demo/Scripts.meta +2 -0
  96. data/Unity/Assets/Demo/demo_game.unity +0 -0
  97. data/Unity/Assets/Demo/demo_game.unity.meta +2 -0
  98. data/Unity/Assets/Demo/demo_title.unity +0 -0
  99. data/Unity/Assets/Demo/demo_title.unity.meta +2 -0
  100. data/Unity/Assets/Demo.meta +2 -0
  101. data/Unity/Assets/Plugins/CukunityInstance.prefab +0 -0
  102. data/Unity/Assets/Plugins/CukunityInstance.prefab.meta +2 -0
  103. data/Unity/Assets/Plugins/CukunityServer.cs +871 -0
  104. data/Unity/Assets/Plugins/CukunityServer.cs.meta +2 -0
  105. data/Unity/Assets/Plugins/JsonFx.Json.dll +0 -0
  106. data/Unity/Assets/Plugins/JsonFx.Json.dll.meta +2 -0
  107. data/Unity/Assets/Plugins/iOS/CukunityServer.mm +242 -0
  108. data/Unity/Assets/Plugins/iOS/CukunityServer.mm.meta +2 -0
  109. data/Unity/Assets/Plugins/iOS.meta +2 -0
  110. data/Unity/Assets/Plugins.meta +2 -0
  111. data/Unity/Library/AudioManager.asset +0 -0
  112. data/Unity/Library/BuildSettings.asset +0 -0
  113. data/Unity/Library/DynamicsManager.asset +0 -0
  114. data/Unity/Library/EditorBuildSettings.asset +0 -0
  115. data/Unity/Library/EditorSettings.asset +0 -0
  116. data/Unity/Library/EditorUserBuildSettings.asset +0 -0
  117. data/Unity/Library/EditorUserSettings.asset +0 -0
  118. data/Unity/Library/InputManager.asset +0 -0
  119. data/Unity/Library/InspectorExpandedItems.asset +0 -0
  120. data/Unity/Library/MonoManager.asset +0 -0
  121. data/Unity/Library/NetworkManager.asset +0 -0
  122. data/Unity/Library/ProjectSettings.asset +0 -0
  123. data/Unity/Library/QualitySettings.asset +0 -0
  124. data/Unity/Library/TagManager.asset +0 -0
  125. data/Unity/Library/TimeManager.asset +0 -0
  126. data/Unity/ProjectSettings/AudioManager.asset +0 -0
  127. data/Unity/ProjectSettings/DynamicsManager.asset +0 -0
  128. data/Unity/ProjectSettings/EditorBuildSettings.asset +0 -0
  129. data/Unity/ProjectSettings/EditorSettings.asset +0 -0
  130. data/Unity/ProjectSettings/InputManager.asset +0 -0
  131. data/Unity/ProjectSettings/NavMeshLayers.asset +0 -0
  132. data/Unity/ProjectSettings/NetworkManager.asset +0 -0
  133. data/Unity/ProjectSettings/ProjectSettings.asset +0 -0
  134. data/Unity/ProjectSettings/QualitySettings.asset +0 -0
  135. data/Unity/ProjectSettings/TagManager.asset +0 -0
  136. data/Unity/ProjectSettings/TimeManager.asset +0 -0
  137. data/VERSION +1 -0
  138. data/bin/cukunity +7 -0
  139. data/cukunity.gemspec +298 -0
  140. data/features/get_scene_command.feature +39 -0
  141. data/features/i18n/ja/sokoban_clear.feature +109 -0
  142. data/features/install.feature +23 -0
  143. data/features/keyboard_input.feature +26 -0
  144. data/features/load_level_command.feature +36 -0
  145. data/features/run.feature +33 -0
  146. data/features/select_visible.feature +29 -0
  147. data/features/support/env.rb +11 -0
  148. data/features/touch_input.feature +96 -0
  149. data/lib/cukunity/cli/argument_parser.rb +103 -0
  150. data/lib/cukunity/cli/bootstrap_command.rb +39 -0
  151. data/lib/cukunity/cli/doctor_command.rb +150 -0
  152. data/lib/cukunity/cli/features_command.rb +35 -0
  153. data/lib/cukunity/cli/main.rb +18 -0
  154. data/lib/cukunity/cli/options.rb +8 -0
  155. data/lib/cukunity/cli.rb +11 -0
  156. data/lib/cukunity/cucumber/step_definitions/get_scene_command_steps.rb +37 -0
  157. data/lib/cukunity/cucumber/step_definitions/i18n/ja/get_scene_command_steps.rb +37 -0
  158. data/lib/cukunity/cucumber/step_definitions/i18n/ja/install_steps.rb +25 -0
  159. data/lib/cukunity/cucumber/step_definitions/i18n/ja/keyboard_input_steps.rb +17 -0
  160. data/lib/cukunity/cucumber/step_definitions/i18n/ja/load_level_command_steps.rb +17 -0
  161. data/lib/cukunity/cucumber/step_definitions/i18n/ja/run_steps.rb +25 -0
  162. data/lib/cukunity/cucumber/step_definitions/i18n/ja/select_visible_steps.rb +9 -0
  163. data/lib/cukunity/cucumber/step_definitions/i18n/ja/touch_input_steps.rb +19 -0
  164. data/lib/cukunity/cucumber/step_definitions/i18n/ja.rb +9 -0
  165. data/lib/cukunity/cucumber/step_definitions/install_steps.rb +33 -0
  166. data/lib/cukunity/cucumber/step_definitions/keyboard_input_steps.rb +13 -0
  167. data/lib/cukunity/cucumber/step_definitions/load_level_command_steps.rb +17 -0
  168. data/lib/cukunity/cucumber/step_definitions/run_steps.rb +32 -0
  169. data/lib/cukunity/cucumber/step_definitions/select_visible_steps.rb +15 -0
  170. data/lib/cukunity/cucumber/step_definitions/touch_input_steps.rb +18 -0
  171. data/lib/cukunity/cucumber/support/platform_helpers.rb +105 -0
  172. data/lib/cukunity/cucumber/support/spec_helpers.rb +21 -0
  173. data/lib/cukunity/cucumber/support/transforms.rb +5 -0
  174. data/lib/cukunity/cucumber/support/unity_helpers.rb +35 -0
  175. data/lib/cukunity/cucumber.rb +28 -0
  176. data/lib/cukunity/drivers/android/app.rb +43 -0
  177. data/lib/cukunity/drivers/android/appkiller/.gitignore +9 -0
  178. data/lib/cukunity/drivers/android/appkiller/AndroidManifest.xml +17 -0
  179. data/lib/cukunity/drivers/android/appkiller/ant.properties +17 -0
  180. data/lib/cukunity/drivers/android/appkiller/build.xml +85 -0
  181. data/lib/cukunity/drivers/android/appkiller/proguard.cfg +40 -0
  182. data/lib/cukunity/drivers/android/appkiller/project.properties +11 -0
  183. data/lib/cukunity/drivers/android/appkiller/res/layout/main.xml +13 -0
  184. data/lib/cukunity/drivers/android/appkiller/res/values/strings.xml +4 -0
  185. data/lib/cukunity/drivers/android/appkiller/src/cukunity/appkiller/AppKiller.java +29 -0
  186. data/lib/cukunity/drivers/android/keyboard_input.rb +149 -0
  187. data/lib/cukunity/drivers/android/keycodes.rb +531 -0
  188. data/lib/cukunity/drivers/android/monkey_client.rb +65 -0
  189. data/lib/cukunity/drivers/android/process.rb +103 -0
  190. data/lib/cukunity/drivers/android/touch_input.rb +24 -0
  191. data/lib/cukunity/drivers/android/tunnel_client_methods.rb +22 -0
  192. data/lib/cukunity/drivers/android/unity_client.rb +27 -0
  193. data/lib/cukunity/drivers/android/utils.rb +50 -0
  194. data/lib/cukunity/drivers/android.rb +9 -0
  195. data/lib/cukunity/drivers/iOS/app.rb +32 -0
  196. data/lib/cukunity/drivers/iOS/keyboard_input.rb +104 -0
  197. data/lib/cukunity/drivers/iOS/process.rb +42 -0
  198. data/lib/cukunity/drivers/iOS/touch_input.rb +18 -0
  199. data/lib/cukunity/drivers/iOS/tunnel_client_methods.rb +27 -0
  200. data/lib/cukunity/drivers/iOS/uiautomation.rb +97 -0
  201. data/lib/cukunity/drivers/iOS/uiautomation_master.rb +152 -0
  202. data/lib/cukunity/drivers/iOS/uiautomation_slave.js +238 -0
  203. data/lib/cukunity/drivers/iOS/uiautomation_slave.rb +41 -0
  204. data/lib/cukunity/drivers/iOS/unity_client.rb +27 -0
  205. data/lib/cukunity/drivers/iOS/utils.rb +46 -0
  206. data/lib/cukunity/drivers/iOS.rb +9 -0
  207. data/lib/cukunity/exceptions.rb +24 -0
  208. data/lib/cukunity/keyboard_input_methods.rb +35 -0
  209. data/lib/cukunity/request_line_response_client_methods.rb +80 -0
  210. data/lib/cukunity/tasks/cucumber.rake +22 -0
  211. data/lib/cukunity/touch_input_methods.rb +19 -0
  212. data/lib/cukunity/unity/client_methods.rb +46 -0
  213. data/lib/cukunity/unity/command_facade.rb +67 -0
  214. data/lib/cukunity/unity/component.rb +39 -0
  215. data/lib/cukunity/unity/gameobject.rb +53 -0
  216. data/lib/cukunity/unity/hint.rb +27 -0
  217. data/lib/cukunity/unity/json_container.rb +48 -0
  218. data/lib/cukunity/unity/level.rb +6 -0
  219. data/lib/cukunity/unity/scene.rb +18 -0
  220. data/lib/cukunity/unity/screen.rb +45 -0
  221. data/lib/cukunity/unity/screen_hint_methods.rb +61 -0
  222. data/lib/cukunity/unity/text_hint_methods.rb +17 -0
  223. data/lib/cukunity/unity.rb +11 -0
  224. data/lib/cukunity/utils.rb +56 -0
  225. data/lib/cukunity.rb +19 -0
  226. metadata +411 -0
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.gitmodules ADDED
File without changes
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'json', '>= 1.6.5'
4
+ gem 'term-ansicolor', '>= 1.0.6'
5
+
6
+ group :development do
7
+ gem 'rspec', '~> 2.8.0'
8
+ gem 'yard', '~> 0.7'
9
+ gem 'rdoc', '~> 3.12'
10
+ gem 'cucumber', '>= 0'
11
+ gem 'bundler', '~> 1.0.0'
12
+ gem 'jeweler', '~> 1.8.3'
13
+ gem 'reek', '~> 1.2.8'
14
+ gem 'roodi', '~> 2.1.0'
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,60 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ builder (3.0.0)
5
+ cucumber (1.1.4)
6
+ builder (>= 2.1.2)
7
+ diff-lcs (>= 1.1.2)
8
+ gherkin (~> 2.7.1)
9
+ json (>= 1.4.6)
10
+ term-ansicolor (>= 1.0.6)
11
+ diff-lcs (1.1.3)
12
+ gherkin (2.7.6)
13
+ json (>= 1.4.6)
14
+ git (1.2.5)
15
+ jeweler (1.8.3)
16
+ bundler (~> 1.0)
17
+ git (>= 1.2.5)
18
+ rake
19
+ rdoc
20
+ json (1.6.5)
21
+ rake (0.9.2.2)
22
+ rdoc (3.12)
23
+ json (~> 1.4)
24
+ reek (1.2.8)
25
+ ruby2ruby (~> 1.2)
26
+ ruby_parser (~> 2.0)
27
+ sexp_processor (~> 3.0)
28
+ roodi (2.1.0)
29
+ ruby_parser
30
+ rspec (2.8.0)
31
+ rspec-core (~> 2.8.0)
32
+ rspec-expectations (~> 2.8.0)
33
+ rspec-mocks (~> 2.8.0)
34
+ rspec-core (2.8.0)
35
+ rspec-expectations (2.8.0)
36
+ diff-lcs (~> 1.1.2)
37
+ rspec-mocks (2.8.0)
38
+ ruby2ruby (1.3.1)
39
+ ruby_parser (~> 2.0)
40
+ sexp_processor (~> 3.0)
41
+ ruby_parser (2.3.1)
42
+ sexp_processor (~> 3.0)
43
+ sexp_processor (3.0.10)
44
+ term-ansicolor (1.0.7)
45
+ yard (0.7.4)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ bundler (~> 1.0.0)
52
+ cucumber
53
+ jeweler (~> 1.8.3)
54
+ json (>= 1.6.5)
55
+ rdoc (~> 3.12)
56
+ reek (~> 1.2.8)
57
+ roodi (~> 2.1.0)
58
+ rspec (~> 2.8.0)
59
+ term-ansicolor (>= 1.0.6)
60
+ yard (~> 0.7)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Mario Freitas
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,214 @@
1
+ cukunity
2
+ ========
3
+
4
+ cukunity is an automation/testing framework that simplifies BDD testing of
5
+ UNITY 3D games.
6
+
7
+ ## Description
8
+
9
+ cukunity is a tool inspired by the principles of Behaviour Driven Development.
10
+ Cukunity is a portmanteau of "Cucumber" and "Unity", and as so it provides
11
+ helpers to play nicely with cucumber, although it can be used standalone for
12
+ automation purposes.
13
+
14
+ In short, cukunity provides:
15
+
16
+ * A platform-agnostic API to install, uninstall, and execute Unity3D games on real hardware (no simulators or emulators required).
17
+ * A platform-agnostic API for simulating touch and keyboard input on your Unity3D games.
18
+ * The `cukunity` executable to help you bootstrap your Unity3D Projects, and so on.
19
+ * Default step definitions and helpers for Cucumber.
20
+ * Default rake tasks with which you can run Cucumber easily from.
21
+
22
+ ## Limitations
23
+
24
+ Currently, the following limitations apply:
25
+
26
+ * Only Android 2.x and iOS 5.x are supported (in the future, it would be nice to have more platforms like Desktop/Flash/WebPlayer).
27
+ * iOS testing is only possible on MacOSX (since Xcode only runs on MacOSX).
28
+ * Currently, iOS testing will only work if you check the "Development Build" setting on the Build Settings window of your Unity project.
29
+ * Android testing is currently only possible on MacOSX, although this may change in the future with the inclusion of Windows/Linux (don't take this as a promise).
30
+
31
+ ## Requirements
32
+
33
+ * Ruby 1.9.x (you probably want to install it via [RVM](http://beginrescueend.com)).
34
+ * To use cukunity with cucumber, you need to install cucumber (e.g. `gem install cucumber`)
35
+ * Mac OS X 10.6 and above (tested on Snow Leopard but should work on Lion too).
36
+ * To test on iOS devices, you need [XCode
37
+ * 4.2](https://developer.apple.com/xcode/) or above (including the iOS SDK) and [mobiledevice](https://github.com/imkira/mobiledevice).
38
+ * To test on Android devices, you need [Android SDK](http://developer.android.com/sdk/) including the platform-tools package.
39
+
40
+ ## Installation
41
+
42
+ In order to install cukunity, first make sure you have Ruby 1.9.x installed, and then type the following:
43
+
44
+ ```
45
+ gem install cukunity
46
+ ```
47
+
48
+ If you prefer to live on the edge, get and install the latest code from the repository:
49
+
50
+ ```
51
+ git clone git://github.com/imkira/cukunity.git
52
+ cd cukunity
53
+ rake install
54
+ ```
55
+
56
+ ## Usage
57
+
58
+ ```
59
+ Usage: cukunity [options] <command>
60
+
61
+ Commands:
62
+ doctor Check your system for the required platform tools.
63
+ bootstrap <path> Bootstrap your Unity project.
64
+ features [<path>] Run cucumber against path containing feature files.
65
+
66
+ Options:
67
+ -v, --[no-]verbose Enable/Disable verbose mode.
68
+ --[no-]android Enable/Disable for Android development.
69
+ --[no-]ios Enable/Disable for Android development.
70
+ -h, --help This help screen.
71
+ ```
72
+
73
+ ### Checking your system for problems
74
+
75
+ After you install cukunity, please make sure you run `cukunity doctor`
76
+ to check your system for problems.
77
+ This command will check if you have the necessary tools in order to use
78
+ cukunity for iOS/Android testing. You can also pass `no-ios` or `no-android`
79
+ if you don't plan on testing on such platform.
80
+
81
+ ### Bootstraping your cukunity project
82
+
83
+ To bootstrap cukunity, make sure you type the following:
84
+
85
+ ```
86
+ cukunity bootstrap <path/to/your/Unity/project's/root/directory>
87
+ ```
88
+
89
+ This will generate the necessary files within `Assets/Plugins`.
90
+ After this, please make sure you drag and drop a prefab called `CukunityInstance.prefab`
91
+ on to the first scene of your Unity3D project. You don't need to worry about
92
+ what happens to the prefab you just dragged when loading other scenes, or to
93
+ place it in every scene of your project. That has already been taken care of!
94
+
95
+ Finally, just rebuild your Unity3D project for Android/iOS (for iOS, make sure
96
+ you check the "Development Build" setting on the Build Settings window of your
97
+ Unity project).
98
+
99
+ ### Running your cukunity features with cucumber
100
+
101
+ As an utility command, you can run your cukunity features via cucumber with:
102
+
103
+ ```
104
+ cukunity features <path/to/your/cucumber/features/directory>
105
+ ```
106
+
107
+ This command will `require 'cukunity/cucumber'` automatically for you,
108
+ and launch cucumber with the specified features directory as test input.
109
+ You will need to specify either `no-ios` or `no-android` to disable
110
+ testing on the specified platform.
111
+
112
+ ## Default Step Definitions
113
+
114
+ The following list of step definitions is already available via `cukunity features`
115
+ command (alternatively `require 'cukunity/cucumber'`), so you don't need to
116
+ make a copy to yourself. It may find it useful though to use it as reference or
117
+ to modify it to suit your needs.
118
+
119
+ * [Installing your Game](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/install_steps.rb)
120
+ * [Launching your Game](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/install_steps.rb)
121
+ * [Get Current Scene Information](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/get_scene_command_steps.rb)
122
+ * [Keyboard Input Simulation](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/keyboard_input_steps.rb)
123
+ * [Touch Input Simulation](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/touch_input_steps.rb)
124
+ * [Visible Object Selectors](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/select_visible_steps.rb)
125
+ * [Force Load Unity Level](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/load_level_command_steps.rb)
126
+
127
+ ### i18n Support
128
+
129
+ [i18n](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/i18n) support is also available.
130
+ Currently [Japanese](http://github.com/imkira/cukunity/blob/master/lib/cukunity/cucumber/step_definitions/i18n/ja) language is supported.
131
+
132
+ ## Sample Scenarios
133
+
134
+ The following is a sample of how you could use cukunity with Cucumber to
135
+ test a "Sokoban" game.
136
+
137
+ ```
138
+ Feature: Cukunity's Default Step Definitions Sample
139
+ In order to test Unity games using cukunity without having to reinvent the wheel
140
+ As a programmer
141
+ I want to be able to use cukunity's default step definitions
142
+
143
+ Background:
144
+ # Specify fixtures/sokoban.apk (Android) or fixtures/sokoban.app (iOS) as the target game.
145
+ Given I install the app "fixtures/sokoban"
146
+ # launch it on device
147
+ And I launch it
148
+ # You probably don't need this, but this will cause an Application.LoadLevel of "demo_title" level.
149
+ And I load the "demo_title" level
150
+
151
+ Scenario: Application finished launching
152
+ # Verbose: make sure it is running.
153
+ Then it should be running
154
+ # Verbose: make sure the "demo_title" level is running.
155
+ And it should be playing "demo_title" level
156
+ # Make sure "MainMenu" GameObject exists.
157
+ And I should have a GameObject named "MainMenu"
158
+ # Make sure "OptionsMenu" GameObject does not exist.
159
+ And I should not have a GameObject named "OptionsMenu"
160
+
161
+ Scenario: Clear game
162
+ # Tap the visible GameObject called "Play"
163
+ When I tap "Play"
164
+ # Tap the visible GameObject called "Up"
165
+ And I tap "Up"
166
+ # <ommited for simplicity>
167
+ # A GameObject called "GameClear" should be visible.
168
+ Then I should see "GameClear"
169
+ # A label showing it took us "40" steps should be visible.
170
+ And I should read "40"
171
+
172
+ Scenario: Set player name
173
+ # Tap the visible GameObject called "PlayerName"
174
+ When I tap "PlayerName"
175
+ # When the keyboard is displayed on screen, type "Super Player".
176
+ And I type "Super Player"
177
+ # Then, there should be a label showing the current player's name.
178
+ Then I should read "Super Player"
179
+
180
+ Scenario: Quit application by tap the "Quit" menu button
181
+ # Tap a visible GameObject called "Quit"
182
+ When I tap "Quit" and wait 3 seconds
183
+ # The application should not be running anymore.
184
+ Then it should not be running
185
+ ```
186
+
187
+ The original Unity project that includes the code of the game and cukunity support
188
+ is available [here](http://github.com/imkira/cukunity/blob/master/Unity).
189
+ The sample feature files can be found [here](http://github.com/imkira/cukunity/blob/master/features).
190
+
191
+ ## Documentation
192
+
193
+ TODO: place link to documentation.
194
+
195
+ ## Tutorial
196
+
197
+ TODO: place video here.
198
+
199
+ ## Contribute
200
+
201
+ * Found a bug?
202
+ * Want to contribute and add a new feature?
203
+
204
+ Please fork this project and send me a pull request!
205
+
206
+ ## License
207
+
208
+ cukunity is licensed under the MIT license:
209
+
210
+ www.opensource.org/licenses/MIT
211
+
212
+ ## Copyright
213
+
214
+ Copyright (c) 2012 Mario Freitas. See LICENSE.txt for further details.
data/Rakefile ADDED
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "cukunity"
18
+ gem.homepage = "http://github.com/imkira/cukunity"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{cukunity is an automation/testing framework that simplifies BDD testing of Unity 3D games.}
21
+ gem.description = %Q{cukunity is a tool inspired by the principles of Behaviour Driven Development. Cukunity is a portmanteau of "Cucumber" and "Unity", and as so it provides helpers to play nicely with cucumber, although it can be used standalone for automation. }
22
+ gem.email = "imkira@gmail.com"
23
+ gem.authors = ["Mario Freitas"]
24
+ # dependencies defined in Gemfile
25
+ gem.add_dependency 'json', '>= 1.6.5'
26
+ gem.add_dependency 'term-ansicolor', '>= 1.0.6'
27
+ end
28
+ Jeweler::RubygemsDotOrgTasks.new
29
+
30
+ require 'cucumber/rake/task'
31
+ namespace :features do
32
+ load File.join(File.dirname(__FILE__), 'lib/cukunity/tasks/cucumber.rake')
33
+ end
34
+
35
+ require 'reek/rake/task'
36
+ Reek::Rake::Task.new do |t|
37
+ t.fail_on_error = true
38
+ t.verbose = false
39
+ t.source_files = 'lib/**/*.rb'
40
+ end
41
+
42
+ require 'roodi'
43
+ require 'roodi_task'
44
+ RoodiTask.new do |t|
45
+ t.verbose = false
46
+ end
47
+
48
+ task :default => :spec
49
+
50
+ require 'yard'
51
+ YARD::Rake::YardocTask.new
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: dea5ec1f7cfa140208966f1ae39f30e8
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: a5e3c7cddeac8434390c49b4554ad4de
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: 294d9cfd510f448c48bffb15830d65c5
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: b9ce92f88c5054551a419c3dc96f9154
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: 245716ed6d6b34c8eb6b0f0cb045d349
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: e0c1621d587d148eebb29e19c54ebfbd
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: 6d2a7fa7adc514907913b709fc943b4d
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: 43049661c4511470fa71aad33e85ad48
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,28 @@
1
+ fileFormatVersion: 1
2
+ guid: 09485302c089b4248b1f5d79e71bf75c
3
+ TextureImporter:
4
+ importerVersion: 2
5
+ maxTextureSize: 1024
6
+ textureFormat: -3
7
+ grayscaleToAlpha: 0
8
+ npotScale: 0
9
+ generateCubemap: 0
10
+ isReadable: 0
11
+ textureType: 2
12
+ mipmaps:
13
+ generation: 0
14
+ correctGamma: 0
15
+ border: 0
16
+ filter: 0
17
+ fadeout: 0
18
+ fadeoutStart: 1
19
+ fadeoutEnd: 3
20
+ bumpmap:
21
+ generation: 0
22
+ bumpyness: 0.25
23
+ filter: 0
24
+ textureSettings:
25
+ filterMode: 0
26
+ anisoLevel: 1
27
+ mipmapBias: -1
28
+ wrapMode: 1
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 1
2
+ guid: 8e1e5144422744982863dd87298e939b
Binary file