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.
- 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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Feature: Get Scene Command
|
|
2
|
+
In order to inspect the state of a Unity game
|
|
3
|
+
As a programmer
|
|
4
|
+
I want to be able to get the current scene contents
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I install the app "fixtures/sokoban"
|
|
8
|
+
And I launch it
|
|
9
|
+
And I load the "demo_title" level
|
|
10
|
+
|
|
11
|
+
Scenario: Get game object by name (short form)
|
|
12
|
+
Then I should have a "Main Camera"
|
|
13
|
+
|
|
14
|
+
Scenario: Get game object by name (full form)
|
|
15
|
+
Then I should have a GameObject named "Main Camera"
|
|
16
|
+
|
|
17
|
+
Scenario: Get component on a game object (direct form)
|
|
18
|
+
Then I should have a Camera on "Main Camera"
|
|
19
|
+
|
|
20
|
+
Scenario: Get component on a game object (indirect form)
|
|
21
|
+
Then I should have a GameObject named "Main Camera"
|
|
22
|
+
And it should have a Camera component
|
|
23
|
+
|
|
24
|
+
Scenario: Check boolean properties on a game object
|
|
25
|
+
Then I should have a GameObject named "Main Camera"
|
|
26
|
+
And it should be "active"
|
|
27
|
+
|
|
28
|
+
Scenario: Check boolean properties on a component
|
|
29
|
+
Then I should have a Camera named "Main Camera"
|
|
30
|
+
And it should be "enabled"
|
|
31
|
+
|
|
32
|
+
Scenario: Check any property on a game object as string
|
|
33
|
+
Then I should have a GameObject named "Main Camera"
|
|
34
|
+
And it should have "active" property as "true"
|
|
35
|
+
|
|
36
|
+
Scenario: Check any property on a component as string
|
|
37
|
+
Then I should have a Camera named "Main Camera"
|
|
38
|
+
And it should have "enabled" property as "true"
|
|
39
|
+
And it should have "renderingPath" property as "UsePlayerSettings"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# language: ja
|
|
2
|
+
フィーチャ: ゲームクリア
|
|
3
|
+
倉庫番のプレイヤーとして、
|
|
4
|
+
レベルを次から次へチャレンジしていくために
|
|
5
|
+
人間を操作して荷物を目的地まで運んでレベルをクリアしたい。
|
|
6
|
+
|
|
7
|
+
背景:
|
|
8
|
+
前提 "fixtures/sokoban"からゲームをインストールしている
|
|
9
|
+
かつ ゲームを起動している
|
|
10
|
+
かつ レベル"demo_title"をロードしている
|
|
11
|
+
|
|
12
|
+
シナリオ: ゲームが起動する
|
|
13
|
+
もし タップした後に発生する遅延時間を0.5秒に変更したら
|
|
14
|
+
ならば アプリがインストールされていること
|
|
15
|
+
かつ アプリが動作していること
|
|
16
|
+
かつ アプリがフォアグラウンドで動作していること
|
|
17
|
+
かつ レベル"demo_title"がロードされていること
|
|
18
|
+
かつ "OptionsMenu"が存在していないこと
|
|
19
|
+
かつ "MainMenu"というGameObjectが存在していること
|
|
20
|
+
かつ "Main Camera"というCameraが存在していること
|
|
21
|
+
かつ その中にTransformコンポーネントが存在していること
|
|
22
|
+
かつ その中にTransformが存在していること
|
|
23
|
+
かつ その中にCameraが存在していること
|
|
24
|
+
かつ その中にenabledというプロパティーが存在していること
|
|
25
|
+
かつ その中にenabledが有効になっていること
|
|
26
|
+
かつ その中にrenderingPathが"UsePlayerSettings"と一致していること
|
|
27
|
+
|
|
28
|
+
シナリオ: パーフェクトでレベル1をクリアする
|
|
29
|
+
もし タップした後に発生する遅延時間を0.5秒に変更したら
|
|
30
|
+
かつ "Play"をタップしたら
|
|
31
|
+
かつ "Up"をタップしたら
|
|
32
|
+
かつ "Up"をタップしたら
|
|
33
|
+
かつ "Up"をタップしたら
|
|
34
|
+
かつ "Right"をタップしたら
|
|
35
|
+
かつ "Up"をタップしたら
|
|
36
|
+
かつ "Left"をタップしたら
|
|
37
|
+
かつ "Up"をタップしたら
|
|
38
|
+
かつ "Up"をタップしたら
|
|
39
|
+
かつ "Left"をタップしたら
|
|
40
|
+
かつ "Up"をタップしたら
|
|
41
|
+
かつ "Left"をタップしたら
|
|
42
|
+
かつ "Up"をタップしたら
|
|
43
|
+
かつ "Left"をタップしたら
|
|
44
|
+
かつ "Up"をタップしたら
|
|
45
|
+
かつ "Right"をタップしたら
|
|
46
|
+
かつ "Up"をタップしたら
|
|
47
|
+
かつ "Up"をタップしたら
|
|
48
|
+
かつ "Right"をタップしたら
|
|
49
|
+
かつ "Up"をタップしたら
|
|
50
|
+
かつ "Up"をタップしたら
|
|
51
|
+
かつ "Right"をタップしたら
|
|
52
|
+
かつ "Up"をタップしたら
|
|
53
|
+
かつ "Right"をタップしたら
|
|
54
|
+
かつ "Up"をタップしたら
|
|
55
|
+
かつ "Right"をタップしたら
|
|
56
|
+
かつ "Up"をタップしたら
|
|
57
|
+
かつ "Left"をタップしたら
|
|
58
|
+
かつ "Up"をタップしたら
|
|
59
|
+
かつ "Left"をタップしたら
|
|
60
|
+
かつ "Up"をタップしたら
|
|
61
|
+
かつ "Left"をタップしたら
|
|
62
|
+
かつ "Up"をタップしたら
|
|
63
|
+
かつ "Left"をタップしたら
|
|
64
|
+
かつ "Up"をタップしたら
|
|
65
|
+
かつ "Up"をタップしたら
|
|
66
|
+
かつ "Up"をタップしたら
|
|
67
|
+
かつ "Left"をタップしたら
|
|
68
|
+
かつ "Up"をタップしたら
|
|
69
|
+
かつ "Left"をタップしたら
|
|
70
|
+
かつ "Up"をタップしたら
|
|
71
|
+
かつ "Up"をタップしたら
|
|
72
|
+
かつ "Left"をタップしたら
|
|
73
|
+
かつ "Up"をタップしたら
|
|
74
|
+
かつ "Right"をタップしたら
|
|
75
|
+
かつ "Up"をタップしたら
|
|
76
|
+
かつ "Up"をタップしたら
|
|
77
|
+
かつ "Up"をタップしたら
|
|
78
|
+
かつ "Right"をタップしたら
|
|
79
|
+
かつ "Up"をタップしたら
|
|
80
|
+
かつ "Up"をタップしたら
|
|
81
|
+
かつ "Right"をタップしたら
|
|
82
|
+
かつ "Up"をタップしたら
|
|
83
|
+
かつ "Right"をタップしたら
|
|
84
|
+
かつ "Up"をタップしたら
|
|
85
|
+
かつ "Right"をタップしたら
|
|
86
|
+
かつ "Up"をタップしたら
|
|
87
|
+
かつ "Left"をタップしたら
|
|
88
|
+
かつ "Up"をタップしたら
|
|
89
|
+
かつ "Left"をタップしたら
|
|
90
|
+
かつ "Up"をタップしたら
|
|
91
|
+
かつ "Up"をタップしたら
|
|
92
|
+
かつ "Up"をタップしたら
|
|
93
|
+
かつ "Left"をタップしたら
|
|
94
|
+
かつ "Up"をタップしたら
|
|
95
|
+
かつ "Left"をタップしたら
|
|
96
|
+
かつ "Up"をタップしたら
|
|
97
|
+
ならば "GameClear"を表示していること
|
|
98
|
+
かつ "40"と表示していること
|
|
99
|
+
|
|
100
|
+
@wip
|
|
101
|
+
シナリオ: Optionsメニューにてプレイヤー名を変更する
|
|
102
|
+
もし "Options"をタップしたら
|
|
103
|
+
かつ "PlayerName"をタップしたら
|
|
104
|
+
かつ "Super Player"と入力したら
|
|
105
|
+
ならば "Super Player"と表示していること
|
|
106
|
+
|
|
107
|
+
シナリオ: ゲームをQuitボタンから終了する
|
|
108
|
+
もし "Quit"をタップして3秒待ったら
|
|
109
|
+
ならば アプリが動作していないこと
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Feature: Install application
|
|
2
|
+
In order to test Unity apps
|
|
3
|
+
As a programmer
|
|
4
|
+
I must be able install them first
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I uninstall the app "fixtures/sokoban"
|
|
8
|
+
|
|
9
|
+
Scenario: Direct uninstall
|
|
10
|
+
Then it should not be installed
|
|
11
|
+
|
|
12
|
+
Scenario: Clean install
|
|
13
|
+
Given I install it
|
|
14
|
+
Then it should be installed
|
|
15
|
+
|
|
16
|
+
Scenario: Reinstall
|
|
17
|
+
Given I reinstall it
|
|
18
|
+
Then it should be installed
|
|
19
|
+
|
|
20
|
+
Scenario: Install then uninstall
|
|
21
|
+
Given I install the app "fixtures/sokoban"
|
|
22
|
+
And I uninstall it
|
|
23
|
+
Then it should not be installed
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Feature: Keyboard Input
|
|
2
|
+
In order to test a game as a human player would do
|
|
3
|
+
As a programmer
|
|
4
|
+
I want to be able to simulate keyboard input events
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I install the app "fixtures/sokoban"
|
|
8
|
+
And I relaunch it
|
|
9
|
+
And I tap "Options"
|
|
10
|
+
|
|
11
|
+
Scenario: Application finished launching
|
|
12
|
+
Then I should read "PLAYER NAME:"
|
|
13
|
+
And I should not read "Super Player"
|
|
14
|
+
And I should read "Guest"
|
|
15
|
+
|
|
16
|
+
Scenario: Set player name
|
|
17
|
+
When I tap "PlayerName"
|
|
18
|
+
And I type "Super Player" using "InputMethodServiceGlue"
|
|
19
|
+
Then I should read "Super Player"
|
|
20
|
+
|
|
21
|
+
Scenario: Player name is displayed during play
|
|
22
|
+
When I tap "PlayerName"
|
|
23
|
+
And I append "Player" using "InputMethodServiceGlue"
|
|
24
|
+
And I tap "Ok" and wait 1 second
|
|
25
|
+
And I tap "Play" and wait 1 second
|
|
26
|
+
Then I should read "GuestPlayer"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Feature: Load Level Command
|
|
2
|
+
In order to test Unity games faster
|
|
3
|
+
As a programmer
|
|
4
|
+
I want to be able to force the loading of a game level
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I install the app "fixtures/sokoban.apk"
|
|
8
|
+
And I launch it
|
|
9
|
+
|
|
10
|
+
Scenario: Reload scene (using level name)
|
|
11
|
+
When I load the "demo_title" level
|
|
12
|
+
Then it should be playing "demo_title" level
|
|
13
|
+
And it should not be playing "demo_game" level
|
|
14
|
+
Then it should be playing level 0
|
|
15
|
+
And it should not be playing level 1
|
|
16
|
+
|
|
17
|
+
Scenario: Reload scene (using level number)
|
|
18
|
+
When I load level 0
|
|
19
|
+
Then it should be playing level 0
|
|
20
|
+
And it should not be playing level 1
|
|
21
|
+
And it should be playing "demo_title" level
|
|
22
|
+
And it should not be playing "demo_game" level
|
|
23
|
+
|
|
24
|
+
Scenario: Load different scene(using level name)
|
|
25
|
+
When I load the "demo_game" level
|
|
26
|
+
Then it should be playing "demo_game" level
|
|
27
|
+
And it should not be playing "demo_title" level
|
|
28
|
+
And it should be playing level 1
|
|
29
|
+
And it should not be playing level 0
|
|
30
|
+
|
|
31
|
+
Scenario: Load different scene(using level number)
|
|
32
|
+
When I load level 1
|
|
33
|
+
Then it should be playing level 1
|
|
34
|
+
And it should not be playing level 0
|
|
35
|
+
And it should be playing "demo_game" level
|
|
36
|
+
And it should not be playing "demo_title" level
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
Feature: Run application
|
|
2
|
+
In order to test Unity apps
|
|
3
|
+
As a programmer
|
|
4
|
+
I must be able run/stop them first
|
|
5
|
+
|
|
6
|
+
Scenario: Clean launch
|
|
7
|
+
Given I reinstall the app "fixtures/sokoban"
|
|
8
|
+
And I launch it
|
|
9
|
+
Then it should be running
|
|
10
|
+
And it should be running on screen
|
|
11
|
+
|
|
12
|
+
Scenario: Launch non installed app
|
|
13
|
+
Given I uninstall the app "fixtures/sokoban"
|
|
14
|
+
And I launch it
|
|
15
|
+
Then it should be running
|
|
16
|
+
|
|
17
|
+
Scenario: Relaunch non running app
|
|
18
|
+
Given I reinstall the app "fixtures/sokoban"
|
|
19
|
+
And I relaunch it
|
|
20
|
+
Then it should be running
|
|
21
|
+
And it should be running on screen
|
|
22
|
+
|
|
23
|
+
Scenario: Relaunch
|
|
24
|
+
Given I reinstall the app "fixtures/sokoban"
|
|
25
|
+
And I launch it
|
|
26
|
+
And I relaunch it
|
|
27
|
+
Then it should be running
|
|
28
|
+
And it should be running on screen
|
|
29
|
+
|
|
30
|
+
Scenario: Relaunch non installed app
|
|
31
|
+
Given I uninstall the app "fixtures/sokoban"
|
|
32
|
+
And I relaunch it
|
|
33
|
+
Then it should be running
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Feature: Select Visible Objects
|
|
2
|
+
In order to inspect the state of a Unity game
|
|
3
|
+
As a programmer
|
|
4
|
+
I want to be able select visible objects in the game scene
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I install the app "fixtures/sokoban"
|
|
8
|
+
And I relaunch it
|
|
9
|
+
|
|
10
|
+
Scenario: Application displays main menu
|
|
11
|
+
Then I should see "Play"
|
|
12
|
+
And I should see "Options"
|
|
13
|
+
And I should see "Quit"
|
|
14
|
+
But I should not see "Ok"
|
|
15
|
+
|
|
16
|
+
Scenario: Options menu displays labels
|
|
17
|
+
When I tap "Options" and wait 1 second
|
|
18
|
+
Then I should read "PLAYER NAME:"
|
|
19
|
+
|
|
20
|
+
Scenario: Play scene displays buttons and labels
|
|
21
|
+
When I tap "Play" and wait 1 second
|
|
22
|
+
Then I should see "Left"
|
|
23
|
+
And I should see "Up"
|
|
24
|
+
And I should see "Right"
|
|
25
|
+
And I should see "Quit"
|
|
26
|
+
And I should see "Retry"
|
|
27
|
+
And I should not see "GameClear"
|
|
28
|
+
And I should read "Guest"
|
|
29
|
+
And I should read "0"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
begin
|
|
3
|
+
Bundler.setup(:default, :development)
|
|
4
|
+
rescue Bundler::BundlerError => e
|
|
5
|
+
$stderr.puts e.message
|
|
6
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
|
7
|
+
exit e.status_code
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
|
11
|
+
require 'cukunity/cucumber'
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
Feature: Touch Input
|
|
2
|
+
In order to test a game as a human player would do
|
|
3
|
+
As a programmer
|
|
4
|
+
I want to be able to simulate touch input events
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I install the app "fixtures/sokoban"
|
|
8
|
+
And I launch it
|
|
9
|
+
And I load the "demo_title" level
|
|
10
|
+
|
|
11
|
+
Scenario: Application finished launching
|
|
12
|
+
Then it should be running
|
|
13
|
+
And it should be playing "demo_title" level
|
|
14
|
+
And I should have a GameObject named "MainMenu"
|
|
15
|
+
And I should not have a GameObject named "OptionsMenu"
|
|
16
|
+
|
|
17
|
+
Scenario: Clear game
|
|
18
|
+
When I set the default tap delay to 0.5 seconds
|
|
19
|
+
And I tap "Play"
|
|
20
|
+
And I tap "Up"
|
|
21
|
+
And I tap "Up"
|
|
22
|
+
And I tap "Up"
|
|
23
|
+
And I tap "Right"
|
|
24
|
+
And I tap "Up"
|
|
25
|
+
And I tap "Left"
|
|
26
|
+
And I tap "Up"
|
|
27
|
+
And I tap "Up"
|
|
28
|
+
And I tap "Left"
|
|
29
|
+
And I tap "Up"
|
|
30
|
+
And I tap "Left"
|
|
31
|
+
And I tap "Up"
|
|
32
|
+
And I tap "Left"
|
|
33
|
+
And I tap "Up"
|
|
34
|
+
And I tap "Right"
|
|
35
|
+
And I tap "Up"
|
|
36
|
+
And I tap "Up"
|
|
37
|
+
And I tap "Right"
|
|
38
|
+
And I tap "Up"
|
|
39
|
+
And I tap "Up"
|
|
40
|
+
And I tap "Right"
|
|
41
|
+
And I tap "Up"
|
|
42
|
+
And I tap "Right"
|
|
43
|
+
And I tap "Up"
|
|
44
|
+
And I tap "Right"
|
|
45
|
+
And I tap "Up"
|
|
46
|
+
And I tap "Left"
|
|
47
|
+
And I tap "Up"
|
|
48
|
+
And I tap "Left"
|
|
49
|
+
And I tap "Up"
|
|
50
|
+
And I tap "Left"
|
|
51
|
+
And I tap "Up"
|
|
52
|
+
And I tap "Left"
|
|
53
|
+
And I tap "Up"
|
|
54
|
+
And I tap "Up"
|
|
55
|
+
And I tap "Up"
|
|
56
|
+
And I tap "Left"
|
|
57
|
+
And I tap "Up"
|
|
58
|
+
And I tap "Left"
|
|
59
|
+
And I tap "Up"
|
|
60
|
+
And I tap "Up"
|
|
61
|
+
And I tap "Left"
|
|
62
|
+
And I tap "Up"
|
|
63
|
+
And I tap "Right"
|
|
64
|
+
And I tap "Up"
|
|
65
|
+
And I tap "Up"
|
|
66
|
+
And I tap "Up"
|
|
67
|
+
And I tap "Right"
|
|
68
|
+
And I tap "Up"
|
|
69
|
+
And I tap "Up"
|
|
70
|
+
And I tap "Right"
|
|
71
|
+
And I tap "Up"
|
|
72
|
+
And I tap "Right"
|
|
73
|
+
And I tap "Up"
|
|
74
|
+
And I tap "Right"
|
|
75
|
+
And I tap "Up"
|
|
76
|
+
And I tap "Left"
|
|
77
|
+
And I tap "Up"
|
|
78
|
+
And I tap "Left"
|
|
79
|
+
And I tap "Up"
|
|
80
|
+
And I tap "Up"
|
|
81
|
+
And I tap "Up"
|
|
82
|
+
And I tap "Left"
|
|
83
|
+
And I tap "Up"
|
|
84
|
+
And I tap "Left"
|
|
85
|
+
And I tap "Up"
|
|
86
|
+
Then I should see "GameClear"
|
|
87
|
+
And I should read "40"
|
|
88
|
+
|
|
89
|
+
Scenario: Quit application by tap the "Quit" menu button
|
|
90
|
+
When I tap "Quit" and wait 3 seconds
|
|
91
|
+
Then it should not be running
|
|
92
|
+
|
|
93
|
+
Scenario: Enter options menu
|
|
94
|
+
When I tap "Options" and wait 1 second
|
|
95
|
+
Then I should have a GameObject named "OptionsMenu"
|
|
96
|
+
And I should not have a GameObject named "MainMenu"
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module Cukunity
|
|
4
|
+
module CLI
|
|
5
|
+
class ArgumentParser
|
|
6
|
+
attr_reader :args
|
|
7
|
+
attr_reader :remaining_args
|
|
8
|
+
attr_reader :options
|
|
9
|
+
attr_reader :command
|
|
10
|
+
|
|
11
|
+
def self.parse(args)
|
|
12
|
+
parser = new(args)
|
|
13
|
+
parser.parse
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def initialize(args)
|
|
17
|
+
@args = args.dup
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def parse
|
|
21
|
+
parse_options
|
|
22
|
+
parse_command
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
def abort_with_msg(msg)
|
|
27
|
+
abort ["Error: #{msg}", @parser].join("\n\n")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def parse_options
|
|
31
|
+
# default options
|
|
32
|
+
defaults =
|
|
33
|
+
{
|
|
34
|
+
:verbose => true,
|
|
35
|
+
:ios => true,
|
|
36
|
+
:android => true,
|
|
37
|
+
:help => false
|
|
38
|
+
}
|
|
39
|
+
options = Cukunity::CLI::Options.new(defaults)
|
|
40
|
+
|
|
41
|
+
@remaining_args = @args.dup
|
|
42
|
+
@parser = ::OptionParser.new do |opts|
|
|
43
|
+
opts.banner = 'Usage: cukunity [options] <command>'
|
|
44
|
+
|
|
45
|
+
opts.separator ''
|
|
46
|
+
opts.separator 'Commands:'
|
|
47
|
+
opts.separator 'doctor Check your system for the required platform tools.'
|
|
48
|
+
opts.separator 'bootstrap <path> Bootstrap your Unity project.'
|
|
49
|
+
opts.separator 'features [<path>] Run cucumber against path containing feature files.'
|
|
50
|
+
|
|
51
|
+
opts.separator ''
|
|
52
|
+
opts.separator 'Options:'
|
|
53
|
+
|
|
54
|
+
# --verbose
|
|
55
|
+
opts.on('-v', '--[no-]verbose', 'Enable/Disable verbose mode.') do |v|
|
|
56
|
+
options.verbose = v
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# --android
|
|
60
|
+
opts.on('--[no-]android', 'Enable/Disable for Android development.') do |use|
|
|
61
|
+
options.android = use
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# --ios
|
|
65
|
+
opts.on('--[no-]ios', 'Enable/Disable for Android development.') do |use|
|
|
66
|
+
options.ios = use
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# --help
|
|
70
|
+
opts.on('-h', '--help', 'This help screen.') do
|
|
71
|
+
options.help = true
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
begin
|
|
76
|
+
# parse and return options
|
|
77
|
+
@parser.parse!(@remaining_args)
|
|
78
|
+
rescue ::OptionParser::ParseError => err
|
|
79
|
+
abort_with_msg err
|
|
80
|
+
end
|
|
81
|
+
@options = options
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def parse_command
|
|
85
|
+
@command = @remaining_args.shift
|
|
86
|
+
if options.help or @command.nil?
|
|
87
|
+
puts @parser
|
|
88
|
+
return nil
|
|
89
|
+
end
|
|
90
|
+
case @command.downcase
|
|
91
|
+
when 'doctor'
|
|
92
|
+
Cukunity::CLI::DoctorCommand.new(self)
|
|
93
|
+
when 'bootstrap'
|
|
94
|
+
Cukunity::CLI::BootstrapCommand.new(self)
|
|
95
|
+
when 'features'
|
|
96
|
+
Cukunity::CLI::FeaturesCommand.new(self)
|
|
97
|
+
else
|
|
98
|
+
abort_with_msg %Q[Error: Command "#{@command}" is unknown.]
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'pathname'
|
|
3
|
+
|
|
4
|
+
module Cukunity
|
|
5
|
+
module CLI
|
|
6
|
+
class BootstrapCommand
|
|
7
|
+
def initialize(parser)
|
|
8
|
+
@parser = parser
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def execute
|
|
12
|
+
path = @parser.remaining_args.first
|
|
13
|
+
if path.nil?
|
|
14
|
+
abort 'You should specify the path to the base of your Unity project.'
|
|
15
|
+
end
|
|
16
|
+
bootstrap_unity(File.expand_path(path))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
def bootstrap_unity(path)
|
|
21
|
+
dst_assets = File.join(path, 'Assets')
|
|
22
|
+
unless File.directory?(dst_assets)
|
|
23
|
+
abort %Q[Invalid Unity project base specified. Please make sure "#{path}" contains the "Assets" directory.]
|
|
24
|
+
end
|
|
25
|
+
src_assets = File.expand_path(File.join(File.dirname(__FILE__), '../../../Unity/Assets'))
|
|
26
|
+
Dir.glob("#{src_assets}/Plugins/**/*") do |file|
|
|
27
|
+
next if File.directory?(file) or File.extname(file) == '.meta'
|
|
28
|
+
relative_path = Pathname.new(file).relative_path_from(Pathname.new(src_assets)).to_s
|
|
29
|
+
dst_path = File.join(dst_assets, relative_path)
|
|
30
|
+
FileUtils.mkdir_p(File.dirname(dst_path))
|
|
31
|
+
if @parser.options.verbose
|
|
32
|
+
$stdout.puts '===>'.blue + " Copying #{file} " + 'to'.blue + " #{dst_path}"
|
|
33
|
+
end
|
|
34
|
+
FileUtils.copy(file, dst_path)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|