run_loop 2.1.1.pre1 → 2.1.1.pre2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/run_loop/core.rb +40 -6
- data/lib/run_loop/core_simulator.rb +1 -0
- data/lib/run_loop/dot_dir.rb +5 -1
- data/lib/run_loop/template.rb +36 -1
- data/lib/run_loop/version.rb +1 -1
- data/scripts/lib/log.js +9 -9
- data/scripts/run_loop_basic.js +1 -1
- data/scripts/run_loop_fast_uia.js +3 -2
- data/scripts/run_loop_host.js +10 -3
- data/scripts/run_loop_shared_element.js +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c874aaaaba2d83da288814e78328d8b663a4d44a
|
4
|
+
data.tar.gz: 32a4447b971655081d08d06684e974a907d1da8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 518708e1ce2e1b5f305c2c0b337f85dd2ca86d62431052eba8837cf88b5834c37b56fc397ed5c67c0f8520b7430779b2e788180dac14aae5a6856c301b29eca1
|
7
|
+
data.tar.gz: 1899a1efbc4e93ee4bb37763e6a3cf5caacf7001b7cfdea350bc5c12f2c266b67b844c63791e3d5f6f1691695fb338310dfcda6ead233caf95b9229eaa8732d2
|
data/lib/run_loop/core.rb
CHANGED
@@ -89,11 +89,20 @@ module RunLoop
|
|
89
89
|
|
90
90
|
script = File.join(results_dir, '_run_loop.js')
|
91
91
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
92
|
+
javascript = UIAScriptTemplate.new(SCRIPTS_PATH, options[:script]).result
|
93
|
+
UIAScriptTemplate.sub_path_var!(javascript, results_dir)
|
94
|
+
UIAScriptTemplate.sub_read_script_path_var!(javascript, READ_SCRIPT_PATH)
|
95
|
+
UIAScriptTemplate.sub_timeout_script_path_var!(javascript, TIMEOUT_SCRIPT_PATH)
|
96
|
+
|
97
|
+
# Using a :no_* option is confusing.
|
98
|
+
# TODO Replace :no_flush with :flush_uia_logs; it should default to true
|
99
|
+
if RunLoop::Environment.xtc?
|
100
|
+
UIAScriptTemplate.sub_mode_var!(javascript, "FLUSH") unless options[:no_flush]
|
101
|
+
else
|
102
|
+
if self.detect_flush_uia_log_option(options)
|
103
|
+
UIAScriptTemplate.sub_flush_uia_logs_var!(javascript, "FLUSH_LOGS")
|
104
|
+
end
|
105
|
+
end
|
97
106
|
|
98
107
|
repl_path = File.join(results_dir, 'repl-cmd.pipe')
|
99
108
|
FileUtils.rm_f(repl_path)
|
@@ -111,7 +120,7 @@ module RunLoop
|
|
111
120
|
if include_calabash_script?(options)
|
112
121
|
file.puts IO.read(cal_script)
|
113
122
|
end
|
114
|
-
file.puts
|
123
|
+
file.puts javascript
|
115
124
|
end
|
116
125
|
|
117
126
|
args = options.fetch(:args, [])
|
@@ -661,6 +670,31 @@ Logfile: #{log_file}
|
|
661
670
|
strategy
|
662
671
|
end
|
663
672
|
|
673
|
+
# @!visibility private
|
674
|
+
#
|
675
|
+
# UIAutomation buffers log output in some very strange ways. RunLoop
|
676
|
+
# attempts to work around this buffering by forcing characters onto the
|
677
|
+
# UIALogger buffer. Once the buffer is full, UIAutomation will dump its
|
678
|
+
# contents. It is essential that the communication between UIAutomation
|
679
|
+
# and RunLoop be synchronized.
|
680
|
+
#
|
681
|
+
# Casual users should never set the :flush_uia_logs key; they should use the
|
682
|
+
# defaults.
|
683
|
+
#
|
684
|
+
# :no_flush is supported (for now) as alternative key.
|
685
|
+
#
|
686
|
+
# @param [Hash] options The launch options passed to .run_with_options
|
687
|
+
def self.detect_flush_uia_log_option(options)
|
688
|
+
if options.has_key?(:no_flush)
|
689
|
+
# Confusing.
|
690
|
+
# :no_flush == false means, flush the logs.
|
691
|
+
# :no_flush == true means, don't flush the logs.
|
692
|
+
return !options[:no_flush]
|
693
|
+
end
|
694
|
+
|
695
|
+
return options.fetch(:flush_uia_logs, true)
|
696
|
+
end
|
697
|
+
|
664
698
|
# @!visibility private
|
665
699
|
#
|
666
700
|
# @param [Hash] options The launch options passed to .run_with_options
|
@@ -408,6 +408,7 @@ $ bundle exec run-loop simctl manage-processes
|
|
408
408
|
hash = launch_app_with_simctl
|
409
409
|
exit_status = hash[:exit_status]
|
410
410
|
if exit_status != 0
|
411
|
+
out = hash[:out]
|
411
412
|
RunLoop.log_debug("Failed to launch app.")
|
412
413
|
out.split($-0).each do |line|
|
413
414
|
RunLoop.log_debug(" #{line}")
|
data/lib/run_loop/dot_dir.rb
CHANGED
@@ -17,6 +17,10 @@ module RunLoop::DotDir
|
|
17
17
|
results_dir = File.join(self.directory, 'results')
|
18
18
|
next_results_dir = self.next_timestamped_dirname(results_dir)
|
19
19
|
FileUtils.mkdir_p(next_results_dir)
|
20
|
+
|
21
|
+
current = File.join(self.directory, "results", "current")
|
22
|
+
FileUtils.rm_rf(current)
|
23
|
+
FileUtils.ln_s(next_results_dir, current)
|
20
24
|
end
|
21
25
|
|
22
26
|
next_results_dir
|
@@ -32,7 +36,7 @@ module RunLoop::DotDir
|
|
32
36
|
RunLoop.log_debug("Searching for run-loop results with glob: #{glob}")
|
33
37
|
|
34
38
|
directories = Dir.glob(glob).select do |path|
|
35
|
-
File.directory?(path)
|
39
|
+
File.directory?(path) && !File.symlink?(path)
|
36
40
|
end
|
37
41
|
|
38
42
|
oldest_first = directories.sort_by { |f| File.mtime(f) }
|
data/lib/run_loop/template.rb
CHANGED
@@ -9,7 +9,8 @@ module RunLoop
|
|
9
9
|
# @!visibility private
|
10
10
|
def initialize(template_root, template_relative_path)
|
11
11
|
@template_root = template_root
|
12
|
-
|
12
|
+
template_path = File.join(@template_root, template_relative_path)
|
13
|
+
@template = File.read(template_path).force_encoding("utf-8")
|
13
14
|
super(@template)
|
14
15
|
end
|
15
16
|
|
@@ -22,5 +23,39 @@ module RunLoop
|
|
22
23
|
def result
|
23
24
|
super(binding)
|
24
25
|
end
|
26
|
+
|
27
|
+
# @!visibility private
|
28
|
+
def self.sub_path_var!(javascript, results_dir)
|
29
|
+
self.substitute_variable!(javascript, "PATH", results_dir)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @!visibility private
|
33
|
+
def self.sub_read_script_path_var!(javascript, read_cmd_sh)
|
34
|
+
self.substitute_variable!(javascript, "READ_SCRIPT_PATH", read_cmd_sh)
|
35
|
+
end
|
36
|
+
|
37
|
+
# @!visibility private
|
38
|
+
def self.sub_timeout_script_path_var!(javascript, timeout_sh)
|
39
|
+
self.substitute_variable!(javascript, "TIMEOUT_SCRIPT_PATH", timeout_sh)
|
40
|
+
end
|
41
|
+
|
42
|
+
# @!visibility private
|
43
|
+
def self.sub_flush_uia_logs_var!(javascript, value)
|
44
|
+
self.substitute_variable!(javascript, "FLUSH_LOGS", value)
|
45
|
+
end
|
46
|
+
|
47
|
+
# @!visibility private
|
48
|
+
#
|
49
|
+
# Legacy and XTC - related to :no_flush which is a deprecated option.
|
50
|
+
#
|
51
|
+
# Replaced with :flush_uia_logs
|
52
|
+
def self.sub_mode_var!(javascript, value)
|
53
|
+
self.substitute_variable!(javascript, "MODE", value)
|
54
|
+
end
|
55
|
+
|
56
|
+
# @!visibility private
|
57
|
+
def self.substitute_variable!(javascript, variable, value)
|
58
|
+
javascript.gsub!(/\$#{variable}/, value)
|
59
|
+
end
|
25
60
|
end
|
26
61
|
end
|
data/lib/run_loop/version.rb
CHANGED
data/scripts/lib/log.js
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
var Log = (function () {
|
2
|
-
var forceFlush = []
|
3
|
-
|
4
|
-
|
2
|
+
var forceFlush = [];
|
3
|
+
var N = "$FLUSH_LOGS" == "FLUSH_LOGS" ? 16384 : 0;
|
4
|
+
var i = N;
|
5
5
|
while (i--) {
|
6
6
|
forceFlush[i] = "*";
|
7
7
|
}
|
8
8
|
forceFlush = forceFlush.join('');
|
9
9
|
|
10
|
-
function log_json(object
|
10
|
+
function log_json(object)
|
11
11
|
{
|
12
12
|
UIALogger.logMessage("OUTPUT_JSON:\n"+JSON.stringify(object)+"\nEND_OUTPUT");
|
13
|
-
if (
|
13
|
+
if (forceFlush.length > 0) {
|
14
14
|
UIALogger.logMessage(forceFlush);
|
15
15
|
}
|
16
16
|
}
|
17
17
|
|
18
18
|
return {
|
19
|
-
result: function (status, data
|
20
|
-
log_json({"status": status, "value": data, "index":_actualIndex}
|
19
|
+
result: function (status, data) {
|
20
|
+
log_json({"status": status, "value": data, "index":_actualIndex})
|
21
21
|
},
|
22
|
-
output: function (msg
|
23
|
-
log_json({"output": msg,"last_index":_actualIndex}
|
22
|
+
output: function (msg) {
|
23
|
+
log_json({"output": msg,"last_index":_actualIndex});
|
24
24
|
}
|
25
25
|
};
|
26
26
|
})();
|
data/scripts/run_loop_basic.js
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
<%= render_template("lib/on_alert.js"); %>
|
4
4
|
|
5
5
|
UIATarget.onAlert = function (alert) {
|
6
|
-
Log.output({"output":"on alert"}
|
6
|
+
Log.output({"output":"on alert"});
|
7
7
|
var target = UIATarget.localTarget();
|
8
8
|
target.pushTimeout(10);
|
9
9
|
function dismissPrivacyAlert(retry_count) {
|
@@ -41,6 +41,7 @@ UIATarget.onAlert = function (alert) {
|
|
41
41
|
|
42
42
|
dismissPrivacyAlert(0);
|
43
43
|
target.popTimeout();
|
44
|
+
|
44
45
|
for (var i=0;i<_RUN_LOOP_MAX_RETRY_AFTER_HANDLER;i++) {
|
45
46
|
req = app.preferencesValueForKey(__calabashRequest);
|
46
47
|
rsp = app.preferencesValueForKey(__calabashResponse);
|
@@ -143,7 +144,7 @@ var target = null,
|
|
143
144
|
};
|
144
145
|
|
145
146
|
_resetCalabashPreferences();
|
146
|
-
Log.result('success',true
|
147
|
+
Log.result('success', true);
|
147
148
|
target = UIATarget.localTarget();
|
148
149
|
while (true) {
|
149
150
|
try {
|
@@ -175,7 +176,7 @@ while (true) {
|
|
175
176
|
}
|
176
177
|
catch(err) {
|
177
178
|
failureMessage = "Failure: "+ err.toString() + " " + (err.stack ? err.stack.toString() : "");
|
178
|
-
Log.output({"output":failureMessage}
|
179
|
+
Log.output({"output":failureMessage});
|
179
180
|
_failure(err, _actualIndex);
|
180
181
|
}
|
181
182
|
}
|
data/scripts/run_loop_host.js
CHANGED
@@ -23,7 +23,7 @@ var _expectedIndex = 0,//expected index of next command
|
|
23
23
|
<%= render_template("lib/on_alert.js"); %>
|
24
24
|
|
25
25
|
UIATarget.onAlert = function (alert) {
|
26
|
-
Log.output({"output":"on alert"
|
26
|
+
Log.output({"output":"on alert");
|
27
27
|
var target = UIATarget.localTarget();
|
28
28
|
target.pushTimeout(10);
|
29
29
|
function dismissPrivacyAlert(retry_count) {
|
@@ -74,7 +74,12 @@ while (true) {
|
|
74
74
|
}
|
75
75
|
if (_process.exitCode != 0) {
|
76
76
|
if (_process.exitCode != 15) {
|
77
|
-
Log.output("unable to execute: " +
|
77
|
+
Log.output("unable to execute: " +
|
78
|
+
timeoutScriptPath + " " +
|
79
|
+
readPipeScriptPath + " " +
|
80
|
+
commandPath + " exitCode "
|
81
|
+
+ _process.exitCode + ". Error: " +
|
82
|
+
_process.stderr + _process.stdout);
|
78
83
|
}
|
79
84
|
}
|
80
85
|
else {
|
@@ -98,7 +103,9 @@ while (true) {
|
|
98
103
|
|
99
104
|
}
|
100
105
|
catch (err) {
|
101
|
-
Log.result("error", "Input: " + (_exp ? _exp.toString() : "null") +
|
106
|
+
Log.result("error", "Input: " + (_exp ? _exp.toString() : "null") +
|
107
|
+
". Error: " + err.toString() + " " +
|
108
|
+
(err.stack ? err.stack.toString() : ""));
|
102
109
|
_expectedIndex++;
|
103
110
|
continue;
|
104
111
|
}
|
@@ -45,7 +45,7 @@ UIATarget.onAlert = function (alert) {
|
|
45
45
|
};
|
46
46
|
|
47
47
|
|
48
|
-
Log.result('success',true
|
48
|
+
Log.result('success', true);
|
49
49
|
|
50
50
|
var _calabashSharedTextField = null,
|
51
51
|
__calabashSharedTextFieldName = '__calabash_uia_channel',
|
@@ -114,7 +114,7 @@ while (true) {
|
|
114
114
|
}
|
115
115
|
catch(err) {
|
116
116
|
failureMessage = "Failure: "+ err.toString() + " " + (err.stack ? err.stack.toString() : "");
|
117
|
-
Log.output({"output":failureMessage}
|
117
|
+
Log.output({"output":failureMessage});
|
118
118
|
_failure(err, _actualIndex);
|
119
119
|
}
|
120
120
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: run_loop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.1.
|
4
|
+
version: 2.1.1.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karl Krukow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|