run_loop 2.1.1.pre1 → 2.1.1.pre2
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.
- 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
|