cukunity 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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