calabash-android 0.5.16.pre1 → 0.6.0.prelatestcrosswalk
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/bin/calabash-android-build.rb +2 -1
- data/irbrc +17 -0
- data/lib/calabash-android.rb +6 -1
- data/lib/calabash-android/dot_dir.rb +17 -0
- data/lib/calabash-android/environment.rb +120 -0
- data/{test-server → lib/calabash-android/lib}/AndroidManifest.xml +0 -0
- data/lib/calabash-android/lib/TestServer.apk +0 -0
- data/lib/calabash-android/logging.rb +120 -0
- data/lib/calabash-android/operations.rb +14 -2
- data/lib/calabash-android/store/preferences.rb +211 -0
- data/lib/calabash-android/text_helpers.rb +41 -14
- data/lib/calabash-android/usage_tracker.rb +192 -0
- data/lib/calabash-android/version.rb +1 -1
- data/lib/calabash-android/wait_helpers.rb +1 -1
- metadata +122 -15
- data/.calabash_settings +0 -1
- data/.yardopts +0 -3
- data/CHANGES.txt +0 -354
- data/ENVIRONMENT_VARIABLES.md +0 -106
- data/Gemfile +0 -4
- data/README_YARDOC.md +0 -163
- data/Rakefile +0 -49
- data/calabash-android.gemspec +0 -30
- data/lib/calabash-android/canned_steps.md +0 -229
- data/test-server/build.xml +0 -152
- data/test-server/calabash-js/src/calabash.js +0 -172
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e0c408243bb88fbcdaad214dde7cd40ceb5120c
|
4
|
+
data.tar.gz: 55b08c5affa5f4330e18fc9562ad5620354f5882
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ca1ca14255d9e89f589ce0897c2c96b4d4ac55f1b95738417237f7b90ac18af0cf6a90e8cddbda69a80376acaea110617e774955700886f652c81af5e7f4d7e
|
7
|
+
data.tar.gz: de6172a0b28071ba6a5550d815a367c28db7739e3c606c57f7aca19d38e18b56a483f2303fc935203ea06df01171aef8197e4e6690b8ea197c4973c6545013ee
|
@@ -31,12 +31,13 @@ def calabash_build(app)
|
|
31
31
|
FileUtils.mkdir_p File.dirname(test_server_file_name) unless File.exist? File.dirname(test_server_file_name)
|
32
32
|
|
33
33
|
unsigned_test_apk = File.join(File.dirname(__FILE__), '..', 'lib/calabash-android/lib/TestServer.apk')
|
34
|
+
test_server_manifest = File.join(File.dirname(__FILE__), '..', 'lib', 'calabash-android', 'lib', 'AndroidManifest.xml')
|
34
35
|
|
35
36
|
android_platform = Env.android_platform_path
|
36
37
|
Dir.mktmpdir do |workspace_dir|
|
37
38
|
Dir.chdir(workspace_dir) do
|
38
39
|
FileUtils.cp(unsigned_test_apk, "TestServer.apk")
|
39
|
-
FileUtils.cp(
|
40
|
+
FileUtils.cp(test_server_manifest, "AndroidManifest.xml")
|
40
41
|
|
41
42
|
unless system %Q{"#{RbConfig.ruby}" -pi.bak -e "gsub(/#targetPackage#/, '#{package_name(app)}')" AndroidManifest.xml}
|
42
43
|
raise "Could not replace package name in manifest"
|
data/irbrc
CHANGED
@@ -54,3 +54,20 @@ end
|
|
54
54
|
|
55
55
|
extend Calabash::Android::Operations
|
56
56
|
|
57
|
+
|
58
|
+
def preferences
|
59
|
+
Calabash::Android::Preferences.new
|
60
|
+
end
|
61
|
+
|
62
|
+
def disable_usage_tracking
|
63
|
+
preferences.usage_tracking = "none"
|
64
|
+
puts "Calabash will not collect usage information."
|
65
|
+
"none"
|
66
|
+
end
|
67
|
+
|
68
|
+
def enable_usage_tracking(level="system_info")
|
69
|
+
preferences.usage_tracking = level
|
70
|
+
puts "Calabash will collect statistics using the '#{level}' rule."
|
71
|
+
level
|
72
|
+
end
|
73
|
+
|
data/lib/calabash-android.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
require 'calabash-android/defaults'
|
2
|
+
require 'calabash-android/environment'
|
3
|
+
require 'calabash-android/dot_dir'
|
4
|
+
require 'calabash-android/logging'
|
5
|
+
require 'calabash-android/store/preferences'
|
6
|
+
require 'calabash-android/usage_tracker'
|
2
7
|
require 'calabash-android/operations'
|
3
8
|
require 'calabash-android/version'
|
4
|
-
require 'calabash-android/abase'
|
9
|
+
require 'calabash-android/abase'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Calabash
|
2
|
+
module Android
|
3
|
+
# A module for managing the ~/.calabash directory.
|
4
|
+
module DotDir
|
5
|
+
def self.directory
|
6
|
+
home = Calabash::Android::Environment.user_home_directory
|
7
|
+
dir = File.join(home, ".calabash")
|
8
|
+
if !File.exist?(dir)
|
9
|
+
FileUtils.mkdir_p(dir)
|
10
|
+
end
|
11
|
+
dir
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module Calabash
|
2
|
+
module Android
|
3
|
+
|
4
|
+
# @!visibility private
|
5
|
+
class Environment
|
6
|
+
|
7
|
+
# @!visibility private
|
8
|
+
# Returns true if running on Windows
|
9
|
+
def self.windows?
|
10
|
+
RbConfig::CONFIG['host_os'][/mswin|mingw|cygwin/, 0] != nil
|
11
|
+
end
|
12
|
+
|
13
|
+
# @!visibility private
|
14
|
+
# Returns the user home directory
|
15
|
+
def self.user_home_directory
|
16
|
+
if self.xtc?
|
17
|
+
home = File.join("./", "tmp", "home")
|
18
|
+
FileUtils.mkdir_p(home)
|
19
|
+
home
|
20
|
+
else
|
21
|
+
if self.windows?
|
22
|
+
# http://stackoverflow.com/questions/4190930/cross-platform-means-of-getting-users-home-directory-in-ruby
|
23
|
+
home = ENV["HOME"] || ENV["USERPROFILE"]
|
24
|
+
else
|
25
|
+
require "etc"
|
26
|
+
home = Etc.getpwuid.dir
|
27
|
+
end
|
28
|
+
|
29
|
+
unless File.exist?(home)
|
30
|
+
home = File.join("./", "tmp", "home")
|
31
|
+
FileUtils.mkdir_p(home)
|
32
|
+
end
|
33
|
+
|
34
|
+
home
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# @!visibility private
|
39
|
+
# Returns true if debugging is enabled.
|
40
|
+
def self.debug?
|
41
|
+
ENV['DEBUG'] == '1' ||
|
42
|
+
ARGV.include?("-v") ||
|
43
|
+
ARGV.include?("--verbose")
|
44
|
+
end
|
45
|
+
|
46
|
+
# @!visibility private
|
47
|
+
# Returns true if we are running on the XTC
|
48
|
+
def self.xtc?
|
49
|
+
ENV['XAMARIN_TEST_CLOUD'] == '1'
|
50
|
+
end
|
51
|
+
|
52
|
+
# @!visibility private
|
53
|
+
# Returns true if running in Jenkins CI
|
54
|
+
#
|
55
|
+
# Checks the value of JENKINS_HOME
|
56
|
+
def self.jenkins?
|
57
|
+
value = ENV["JENKINS_HOME"]
|
58
|
+
!!value && value != ''
|
59
|
+
end
|
60
|
+
|
61
|
+
# @!visibility private
|
62
|
+
# Returns true if running in Travis CI
|
63
|
+
#
|
64
|
+
# Checks the value of TRAVIS
|
65
|
+
def self.travis?
|
66
|
+
value = ENV["TRAVIS"]
|
67
|
+
!!value && value != ''
|
68
|
+
end
|
69
|
+
|
70
|
+
# @!visibility private
|
71
|
+
# Returns true if running in Circle CI
|
72
|
+
#
|
73
|
+
# Checks the value of CIRCLECI
|
74
|
+
def self.circle_ci?
|
75
|
+
value = ENV["CIRCLECI"]
|
76
|
+
!!value && value != ''
|
77
|
+
end
|
78
|
+
|
79
|
+
# @!visibility private
|
80
|
+
# Returns true if running in Teamcity
|
81
|
+
#
|
82
|
+
# Checks the value of TEAMCITY_PROJECT_NAME
|
83
|
+
def self.teamcity?
|
84
|
+
value = ENV["TEAMCITY_PROJECT_NAME"]
|
85
|
+
!!value && value != ''
|
86
|
+
end
|
87
|
+
|
88
|
+
# @!visibility private
|
89
|
+
# Returns true if running in Teamcity
|
90
|
+
#
|
91
|
+
# Checks the value of GITLAB_CI
|
92
|
+
def self.gitlab?
|
93
|
+
value = ENV["GITLAB_CI"]
|
94
|
+
!!value && value != ''
|
95
|
+
end
|
96
|
+
|
97
|
+
# @!visibility private
|
98
|
+
# Returns true if running in a CI environment
|
99
|
+
def self.ci?
|
100
|
+
[
|
101
|
+
self.ci_var_defined?,
|
102
|
+
self.travis?,
|
103
|
+
self.jenkins?,
|
104
|
+
self.circle_ci?,
|
105
|
+
self.teamcity?,
|
106
|
+
self.gitlab?
|
107
|
+
].any?
|
108
|
+
end
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
# !@visibility private
|
113
|
+
def self.ci_var_defined?
|
114
|
+
value = ENV["CI"]
|
115
|
+
!!value && value != ''
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
File without changes
|
Binary file
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module Calabash
|
2
|
+
module Android
|
3
|
+
module Logging
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
# These methods are not part of the API.
|
7
|
+
#
|
8
|
+
# They may change at any time.
|
9
|
+
|
10
|
+
# !@visibility private
|
11
|
+
# blue
|
12
|
+
def self.log_warn(msg)
|
13
|
+
puts self.blue(" WARN: #{msg}") if msg
|
14
|
+
end
|
15
|
+
|
16
|
+
# !@visibility private
|
17
|
+
# magenta
|
18
|
+
def self.log_debug(msg)
|
19
|
+
if Calabash::Android::Environment.debug?
|
20
|
+
puts self.magenta("DEBUG: #{msg}") if msg
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# !@visibility private
|
25
|
+
# green
|
26
|
+
def self.log_info(msg)
|
27
|
+
puts self.green(" INFO: #{msg}") if msg
|
28
|
+
end
|
29
|
+
|
30
|
+
# !@visibility private
|
31
|
+
# red
|
32
|
+
def self.log_error(msg)
|
33
|
+
puts self.red("ERROR: #{msg}") if msg
|
34
|
+
end
|
35
|
+
|
36
|
+
# !@visibility private
|
37
|
+
def self.log_to_file(message)
|
38
|
+
timestamp = self.timestamp
|
39
|
+
|
40
|
+
begin
|
41
|
+
File.open(self.calabash_log_file, "a:UTF-8") do |file|
|
42
|
+
message.split($-0).each do |line|
|
43
|
+
file.write("#{timestamp} #{line}#{$-0}")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
rescue => e
|
47
|
+
message =
|
48
|
+
%Q{Could not write:
|
49
|
+
|
50
|
+
#{message}
|
51
|
+
|
52
|
+
to calabash.log because:
|
53
|
+
|
54
|
+
#{e}
|
55
|
+
}
|
56
|
+
self.log_debug(message)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
# @!visibility private
|
63
|
+
def self.colorize(string, color)
|
64
|
+
if Calabash::Android::Environment.windows?
|
65
|
+
string
|
66
|
+
elsif Calabash::Android::Environment.xtc?
|
67
|
+
string
|
68
|
+
else
|
69
|
+
"\033[#{color}m#{string}\033[0m"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# @!visibility private
|
74
|
+
def self.red(string)
|
75
|
+
colorize(string, 31)
|
76
|
+
end
|
77
|
+
|
78
|
+
# @!visibility private
|
79
|
+
def self.blue(string)
|
80
|
+
colorize(string, 34)
|
81
|
+
end
|
82
|
+
|
83
|
+
# @!visibility private
|
84
|
+
def self.magenta(string)
|
85
|
+
colorize(string, 35)
|
86
|
+
end
|
87
|
+
|
88
|
+
# @!visibility private
|
89
|
+
def self.cyan(string)
|
90
|
+
colorize(string, 36)
|
91
|
+
end
|
92
|
+
|
93
|
+
# @!visibility private
|
94
|
+
def self.green(string)
|
95
|
+
colorize(string, 32)
|
96
|
+
end
|
97
|
+
|
98
|
+
# @!visibility private
|
99
|
+
def self.timestamp
|
100
|
+
Time.now.strftime("%Y-%m-%d_%H-%M-%S")
|
101
|
+
end
|
102
|
+
|
103
|
+
# @!visibility private
|
104
|
+
def self.logs_directory
|
105
|
+
path = File.join(Calabash::Android::DotDir.directory, "logs")
|
106
|
+
FileUtils.mkdir_p(path)
|
107
|
+
path
|
108
|
+
end
|
109
|
+
|
110
|
+
# @!visibility private
|
111
|
+
def self.calabash_log_file
|
112
|
+
path = File.join(self.logs_directory, "calabash.log")
|
113
|
+
if !File.exist?(path)
|
114
|
+
FileUtils.touch(path)
|
115
|
+
end
|
116
|
+
path
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -15,6 +15,11 @@ require 'calabash-android/drag_helpers'
|
|
15
15
|
require 'calabash-android/wait_helpers'
|
16
16
|
require 'calabash-android/version'
|
17
17
|
require 'calabash-android/env'
|
18
|
+
require 'calabash-android/environment'
|
19
|
+
require 'calabash-android/dot_dir'
|
20
|
+
require 'calabash-android/logging'
|
21
|
+
require 'calabash-android/store/preferences'
|
22
|
+
require 'calabash-android/usage_tracker'
|
18
23
|
require 'retriable'
|
19
24
|
require 'cucumber'
|
20
25
|
require 'date'
|
@@ -651,12 +656,12 @@ module Calabash module Android
|
|
651
656
|
log cmd
|
652
657
|
raise "Could not execute command to start test server" unless system("#{cmd} 2>&1")
|
653
658
|
|
654
|
-
Retriable.retriable :tries =>
|
659
|
+
Retriable.retriable :tries => 100, :interval => 0.1 do
|
655
660
|
raise "App did not start" unless app_running?
|
656
661
|
end
|
657
662
|
|
658
663
|
begin
|
659
|
-
Retriable.retriable :tries =>
|
664
|
+
Retriable.retriable :tries => 300, :interval => 0.1 do
|
660
665
|
log "Checking if instrumentation backend is ready"
|
661
666
|
|
662
667
|
log "Is app running? #{app_running?}"
|
@@ -702,6 +707,11 @@ module Calabash module Android
|
|
702
707
|
end
|
703
708
|
|
704
709
|
log("Client and server versions match (client: #{client_version}, server: #{server_version}). Proceeding...")
|
710
|
+
|
711
|
+
# What is Calabash tracking? Read this post for information
|
712
|
+
# No private data (like ip addresses) are collected
|
713
|
+
# https://github.com/calabash/calabash-android/issues/655
|
714
|
+
Calabash::Android::UsageTracker.new.post_usage_async
|
705
715
|
end
|
706
716
|
|
707
717
|
def shutdown_test_server
|
@@ -912,6 +922,8 @@ module Calabash module Android
|
|
912
922
|
end
|
913
923
|
|
914
924
|
def press_user_action_button(action_name=nil)
|
925
|
+
wait_for_keyboard
|
926
|
+
|
915
927
|
if action_name.nil?
|
916
928
|
perform_action("press_user_action_button")
|
917
929
|
else
|
@@ -0,0 +1,211 @@
|
|
1
|
+
module Calabash
|
2
|
+
module Android
|
3
|
+
|
4
|
+
require "awesome_print"
|
5
|
+
require "json"
|
6
|
+
require "fileutils"
|
7
|
+
require "securerandom"
|
8
|
+
|
9
|
+
# Users preferences persisted across runs:
|
10
|
+
#
|
11
|
+
# ~/.calabash/preferences/preferences.json
|
12
|
+
class Preferences
|
13
|
+
def initialize
|
14
|
+
dot_dir = Calabash::Android::DotDir.directory
|
15
|
+
@path = File.join(dot_dir, "preferences", "preferences.json")
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
$stdout.puts "Preferences:"
|
20
|
+
ap read
|
21
|
+
end
|
22
|
+
|
23
|
+
def inspect
|
24
|
+
to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
# !@visibility private
|
28
|
+
def usage_tracking
|
29
|
+
preferences = read
|
30
|
+
|
31
|
+
unless valid_user_tracking_value?(preferences[:usage_tracking])
|
32
|
+
log_defaults_reset
|
33
|
+
preferences[:usage_tracking] = defaults[:usage_tracking]
|
34
|
+
write(preferences)
|
35
|
+
end
|
36
|
+
|
37
|
+
preferences[:usage_tracking]
|
38
|
+
end
|
39
|
+
|
40
|
+
# !@visibility private
|
41
|
+
def usage_tracking=(value)
|
42
|
+
if !valid_user_tracking_value?(value)
|
43
|
+
raise ArgumentError,
|
44
|
+
"Expected '#{value}' to be one of #{VALID_USAGE_TRACKING_VALUES.join(", ")}"
|
45
|
+
end
|
46
|
+
|
47
|
+
preferences = read
|
48
|
+
preferences[:usage_tracking] = value
|
49
|
+
write(preferences)
|
50
|
+
end
|
51
|
+
|
52
|
+
# !@visibility private
|
53
|
+
def user_id
|
54
|
+
preferences = read
|
55
|
+
|
56
|
+
unless valid_user_id?(preferences[:user_id])
|
57
|
+
preferences[:user_id] = SecureRandom.uuid
|
58
|
+
write(preferences)
|
59
|
+
end
|
60
|
+
|
61
|
+
preferences[:user_id]
|
62
|
+
end
|
63
|
+
|
64
|
+
# !@visibility private
|
65
|
+
def user_id=(value)
|
66
|
+
if !valid_user_id?(value)
|
67
|
+
raise ArgumentError,
|
68
|
+
"Expected '#{value}' to not be nil and not an empty string"
|
69
|
+
end
|
70
|
+
|
71
|
+
preferences = read
|
72
|
+
preferences[:user_id] = value
|
73
|
+
write(preferences)
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
# @!visibility private
|
79
|
+
def valid_user_tracking_value?(value)
|
80
|
+
VALID_USAGE_TRACKING_VALUES.include?(value)
|
81
|
+
end
|
82
|
+
|
83
|
+
# @!visibility private
|
84
|
+
def valid_user_id?(value)
|
85
|
+
!value.nil? && value != "" && value.is_a?(String)
|
86
|
+
end
|
87
|
+
|
88
|
+
# @!visibility private
|
89
|
+
#
|
90
|
+
# The preferences version
|
91
|
+
VERSION = "1.0"
|
92
|
+
|
93
|
+
# @!visibility private
|
94
|
+
#
|
95
|
+
# Ordered by permissiveness left to right ascending.
|
96
|
+
#
|
97
|
+
# "system_info" implies that "events" are also allowed.
|
98
|
+
VALID_USAGE_TRACKING_VALUES = ["none", "events", "system_info"]
|
99
|
+
|
100
|
+
# @!visibility private
|
101
|
+
def version
|
102
|
+
read[:version]
|
103
|
+
end
|
104
|
+
|
105
|
+
# @!visibility private
|
106
|
+
attr_reader :path
|
107
|
+
|
108
|
+
# @!visibility private
|
109
|
+
def ensure_preferences_dir
|
110
|
+
dir = File.dirname(@path)
|
111
|
+
unless File.exist?(dir)
|
112
|
+
FileUtils.mkdir_p(dir)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# @!visibility private
|
117
|
+
def defaults
|
118
|
+
{
|
119
|
+
:version => VERSION,
|
120
|
+
:usage_tracking => "system_info",
|
121
|
+
:user_id => SecureRandom.uuid
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
# @!visibility private
|
126
|
+
def write(hash)
|
127
|
+
if hash.nil?
|
128
|
+
raise ArgumentError, "Hash to write cannot be nil"
|
129
|
+
end
|
130
|
+
|
131
|
+
if !hash.is_a?(Hash)
|
132
|
+
raise ArgumentError, "Expected a Hash argument"
|
133
|
+
end
|
134
|
+
|
135
|
+
if hash.count == 0
|
136
|
+
raise ArgumentError, "Hash to write cannot be empty"
|
137
|
+
end
|
138
|
+
|
139
|
+
string = generate_json(hash)
|
140
|
+
|
141
|
+
ensure_preferences_dir
|
142
|
+
|
143
|
+
File.open(path, "w:UTF-8") do |file|
|
144
|
+
file.write(string)
|
145
|
+
end
|
146
|
+
|
147
|
+
true
|
148
|
+
end
|
149
|
+
|
150
|
+
# @!visibility private
|
151
|
+
def generate_json(hash)
|
152
|
+
begin
|
153
|
+
JSON.pretty_generate(hash)
|
154
|
+
rescue TypeError, JSON::UnparserError => _
|
155
|
+
|
156
|
+
log_defaults_reset
|
157
|
+
|
158
|
+
# Will always generate valid JSON
|
159
|
+
generate_json(defaults)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# @!visibility private
|
164
|
+
def read
|
165
|
+
if File.exist?(path)
|
166
|
+
|
167
|
+
string = File.read(path).force_encoding("UTF-8")
|
168
|
+
|
169
|
+
parse_json(string)
|
170
|
+
else
|
171
|
+
hash = defaults
|
172
|
+
write(hash)
|
173
|
+
hash
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# @!visibility private
|
178
|
+
def parse_json(string)
|
179
|
+
begin
|
180
|
+
JSON.parse(string, {:symbolize_names => true})
|
181
|
+
rescue TypeError, JSON::ParserError => _
|
182
|
+
|
183
|
+
log_defaults_reset
|
184
|
+
|
185
|
+
hash = defaults
|
186
|
+
write(hash)
|
187
|
+
hash
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
# @!visibility private
|
192
|
+
def log_defaults_reset
|
193
|
+
$stderr.puts(
|
194
|
+
%q{An error occurred while accessing your user preferences.
|
195
|
+
|
196
|
+
We have reset the preferences to the default settings.
|
197
|
+
|
198
|
+
If this happens on a regular basis, please create a GitHub issue.
|
199
|
+
|
200
|
+
Your preferences control various Calabash behaviors. In particular, they tell
|
201
|
+
us how much usage information you are willing to share. If you have previously
|
202
|
+
turned off usage tracking, you will need to disable it again using the command
|
203
|
+
line tools or the irb.
|
204
|
+
|
205
|
+
We do not recommend that edit the preferences file by hand.
|
206
|
+
})
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|