cukunity 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitmodules +0 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +60 -0
- data/LICENSE.txt +20 -0
- data/README.md +214 -0
- data/Rakefile +51 -0
- data/Unity/Assets/Demo/Art/Buttons/down.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/down.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/left.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/left.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/ok.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/ok.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/options.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/options.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/play.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/play.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/quit.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/quit.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/retry.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/retry.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/right.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/right.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons/up.png +0 -0
- data/Unity/Assets/Demo/Art/Buttons/up.png.meta +28 -0
- data/Unity/Assets/Demo/Art/Buttons.meta +2 -0
- data/Unity/Assets/Demo/Art/clear.png +0 -0
- data/Unity/Assets/Demo/Art/clear.png.meta +28 -0
- data/Unity/Assets/Demo/Art/options.png +0 -0
- data/Unity/Assets/Demo/Art/options.png.meta +28 -0
- data/Unity/Assets/Demo/Art/sokoban.png +0 -0
- data/Unity/Assets/Demo/Art/sokoban.png.meta +28 -0
- data/Unity/Assets/Demo/Art.meta +2 -0
- data/Unity/Assets/Demo/Cubes/CrateCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/CrateCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/CrateCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/CrateCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes/FloorCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/FloorCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/FloorCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/FloorCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes/GoalCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/GoalCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/GoalCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/GoalCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes/PlayerCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/PlayerCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/PlayerCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/PlayerCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes/WallCube.mat +0 -0
- data/Unity/Assets/Demo/Cubes/WallCube.mat.meta +2 -0
- data/Unity/Assets/Demo/Cubes/WallCube.prefab +0 -0
- data/Unity/Assets/Demo/Cubes/WallCube.prefab.meta +2 -0
- data/Unity/Assets/Demo/Cubes.meta +2 -0
- data/Unity/Assets/Demo/Resources/MainMenu.prefab +0 -0
- data/Unity/Assets/Demo/Resources/MainMenu.prefab.meta +2 -0
- data/Unity/Assets/Demo/Resources/OptionsMenu.prefab +0 -0
- data/Unity/Assets/Demo/Resources/OptionsMenu.prefab.meta +2 -0
- data/Unity/Assets/Demo/Resources.meta +2 -0
- data/Unity/Assets/Demo/Scripts/CameraController.js +18 -0
- data/Unity/Assets/Demo/Scripts/CameraController.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/EnterPlayerName.js +21 -0
- data/Unity/Assets/Demo/Scripts/EnterPlayerName.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameLeftButton.js +18 -0
- data/Unity/Assets/Demo/Scripts/GameLeftButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameQuitButton.js +6 -0
- data/Unity/Assets/Demo/Scripts/GameQuitButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameRetryButton.js +7 -0
- data/Unity/Assets/Demo/Scripts/GameRetryButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameRightButton.js +18 -0
- data/Unity/Assets/Demo/Scripts/GameRightButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/GameUpButton.js +18 -0
- data/Unity/Assets/Demo/Scripts/GameUpButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/OnTouchGUIElementDown.js +34 -0
- data/Unity/Assets/Demo/Scripts/OnTouchGUIElementDown.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/PlayerData.js +3 -0
- data/Unity/Assets/Demo/Scripts/PlayerData.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/SokobanController.js +240 -0
- data/Unity/Assets/Demo/Scripts/SokobanController.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TakeScreenShot.js +26 -0
- data/Unity/Assets/Demo/Scripts/TakeScreenShot.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TitleOptionsButton.js +8 -0
- data/Unity/Assets/Demo/Scripts/TitleOptionsButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TitleOptionsOkButton.js +8 -0
- data/Unity/Assets/Demo/Scripts/TitleOptionsOkButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TitlePlayButton.js +6 -0
- data/Unity/Assets/Demo/Scripts/TitlePlayButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/TitleQuitButton.js +7 -0
- data/Unity/Assets/Demo/Scripts/TitleQuitButton.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/UpdateMovesLabel.js +26 -0
- data/Unity/Assets/Demo/Scripts/UpdateMovesLabel.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts/UpdatePlayerName.js +14 -0
- data/Unity/Assets/Demo/Scripts/UpdatePlayerName.js.meta +2 -0
- data/Unity/Assets/Demo/Scripts.meta +2 -0
- data/Unity/Assets/Demo/demo_game.unity +0 -0
- data/Unity/Assets/Demo/demo_game.unity.meta +2 -0
- data/Unity/Assets/Demo/demo_title.unity +0 -0
- data/Unity/Assets/Demo/demo_title.unity.meta +2 -0
- data/Unity/Assets/Demo.meta +2 -0
- data/Unity/Assets/Plugins/CukunityInstance.prefab +0 -0
- data/Unity/Assets/Plugins/CukunityInstance.prefab.meta +2 -0
- data/Unity/Assets/Plugins/CukunityServer.cs +871 -0
- data/Unity/Assets/Plugins/CukunityServer.cs.meta +2 -0
- data/Unity/Assets/Plugins/JsonFx.Json.dll +0 -0
- data/Unity/Assets/Plugins/JsonFx.Json.dll.meta +2 -0
- data/Unity/Assets/Plugins/iOS/CukunityServer.mm +242 -0
- data/Unity/Assets/Plugins/iOS/CukunityServer.mm.meta +2 -0
- data/Unity/Assets/Plugins/iOS.meta +2 -0
- data/Unity/Assets/Plugins.meta +2 -0
- data/Unity/Library/AudioManager.asset +0 -0
- data/Unity/Library/BuildSettings.asset +0 -0
- data/Unity/Library/DynamicsManager.asset +0 -0
- data/Unity/Library/EditorBuildSettings.asset +0 -0
- data/Unity/Library/EditorSettings.asset +0 -0
- data/Unity/Library/EditorUserBuildSettings.asset +0 -0
- data/Unity/Library/EditorUserSettings.asset +0 -0
- data/Unity/Library/InputManager.asset +0 -0
- data/Unity/Library/InspectorExpandedItems.asset +0 -0
- data/Unity/Library/MonoManager.asset +0 -0
- data/Unity/Library/NetworkManager.asset +0 -0
- data/Unity/Library/ProjectSettings.asset +0 -0
- data/Unity/Library/QualitySettings.asset +0 -0
- data/Unity/Library/TagManager.asset +0 -0
- data/Unity/Library/TimeManager.asset +0 -0
- data/Unity/ProjectSettings/AudioManager.asset +0 -0
- data/Unity/ProjectSettings/DynamicsManager.asset +0 -0
- data/Unity/ProjectSettings/EditorBuildSettings.asset +0 -0
- data/Unity/ProjectSettings/EditorSettings.asset +0 -0
- data/Unity/ProjectSettings/InputManager.asset +0 -0
- data/Unity/ProjectSettings/NavMeshLayers.asset +0 -0
- data/Unity/ProjectSettings/NetworkManager.asset +0 -0
- data/Unity/ProjectSettings/ProjectSettings.asset +0 -0
- data/Unity/ProjectSettings/QualitySettings.asset +0 -0
- data/Unity/ProjectSettings/TagManager.asset +0 -0
- data/Unity/ProjectSettings/TimeManager.asset +0 -0
- data/VERSION +1 -0
- data/bin/cukunity +7 -0
- data/cukunity.gemspec +298 -0
- data/features/get_scene_command.feature +39 -0
- data/features/i18n/ja/sokoban_clear.feature +109 -0
- data/features/install.feature +23 -0
- data/features/keyboard_input.feature +26 -0
- data/features/load_level_command.feature +36 -0
- data/features/run.feature +33 -0
- data/features/select_visible.feature +29 -0
- data/features/support/env.rb +11 -0
- data/features/touch_input.feature +96 -0
- data/lib/cukunity/cli/argument_parser.rb +103 -0
- data/lib/cukunity/cli/bootstrap_command.rb +39 -0
- data/lib/cukunity/cli/doctor_command.rb +150 -0
- data/lib/cukunity/cli/features_command.rb +35 -0
- data/lib/cukunity/cli/main.rb +18 -0
- data/lib/cukunity/cli/options.rb +8 -0
- data/lib/cukunity/cli.rb +11 -0
- data/lib/cukunity/cucumber/step_definitions/get_scene_command_steps.rb +37 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/get_scene_command_steps.rb +37 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/install_steps.rb +25 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/keyboard_input_steps.rb +17 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/load_level_command_steps.rb +17 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/run_steps.rb +25 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/select_visible_steps.rb +9 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja/touch_input_steps.rb +19 -0
- data/lib/cukunity/cucumber/step_definitions/i18n/ja.rb +9 -0
- data/lib/cukunity/cucumber/step_definitions/install_steps.rb +33 -0
- data/lib/cukunity/cucumber/step_definitions/keyboard_input_steps.rb +13 -0
- data/lib/cukunity/cucumber/step_definitions/load_level_command_steps.rb +17 -0
- data/lib/cukunity/cucumber/step_definitions/run_steps.rb +32 -0
- data/lib/cukunity/cucumber/step_definitions/select_visible_steps.rb +15 -0
- data/lib/cukunity/cucumber/step_definitions/touch_input_steps.rb +18 -0
- data/lib/cukunity/cucumber/support/platform_helpers.rb +105 -0
- data/lib/cukunity/cucumber/support/spec_helpers.rb +21 -0
- data/lib/cukunity/cucumber/support/transforms.rb +5 -0
- data/lib/cukunity/cucumber/support/unity_helpers.rb +35 -0
- data/lib/cukunity/cucumber.rb +28 -0
- data/lib/cukunity/drivers/android/app.rb +43 -0
- data/lib/cukunity/drivers/android/appkiller/.gitignore +9 -0
- data/lib/cukunity/drivers/android/appkiller/AndroidManifest.xml +17 -0
- data/lib/cukunity/drivers/android/appkiller/ant.properties +17 -0
- data/lib/cukunity/drivers/android/appkiller/build.xml +85 -0
- data/lib/cukunity/drivers/android/appkiller/proguard.cfg +40 -0
- data/lib/cukunity/drivers/android/appkiller/project.properties +11 -0
- data/lib/cukunity/drivers/android/appkiller/res/layout/main.xml +13 -0
- data/lib/cukunity/drivers/android/appkiller/res/values/strings.xml +4 -0
- data/lib/cukunity/drivers/android/appkiller/src/cukunity/appkiller/AppKiller.java +29 -0
- data/lib/cukunity/drivers/android/keyboard_input.rb +149 -0
- data/lib/cukunity/drivers/android/keycodes.rb +531 -0
- data/lib/cukunity/drivers/android/monkey_client.rb +65 -0
- data/lib/cukunity/drivers/android/process.rb +103 -0
- data/lib/cukunity/drivers/android/touch_input.rb +24 -0
- data/lib/cukunity/drivers/android/tunnel_client_methods.rb +22 -0
- data/lib/cukunity/drivers/android/unity_client.rb +27 -0
- data/lib/cukunity/drivers/android/utils.rb +50 -0
- data/lib/cukunity/drivers/android.rb +9 -0
- data/lib/cukunity/drivers/iOS/app.rb +32 -0
- data/lib/cukunity/drivers/iOS/keyboard_input.rb +104 -0
- data/lib/cukunity/drivers/iOS/process.rb +42 -0
- data/lib/cukunity/drivers/iOS/touch_input.rb +18 -0
- data/lib/cukunity/drivers/iOS/tunnel_client_methods.rb +27 -0
- data/lib/cukunity/drivers/iOS/uiautomation.rb +97 -0
- data/lib/cukunity/drivers/iOS/uiautomation_master.rb +152 -0
- data/lib/cukunity/drivers/iOS/uiautomation_slave.js +238 -0
- data/lib/cukunity/drivers/iOS/uiautomation_slave.rb +41 -0
- data/lib/cukunity/drivers/iOS/unity_client.rb +27 -0
- data/lib/cukunity/drivers/iOS/utils.rb +46 -0
- data/lib/cukunity/drivers/iOS.rb +9 -0
- data/lib/cukunity/exceptions.rb +24 -0
- data/lib/cukunity/keyboard_input_methods.rb +35 -0
- data/lib/cukunity/request_line_response_client_methods.rb +80 -0
- data/lib/cukunity/tasks/cucumber.rake +22 -0
- data/lib/cukunity/touch_input_methods.rb +19 -0
- data/lib/cukunity/unity/client_methods.rb +46 -0
- data/lib/cukunity/unity/command_facade.rb +67 -0
- data/lib/cukunity/unity/component.rb +39 -0
- data/lib/cukunity/unity/gameobject.rb +53 -0
- data/lib/cukunity/unity/hint.rb +27 -0
- data/lib/cukunity/unity/json_container.rb +48 -0
- data/lib/cukunity/unity/level.rb +6 -0
- data/lib/cukunity/unity/scene.rb +18 -0
- data/lib/cukunity/unity/screen.rb +45 -0
- data/lib/cukunity/unity/screen_hint_methods.rb +61 -0
- data/lib/cukunity/unity/text_hint_methods.rb +17 -0
- data/lib/cukunity/unity.rb +11 -0
- data/lib/cukunity/utils.rb +56 -0
- data/lib/cukunity.rb +19 -0
- metadata +411 -0
data/.document
ADDED
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
|
Binary file
|
@@ -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
|
Binary file
|
@@ -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
|
Binary file
|
@@ -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
|
Binary file
|
@@ -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
|
Binary file
|
@@ -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
|
Binary file
|
@@ -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
|
Binary file
|
@@ -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
|
Binary file
|
@@ -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
|
Binary file
|
@@ -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
|
Binary file
|