acouchi 0.0.6 → 0.0.7
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/examples/AcouchiSample/Rakefile +11 -0
- data/examples/AcouchiSample/features/step_definitions/steps.rb +8 -0
- data/examples/AcouchiSample/features/write_text.feature +6 -0
- data/examples/AcouchiSample/res/layout/listviewrow.xml +7 -0
- data/examples/AcouchiSample/res/layout/main.xml +6 -0
- data/examples/AcouchiSample/src/com/acouchi/sample/StartupActivity.java +18 -1
- data/lib/acouchi/rspec/matchers.rb +13 -0
- data/lib/acouchi/solo.rb +23 -0
- data/lib/acouchi/version.rb +1 -1
- data/src/com/acouchi/JsonTextView.java +15 -0
- data/src/com/acouchi/JsonView.java +2 -0
- data/src/com/acouchi/MethodExecutor.java +22 -4
- metadata +4 -2
@@ -12,3 +12,14 @@ end
|
|
12
12
|
Cucumber::Rake::Task.new(:features) do |t|
|
13
13
|
t.cucumber_opts = "features --format pretty"
|
14
14
|
end
|
15
|
+
|
16
|
+
desc "open up an acouchi console"
|
17
|
+
task :console do
|
18
|
+
configuration = Acouchi::Configuration.from_json(File.read("acouchi_configuration.json"))
|
19
|
+
test_runner = Acouchi::TestRunner.new(configuration)
|
20
|
+
test_runner.start
|
21
|
+
page = Acouchi::Solo.new
|
22
|
+
require "pry"
|
23
|
+
binding.pry
|
24
|
+
test_runner.stop
|
25
|
+
end
|
@@ -6,9 +6,16 @@ import android.widget.TextView;
|
|
6
6
|
import android.view.View.OnClickListener;
|
7
7
|
import android.view.View;
|
8
8
|
import android.widget.ImageView;
|
9
|
+
import android.widget.ArrayAdapter;
|
10
|
+
import android.widget.ListView;
|
11
|
+
import java.util.Arrays;
|
12
|
+
import java.util.ArrayList;
|
9
13
|
|
10
14
|
public class StartupActivity extends Activity
|
11
15
|
{
|
16
|
+
private ListView listView;
|
17
|
+
private ArrayAdapter<String> listAdapter;
|
18
|
+
|
12
19
|
/** Called when the activity is first created. */
|
13
20
|
@Override
|
14
21
|
public void onCreate(Bundle savedInstanceState)
|
@@ -24,7 +31,6 @@ public class StartupActivity extends Activity
|
|
24
31
|
}
|
25
32
|
});
|
26
33
|
|
27
|
-
|
28
34
|
ImageView imageView = (ImageView)findViewById(R.id.clickThisImageView);
|
29
35
|
imageView.setOnClickListener(new OnClickListener(){
|
30
36
|
public void onClick(View v) {
|
@@ -32,5 +38,16 @@ public class StartupActivity extends Activity
|
|
32
38
|
clickThis.setText("You click an ImageView");
|
33
39
|
}
|
34
40
|
});
|
41
|
+
|
42
|
+
listView = (ListView) findViewById( R.id.listView );
|
43
|
+
String[] planets = new String[] {
|
44
|
+
"1", "2", "3", "4", "5", "6", "7", "8",
|
45
|
+
"9", "10", "11", "12", "13", "14", "15",
|
46
|
+
"16", "17", "18", "19", "20", "21", "22"
|
47
|
+
};
|
48
|
+
ArrayList<String> planetList = new ArrayList<String>();
|
49
|
+
planetList.addAll(Arrays.asList(planets));
|
50
|
+
listAdapter = new ArrayAdapter<String>(this, R.layout.listviewrow, planetList);
|
51
|
+
listView.setAdapter(listAdapter);
|
35
52
|
}
|
36
53
|
}
|
@@ -8,3 +8,16 @@ RSpec::Matchers.define :have_content do |expected|
|
|
8
8
|
"expected \"#{actual.content.join("\n")}\" to include \"#{expected}\""
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
RSpec::Matchers.define :have_text do |expected|
|
13
|
+
match do |actual|
|
14
|
+
actual.has_text? expected
|
15
|
+
end
|
16
|
+
failure_message_for_should do |actual|
|
17
|
+
<<-FAIL
|
18
|
+
expected "#{actual.content.join("\n")}" to include "#{expected}"
|
19
|
+
all content on page:
|
20
|
+
#{actual.all_content.join("\n")}
|
21
|
+
FAIL
|
22
|
+
end
|
23
|
+
end
|
data/lib/acouchi/solo.rb
CHANGED
@@ -41,10 +41,24 @@ module Acouchi
|
|
41
41
|
buttons.any? { |b| b["text"] == text }
|
42
42
|
end
|
43
43
|
|
44
|
+
def text_views
|
45
|
+
call_method("getTextViews")
|
46
|
+
end
|
47
|
+
|
44
48
|
def content
|
45
49
|
call_method("getCurrentContent")
|
46
50
|
end
|
47
51
|
|
52
|
+
def all_content
|
53
|
+
all_content = []
|
54
|
+
until scroll_up == false; end
|
55
|
+
begin
|
56
|
+
all_content << text_views.map {|t| t["text"]}
|
57
|
+
end while scroll_down
|
58
|
+
all_content << text_views.map {|t| t["text"]}
|
59
|
+
all_content.flatten.uniq
|
60
|
+
end
|
61
|
+
|
48
62
|
def click_text text, options={}
|
49
63
|
options = {
|
50
64
|
:match => 1,
|
@@ -65,6 +79,10 @@ module Acouchi
|
|
65
79
|
call_method("clickOnViewById", [id])
|
66
80
|
end
|
67
81
|
|
82
|
+
def click_image index
|
83
|
+
call_method("clickOnImage", [index])
|
84
|
+
end
|
85
|
+
|
68
86
|
def scroll_up
|
69
87
|
call_method("scrollUp")
|
70
88
|
end
|
@@ -89,8 +107,13 @@ module Acouchi
|
|
89
107
|
call_method("scrollToSide", [RIGHT])
|
90
108
|
end
|
91
109
|
|
110
|
+
def go_back
|
111
|
+
call_method("goBack")
|
112
|
+
end
|
113
|
+
|
92
114
|
private
|
93
115
|
def call_method name, arguments = []
|
116
|
+
arguments = arguments.map {|a| a.to_s}
|
94
117
|
options = { :body => {:parameters => arguments.to_json} }
|
95
118
|
response = HTTParty.post("http://127.0.0.1:7103/execute_method/#{name}", options)
|
96
119
|
json = JSON.parse(response.body, :max_nesting => 100)
|
data/lib/acouchi/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
package com.acouchi;
|
2
|
+
|
3
|
+
import android.view.View;
|
4
|
+
import android.widget.TextView;
|
5
|
+
|
6
|
+
public class JsonTextView extends JsonView
|
7
|
+
{
|
8
|
+
private String text;
|
9
|
+
|
10
|
+
public JsonTextView(TextView textView)
|
11
|
+
{
|
12
|
+
super(textView);
|
13
|
+
text = textView.getText().toString();
|
14
|
+
}
|
15
|
+
}
|
@@ -9,6 +9,7 @@ import com.google.gson.Gson;
|
|
9
9
|
import com.acouchi.JsonResult;
|
10
10
|
import com.acouchi.JsonView;
|
11
11
|
import com.acouchi.JsonButton;
|
12
|
+
import com.acouchi.JsonTextView;
|
12
13
|
|
13
14
|
import android.view.View;
|
14
15
|
import android.widget.TextView;
|
@@ -41,10 +42,10 @@ public class MethodExecutor
|
|
41
42
|
solo.clickOnText(parameters[0], Integer.parseInt(parameters[1]), Boolean.parseBoolean(parameters[2]));
|
42
43
|
|
43
44
|
if (methodName.equals("scrollUpList"))
|
44
|
-
solo.scrollUpList(Integer.parseInt(parameters[0]));
|
45
|
+
result = solo.scrollUpList(Integer.parseInt(parameters[0]));
|
45
46
|
|
46
47
|
if (methodName.equals("scrollDownList"))
|
47
|
-
solo.scrollDownList(Integer.parseInt(parameters[0]));
|
48
|
+
result = solo.scrollDownList(Integer.parseInt(parameters[0]));
|
48
49
|
|
49
50
|
if (methodName.equals("sendKey"))
|
50
51
|
solo.sendKey(Integer.parseInt(parameters[0]));
|
@@ -64,18 +65,27 @@ public class MethodExecutor
|
|
64
65
|
if (methodName.equals("getViews"))
|
65
66
|
result = getCurrentViews();
|
66
67
|
|
68
|
+
if (methodName.equals("getTextViews"))
|
69
|
+
result = getCurrentTextViews();
|
70
|
+
|
67
71
|
if (methodName.equals("clickOnViewById"))
|
68
72
|
clickOnViewById(Integer.parseInt(parameters[0]));
|
69
73
|
|
74
|
+
if (methodName.equals("clickOnImage"))
|
75
|
+
solo.clickOnImage(Integer.parseInt(parameters[0]));
|
76
|
+
|
70
77
|
if (methodName.equals("scrollUp"))
|
71
|
-
solo.scrollUp();
|
78
|
+
result = solo.scrollUp();
|
72
79
|
|
73
80
|
if (methodName.equals("scrollDown"))
|
74
|
-
solo.scrollDown();
|
81
|
+
result = solo.scrollDown();
|
75
82
|
|
76
83
|
if (methodName.equals("scrollToSide"))
|
77
84
|
solo.scrollToSide(Integer.parseInt(parameters[0]));
|
78
85
|
|
86
|
+
if (methodName.equals("goBack"))
|
87
|
+
solo.goBack();
|
88
|
+
|
79
89
|
return methodResultAsJson(result);
|
80
90
|
}
|
81
91
|
|
@@ -114,4 +124,12 @@ public class MethodExecutor
|
|
114
124
|
jsonViews.add(new JsonView(view));
|
115
125
|
return jsonViews;
|
116
126
|
}
|
127
|
+
|
128
|
+
private ArrayList<JsonTextView> getCurrentTextViews()
|
129
|
+
{
|
130
|
+
ArrayList<JsonTextView> jsonTextViews = new ArrayList<JsonTextView>();
|
131
|
+
for (TextView textView: solo.getCurrentTextViews(null))
|
132
|
+
jsonTextViews.add(new JsonTextView(textView));
|
133
|
+
return jsonTextViews;
|
134
|
+
}
|
117
135
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acouchi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- examples/AcouchiSample/res/drawable-ldpi/ic_launcher.png
|
87
87
|
- examples/AcouchiSample/res/drawable-mdpi/ic_launcher.png
|
88
88
|
- examples/AcouchiSample/res/drawable-xhdpi/ic_launcher.png
|
89
|
+
- examples/AcouchiSample/res/layout/listviewrow.xml
|
89
90
|
- examples/AcouchiSample/res/layout/main.xml
|
90
91
|
- examples/AcouchiSample/res/values/strings.xml
|
91
92
|
- examples/AcouchiSample/src/com/acouchi/sample/StartupActivity.java
|
@@ -108,6 +109,7 @@ files:
|
|
108
109
|
- src/com/acouchi/Acouchi.java
|
109
110
|
- src/com/acouchi/JsonButton.java
|
110
111
|
- src/com/acouchi/JsonResult.java
|
112
|
+
- src/com/acouchi/JsonTextView.java
|
111
113
|
- src/com/acouchi/JsonView.java
|
112
114
|
- src/com/acouchi/MethodExecutor.java
|
113
115
|
- src/com/acouchi/NanoHTTPD.java
|