superbara 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.rspec +1 -0
- data/.ruby-gemset +2 -0
- data/.ruby-version +1 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +99 -0
- data/README.md +12 -0
- data/Rakefile +6 -0
- data/bin/autotest +4 -0
- data/bin/console +13 -0
- data/bin/release +3 -0
- data/exe/superbara +5 -0
- data/lib/pry_monkey.rb +92 -0
- data/lib/superbara/drivers/chrome.rb +10 -0
- data/lib/superbara/drivers/chrome_headless.rb +10 -0
- data/lib/superbara/dsl.rb +99 -0
- data/lib/superbara/helpers.rb +34 -0
- data/lib/superbara/version.rb +3 -0
- data/lib/superbara.rb +64 -0
- data/lib/supershell +158 -0
- data/superbara.gemspec +35 -0
- metadata +206 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 659215e85670d441f58b6f032b23fa89aacb449c
|
4
|
+
data.tar.gz: 99aaed6b34fe5b705e018a071ffd8d08f859e6c2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 55732a37e7a80671757ac437665563ea0d6bf0e470556341eafe44472a1a6fa430d64d30b56859b28f41637c540273352cd0eb5f9957b2e5d3250eefdc4a4b89
|
7
|
+
data.tar.gz: 896fe7a36c6dde7b767a21be32afec788514ca65d327d95f721e05afd847f1cecabe4402dbaab5252d0db88e850a26efd29023cca51570916c4f3903aac24811
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.ruby-gemset
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.4.1
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
superbara (0.0.1)
|
5
|
+
binding_of_caller
|
6
|
+
capybara (= 2.15.1)
|
7
|
+
chromedriver-helper (= 1.1.0)
|
8
|
+
colorize (= 0.8.1)
|
9
|
+
pry-byebug (= 3.4.2)
|
10
|
+
rspec (= 3.6.0)
|
11
|
+
selenium-webdriver (= 3.5.1)
|
12
|
+
|
13
|
+
GEM
|
14
|
+
remote: https://rubygems.org/
|
15
|
+
specs:
|
16
|
+
addressable (2.5.1)
|
17
|
+
public_suffix (~> 2.0, >= 2.0.2)
|
18
|
+
archive-zip (0.7.0)
|
19
|
+
io-like (~> 0.3.0)
|
20
|
+
binding_of_caller (0.7.2)
|
21
|
+
debug_inspector (>= 0.0.1)
|
22
|
+
byebug (9.0.6)
|
23
|
+
capybara (2.15.1)
|
24
|
+
addressable
|
25
|
+
mini_mime (>= 0.1.3)
|
26
|
+
nokogiri (>= 1.3.3)
|
27
|
+
rack (>= 1.0.0)
|
28
|
+
rack-test (>= 0.5.4)
|
29
|
+
xpath (~> 2.0)
|
30
|
+
childprocess (0.7.1)
|
31
|
+
ffi (~> 1.0, >= 1.0.11)
|
32
|
+
chromedriver-helper (1.1.0)
|
33
|
+
archive-zip (~> 0.7.0)
|
34
|
+
nokogiri (~> 1.6)
|
35
|
+
coderay (1.1.1)
|
36
|
+
colorize (0.8.1)
|
37
|
+
debug_inspector (0.0.3)
|
38
|
+
diff-lcs (1.3)
|
39
|
+
ffi (1.9.18)
|
40
|
+
io-like (0.3.0)
|
41
|
+
listen (3.1.5)
|
42
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
43
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
44
|
+
ruby_dep (~> 1.2)
|
45
|
+
method_source (0.8.2)
|
46
|
+
mini_mime (0.1.4)
|
47
|
+
mini_portile2 (2.2.0)
|
48
|
+
nokogiri (1.8.0)
|
49
|
+
mini_portile2 (~> 2.2.0)
|
50
|
+
pry (0.10.4)
|
51
|
+
coderay (~> 1.1.0)
|
52
|
+
method_source (~> 0.8.1)
|
53
|
+
slop (~> 3.4)
|
54
|
+
pry-byebug (3.4.2)
|
55
|
+
byebug (~> 9.0)
|
56
|
+
pry (~> 0.10)
|
57
|
+
public_suffix (2.0.5)
|
58
|
+
rack (2.0.3)
|
59
|
+
rack-test (0.7.0)
|
60
|
+
rack (>= 1.0, < 3)
|
61
|
+
rake (10.5.0)
|
62
|
+
rb-fsevent (0.10.2)
|
63
|
+
rb-inotify (0.9.10)
|
64
|
+
ffi (>= 0.5.0, < 2)
|
65
|
+
rerun (0.11.0)
|
66
|
+
listen (~> 3.0)
|
67
|
+
rspec (3.6.0)
|
68
|
+
rspec-core (~> 3.6.0)
|
69
|
+
rspec-expectations (~> 3.6.0)
|
70
|
+
rspec-mocks (~> 3.6.0)
|
71
|
+
rspec-core (3.6.0)
|
72
|
+
rspec-support (~> 3.6.0)
|
73
|
+
rspec-expectations (3.6.0)
|
74
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
75
|
+
rspec-support (~> 3.6.0)
|
76
|
+
rspec-mocks (3.6.0)
|
77
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
78
|
+
rspec-support (~> 3.6.0)
|
79
|
+
rspec-support (3.6.0)
|
80
|
+
ruby_dep (1.5.0)
|
81
|
+
rubyzip (1.2.1)
|
82
|
+
selenium-webdriver (3.5.1)
|
83
|
+
childprocess (~> 0.5)
|
84
|
+
rubyzip (~> 1.0)
|
85
|
+
slop (3.6.0)
|
86
|
+
xpath (2.1.0)
|
87
|
+
nokogiri (~> 1.3)
|
88
|
+
|
89
|
+
PLATFORMS
|
90
|
+
ruby
|
91
|
+
|
92
|
+
DEPENDENCIES
|
93
|
+
bundler (~> 1.15)
|
94
|
+
rake (~> 10.0)
|
95
|
+
rerun (= 0.11.0)
|
96
|
+
superbara!
|
97
|
+
|
98
|
+
BUNDLED WITH
|
99
|
+
1.15.3
|
data/README.md
ADDED
data/Rakefile
ADDED
data/bin/autotest
ADDED
data/bin/console
ADDED
data/bin/release
ADDED
data/exe/superbara
ADDED
data/lib/pry_monkey.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require "pry-byebug"
|
2
|
+
require "binding_of_caller"
|
3
|
+
class Pry
|
4
|
+
class Command::Whereami < Pry::ClassCommand
|
5
|
+
alias_method :process_orig, :process
|
6
|
+
def process
|
7
|
+
if $supress_pry_whereami
|
8
|
+
$supress_pry_whereami = false
|
9
|
+
puts ""
|
10
|
+
nil
|
11
|
+
else
|
12
|
+
process_orig
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Pry.config.prompt = proc {
|
19
|
+
prefix = "\n==[ console ]== (".colorize(:black).on_white
|
20
|
+
|
21
|
+
prefix << "r".colorize(:light_blue).on_white.underline
|
22
|
+
prefix << "estart, ".colorize(:black).on_white
|
23
|
+
|
24
|
+
prefix << "c".colorize(:light_blue).on_white.underline
|
25
|
+
prefix << "ontinue, ".colorize(:black).on_white
|
26
|
+
|
27
|
+
prefix << "e".colorize(:light_blue).on_white.underline
|
28
|
+
prefix << "dit, ".colorize(:black).on_white
|
29
|
+
|
30
|
+
prefix << "q".colorize(:light_blue).on_white.underline
|
31
|
+
prefix << "uit".colorize(:black).on_white
|
32
|
+
|
33
|
+
prefix << ") ".colorize(:black).on_white
|
34
|
+
prefix << "\n"
|
35
|
+
print prefix
|
36
|
+
|
37
|
+
""
|
38
|
+
}
|
39
|
+
|
40
|
+
Pry.commands.alias_command 'c', 'continue'
|
41
|
+
Pry.commands.alias_command 's', 'step'
|
42
|
+
Pry.commands.alias_command 'n', 'next'
|
43
|
+
Pry.commands.alias_command 'h', 'help'
|
44
|
+
|
45
|
+
Pry::Commands.command /^e$/, "edit" do
|
46
|
+
puts "Opening #{$superbara_current_file} ..."
|
47
|
+
begin
|
48
|
+
`superbara edit #{$superbara_current_file}`
|
49
|
+
rescue Exception => ex
|
50
|
+
puts "[development mode edit]"
|
51
|
+
`exe/superbara edit #{$superbara_current_file}`
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
Pry::Commands.command /^help$/, "help" do
|
56
|
+
|
57
|
+
capybara_help_help = '''
|
58
|
+
e = find "h1", text: "Example Domain"
|
59
|
+
e = find "h1", text: /xample Dom/
|
60
|
+
e.click
|
61
|
+
|
62
|
+
e = wait 2 do
|
63
|
+
find "p", text: "Added to the cart"
|
64
|
+
end
|
65
|
+
e.click
|
66
|
+
|
67
|
+
more: https://github.com/teamcapybara/capybara#the-dsl'''
|
68
|
+
|
69
|
+
capybara_help_header_prefix = "== HELP "
|
70
|
+
capybara_help_header_suffix = "=" * (IO.console.winsize.last - capybara_help_header_prefix.size)
|
71
|
+
|
72
|
+
puts """
|
73
|
+
#{capybara_help_header_prefix}#{capybara_help_header_suffix}
|
74
|
+
#{capybara_help_help}
|
75
|
+
""".colorize(:light_green)
|
76
|
+
end
|
77
|
+
|
78
|
+
Pry::Commands.command /^q$/, "abort" do
|
79
|
+
exit 1
|
80
|
+
end
|
81
|
+
|
82
|
+
Pry::Commands.command /^r$/, "retry" do
|
83
|
+
exit 2
|
84
|
+
end
|
85
|
+
|
86
|
+
Pry::Commands.command /^$/, "repeat last command if stepping" do
|
87
|
+
last_command = Pry.history.to_a.last
|
88
|
+
|
89
|
+
if ["next", "n", "step", "s", "continue", "c"].include? last_command
|
90
|
+
_pry_.run_command last_command
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Capybara.register_driver :chrome do
|
2
|
+
options = ::Selenium::WebDriver::Chrome::Options.new
|
3
|
+
options.add_argument 'window-size=1680,1024'
|
4
|
+
options.add_argument 'disable-infobars'
|
5
|
+
|
6
|
+
Capybara::Selenium::Driver.new(nil,
|
7
|
+
browser: :chrome,
|
8
|
+
options: options
|
9
|
+
)
|
10
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module Superbara; module DSL
|
2
|
+
def wait(seconds, &block)
|
3
|
+
def formatted_output(status, took_delta)
|
4
|
+
word, color = if status
|
5
|
+
["ok", :green]
|
6
|
+
else
|
7
|
+
["FAIL", :red]
|
8
|
+
end
|
9
|
+
|
10
|
+
puts "#{word.colorize(color)} (took #{(took_delta)}s)"
|
11
|
+
end
|
12
|
+
|
13
|
+
seconds = seconds.to_f
|
14
|
+
|
15
|
+
print "--> waiting max #{seconds}s "
|
16
|
+
started_at = Time.now
|
17
|
+
|
18
|
+
previous_capybara_default_max_wait_time = Capybara.default_max_wait_time
|
19
|
+
block_value = nil
|
20
|
+
exception = nil
|
21
|
+
timed_out = false
|
22
|
+
begin
|
23
|
+
Capybara.default_max_wait_time = seconds
|
24
|
+
Timeout::timeout (seconds+0.1) do
|
25
|
+
block_value = block.call
|
26
|
+
end
|
27
|
+
rescue Timeout::Error => ex
|
28
|
+
timed_out = true
|
29
|
+
rescue Exception => ex
|
30
|
+
exception = ex
|
31
|
+
end
|
32
|
+
|
33
|
+
took_delta = (Time.now - started_at).floor(2)
|
34
|
+
Capybara.default_max_wait_time = previous_capybara_default_max_wait_time
|
35
|
+
|
36
|
+
if exception || timed_out
|
37
|
+
formatted_output false, took_delta
|
38
|
+
|
39
|
+
additional_started_at = Time.now
|
40
|
+
additional_block_value = nil
|
41
|
+
additional_exception = nil
|
42
|
+
puts " testing if waiting for 2 seconds more would help.."
|
43
|
+
begin
|
44
|
+
Capybara.default_max_wait_time = 2
|
45
|
+
additional_block_value = block.call
|
46
|
+
rescue Exception => ex
|
47
|
+
additional_exception = ex
|
48
|
+
end
|
49
|
+
additional_took_delta = (Time.now - additional_started_at).floor(2)
|
50
|
+
suggested_wait_value = (seconds + additional_took_delta).floor(2)
|
51
|
+
|
52
|
+
if additional_exception || additional_block_value.nil?
|
53
|
+
puts " ..did not help."
|
54
|
+
else
|
55
|
+
puts " ..setting wait to >#{suggested_wait_value} would help here?"
|
56
|
+
end
|
57
|
+
|
58
|
+
if exception
|
59
|
+
raise exception
|
60
|
+
else
|
61
|
+
raise "capybara timed out"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
if block_value == false
|
66
|
+
formatted_output false, took_delta
|
67
|
+
raise "wait condition was falsy"
|
68
|
+
end
|
69
|
+
|
70
|
+
if block_value == nil
|
71
|
+
formatted_output false, took_delta
|
72
|
+
raise "wait condition was nil"
|
73
|
+
end
|
74
|
+
|
75
|
+
formatted_output true, took_delta
|
76
|
+
return block_value
|
77
|
+
end
|
78
|
+
|
79
|
+
def debug(exception_occurred:false)
|
80
|
+
return if ENV['SUPERBARA_FRONTEND'] == "noninteractive"
|
81
|
+
debug_help = """
|
82
|
+
c - continue to the next debug breakpoint
|
83
|
+
s - step to the next line
|
84
|
+
r - retry running
|
85
|
+
h - help on commands available
|
86
|
+
q - exit to shell"""
|
87
|
+
|
88
|
+
debug_header_prefix = "== DEBUG "
|
89
|
+
debug_header_suffix = "=" * (IO.console.winsize.last - debug_header_prefix.size)
|
90
|
+
|
91
|
+
puts """
|
92
|
+
#{debug_header_prefix}#{debug_header_suffix}
|
93
|
+
#{debug_help}
|
94
|
+
""".colorize(:light_green)
|
95
|
+
|
96
|
+
$supress_pry_whereami = true if exception_occurred
|
97
|
+
Pry.start(binding.of_caller(1))
|
98
|
+
end
|
99
|
+
end; end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Superbara; module Helpers
|
2
|
+
def self.highlight_element(elem, styles={}, remove_highlight=100)
|
3
|
+
# Yes, could have used a template here.
|
4
|
+
js = """
|
5
|
+
window.__superbara = {};
|
6
|
+
__superbara.getElementByXpath = function(path) {
|
7
|
+
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
|
8
|
+
};
|
9
|
+
window.__superbara.highlightElem = window.__superbara.getElementByXpath('#{elem.path}');
|
10
|
+
window.__superbara.highlightElem.oldStyle = {};
|
11
|
+
"""
|
12
|
+
styles.each_pair do |k,v|
|
13
|
+
js << """window.__superbara.highlightElem.oldStyle.#{k} = window.__superbara.highlightElem.style.#{k};
|
14
|
+
window.__superbara.highlightElem.style.#{k} = '#{v}'
|
15
|
+
"""
|
16
|
+
end
|
17
|
+
|
18
|
+
js << """
|
19
|
+
window.setTimeout(function() {
|
20
|
+
var e = window.__superbara.getElementByXpath('#{elem.path}');
|
21
|
+
"""
|
22
|
+
styles.each_pair do |k,v|
|
23
|
+
js << """e.style.#{k} = e.oldStyle.#{k};
|
24
|
+
"""
|
25
|
+
end
|
26
|
+
|
27
|
+
js << """
|
28
|
+
}, #{remove_highlight})
|
29
|
+
"""
|
30
|
+
|
31
|
+
Capybara.current_session.current_window.session.execute_script js
|
32
|
+
end
|
33
|
+
|
34
|
+
end; end
|
data/lib/superbara.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require "io/console"
|
2
|
+
require "colorize"
|
3
|
+
require "pry_monkey"
|
4
|
+
|
5
|
+
require "capybara"
|
6
|
+
require "capybara/dsl"
|
7
|
+
require "selenium-webdriver"
|
8
|
+
|
9
|
+
require "superbara/version"
|
10
|
+
require "superbara/dsl"
|
11
|
+
require "superbara/helpers"
|
12
|
+
require "superbara/drivers/chrome"
|
13
|
+
require "superbara/drivers/chrome_headless"
|
14
|
+
|
15
|
+
require "rspec"
|
16
|
+
|
17
|
+
trap "SIGINT" do
|
18
|
+
puts "
|
19
|
+
control+c pressed, closing the browser..."
|
20
|
+
begin
|
21
|
+
Timeout::timeout(2) do
|
22
|
+
Capybara.current_session.driver.browser.close
|
23
|
+
end
|
24
|
+
rescue Timeout::Error => e
|
25
|
+
puts "Browser failed to close within 2 seconds, exiting anyway.."
|
26
|
+
end
|
27
|
+
|
28
|
+
exit 99
|
29
|
+
end
|
30
|
+
|
31
|
+
Capybara.default_driver = :chrome
|
32
|
+
Capybara.default_max_wait_time = 1
|
33
|
+
|
34
|
+
RSpec.configure do |config|
|
35
|
+
config.include Capybara::DSL
|
36
|
+
config.include Superbara::DSL
|
37
|
+
|
38
|
+
config.fail_fast = true
|
39
|
+
|
40
|
+
config.before(:each) do |example|
|
41
|
+
$superbara_current_file = example.metadata[:example_group][:file_path]
|
42
|
+
|
43
|
+
puts ""
|
44
|
+
class_path = example.example_group_instance.class.to_s.split("::")
|
45
|
+
class_path.shift
|
46
|
+
class_path.shift
|
47
|
+
print class_path.shift
|
48
|
+
for c in class_path do
|
49
|
+
print "/#{c}"
|
50
|
+
end
|
51
|
+
puts " #{example.description} - #{example.location}"
|
52
|
+
puts "-"*IO.console.winsize.last
|
53
|
+
end
|
54
|
+
|
55
|
+
config.after(:each) do |example|
|
56
|
+
if example.exception
|
57
|
+
puts ("="*80).colorize(:yellow)
|
58
|
+
puts example.exception.message.colorize(:red)
|
59
|
+
puts ("="*80).colorize(:yellow)
|
60
|
+
debug(exception_occurred: true)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
#
|
64
|
+
end
|
data/lib/supershell
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
#!/usr/bin/env sh
|
2
|
+
set -e
|
3
|
+
|
4
|
+
Edit () {
|
5
|
+
if [ "$EDITOR" != "" ]; then
|
6
|
+
$EDITOR $1
|
7
|
+
else
|
8
|
+
for editor in code atom micro vim vi msword; do
|
9
|
+
set +e
|
10
|
+
command -v $editor
|
11
|
+
if [ "$?" = 0 ]; then
|
12
|
+
$editor $1
|
13
|
+
break
|
14
|
+
fi
|
15
|
+
set -e
|
16
|
+
done
|
17
|
+
fi
|
18
|
+
}
|
19
|
+
|
20
|
+
Prompt () {
|
21
|
+
while true; do
|
22
|
+
printf "superbara $1 (enter or [r]estart, [e]dit, [q]uit) > "
|
23
|
+
read input
|
24
|
+
case "$input" in
|
25
|
+
""|"restart"|"r")
|
26
|
+
echo "starting.."
|
27
|
+
break
|
28
|
+
;;
|
29
|
+
"edit"|"e")
|
30
|
+
Edit $1
|
31
|
+
;;
|
32
|
+
"quit"|"exit"|"q")
|
33
|
+
echo "bye."
|
34
|
+
exit 0
|
35
|
+
;;
|
36
|
+
*)
|
37
|
+
echo "err: Unknown input $input
|
38
|
+
|
39
|
+
Usage:
|
40
|
+
enter (r, restart) - restart test
|
41
|
+
e or edit - open test in \$EDITOR (set to: $EDITOR) or best guess
|
42
|
+
q or quit - exit
|
43
|
+
|
44
|
+
"
|
45
|
+
;;
|
46
|
+
esac
|
47
|
+
done
|
48
|
+
}
|
49
|
+
|
50
|
+
Usage () {
|
51
|
+
echo "USAGE: superbara
|
52
|
+
|
53
|
+
superbara init <testdir>
|
54
|
+
superbara edit <testdir>
|
55
|
+
superbara start <testdir>
|
56
|
+
superbara run <testdir>
|
57
|
+
"
|
58
|
+
exit 0
|
59
|
+
}
|
60
|
+
|
61
|
+
Error () {
|
62
|
+
echo "err: $@"
|
63
|
+
exit 1
|
64
|
+
}
|
65
|
+
|
66
|
+
case $1 in
|
67
|
+
""|"init")
|
68
|
+
;;
|
69
|
+
*)
|
70
|
+
if [ -f $2 ]; then
|
71
|
+
test_file=$2
|
72
|
+
else
|
73
|
+
test_file="${2}/${2}_spec.rb"
|
74
|
+
fi
|
75
|
+
|
76
|
+
if [ ! -f "$test_file" ]; then
|
77
|
+
Error "$test_file not found, create it with superbara init first"
|
78
|
+
fi
|
79
|
+
;;
|
80
|
+
esac
|
81
|
+
|
82
|
+
case $1 in
|
83
|
+
"edit")
|
84
|
+
Edit $test_file
|
85
|
+
exit 0
|
86
|
+
;;
|
87
|
+
"init")
|
88
|
+
test_name=$(basename $2)
|
89
|
+
spec_file="${test_name}_spec.rb"
|
90
|
+
target_file="${2}/${spec_file}"
|
91
|
+
|
92
|
+
if [ -f "$target_file" ]; then
|
93
|
+
Error "$target_file already exists"
|
94
|
+
fi
|
95
|
+
mkdir -p $2
|
96
|
+
echo "RSpec.describe \"${test_name}\" do" > $target_file
|
97
|
+
echo ''' it "loads" do
|
98
|
+
visit "http://www.example.com"
|
99
|
+
more_link = find "a", text: /ore information/
|
100
|
+
debug
|
101
|
+
more_link.click
|
102
|
+
debug
|
103
|
+
end
|
104
|
+
end''' >> "$target_file"
|
105
|
+
|
106
|
+
echo " --> created $target_file
|
107
|
+
|
108
|
+
start testing with:
|
109
|
+
|
110
|
+
superbara start $2
|
111
|
+
"
|
112
|
+
exit 0
|
113
|
+
;;
|
114
|
+
"start")
|
115
|
+
shift
|
116
|
+
mode=workbench
|
117
|
+
break
|
118
|
+
;;
|
119
|
+
"run")
|
120
|
+
shift
|
121
|
+
mode=single
|
122
|
+
break
|
123
|
+
;;
|
124
|
+
*)
|
125
|
+
Usage
|
126
|
+
;;
|
127
|
+
esac
|
128
|
+
|
129
|
+
while true; do
|
130
|
+
set +e
|
131
|
+
rspec --require superbara $@
|
132
|
+
rspec_exit_code=$?
|
133
|
+
set -e
|
134
|
+
|
135
|
+
case "$rspec_exit_code" in
|
136
|
+
0)
|
137
|
+
if [ "$mode" = "single" ]; then
|
138
|
+
exit 0
|
139
|
+
fi
|
140
|
+
Prompt $test_file
|
141
|
+
;;
|
142
|
+
1)
|
143
|
+
echo "bye."
|
144
|
+
exit 0
|
145
|
+
;;
|
146
|
+
2)
|
147
|
+
echo "retry"
|
148
|
+
;;
|
149
|
+
99)
|
150
|
+
echo "control+c pressed, exiting..."
|
151
|
+
exit 0
|
152
|
+
;;
|
153
|
+
*)
|
154
|
+
echo "err: unknown rspec exit code $rspec_exit_code"
|
155
|
+
exit 1
|
156
|
+
;;
|
157
|
+
esac
|
158
|
+
done
|
data/superbara.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "superbara/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "superbara"
|
8
|
+
spec.version = Superbara::VERSION
|
9
|
+
spec.authors = ["Matti Paksula"]
|
10
|
+
spec.email = ["matti.paksula@iki.fi"]
|
11
|
+
|
12
|
+
spec.summary = %q{Super Capybara}
|
13
|
+
spec.description = %q{Better way to build Capybara tests}
|
14
|
+
spec.homepage = "https://www.github.com/matti/superbara"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `if [ -d '.git' ]; then git ls-files -z; fi`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_dependency "colorize", "0.8.1"
|
25
|
+
spec.add_dependency "pry-byebug", "3.4.2"
|
26
|
+
spec.add_dependency "binding_of_caller", "0.7.2"
|
27
|
+
spec.add_dependency "capybara", "2.15.1"
|
28
|
+
spec.add_dependency "selenium-webdriver", "3.5.1"
|
29
|
+
spec.add_dependency "rspec", "3.6.0"
|
30
|
+
spec.add_dependency "chromedriver-helper", "1.1.0"
|
31
|
+
|
32
|
+
spec.add_development_dependency "rerun", "0.11.0"
|
33
|
+
spec.add_development_dependency "bundler", "~> 1.15"
|
34
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: superbara
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matti Paksula
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-10-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry-byebug
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.4.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.4.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: binding_of_caller
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.7.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.7.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: capybara
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.15.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.15.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: selenium-webdriver
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.5.1
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.5.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.6.0
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.6.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: chromedriver-helper
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.1.0
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.1.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rerun
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.11.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.11.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: bundler
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.15'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.15'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rake
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '10.0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '10.0'
|
153
|
+
description: Better way to build Capybara tests
|
154
|
+
email:
|
155
|
+
- matti.paksula@iki.fi
|
156
|
+
executables:
|
157
|
+
- superbara
|
158
|
+
extensions: []
|
159
|
+
extra_rdoc_files: []
|
160
|
+
files:
|
161
|
+
- ".gitignore"
|
162
|
+
- ".rspec"
|
163
|
+
- ".ruby-gemset"
|
164
|
+
- ".ruby-version"
|
165
|
+
- Gemfile
|
166
|
+
- Gemfile.lock
|
167
|
+
- README.md
|
168
|
+
- Rakefile
|
169
|
+
- bin/autotest
|
170
|
+
- bin/console
|
171
|
+
- bin/release
|
172
|
+
- exe/superbara
|
173
|
+
- lib/pry_monkey.rb
|
174
|
+
- lib/superbara.rb
|
175
|
+
- lib/superbara/drivers/chrome.rb
|
176
|
+
- lib/superbara/drivers/chrome_headless.rb
|
177
|
+
- lib/superbara/dsl.rb
|
178
|
+
- lib/superbara/helpers.rb
|
179
|
+
- lib/superbara/version.rb
|
180
|
+
- lib/supershell
|
181
|
+
- superbara.gemspec
|
182
|
+
homepage: https://www.github.com/matti/superbara
|
183
|
+
licenses:
|
184
|
+
- MIT
|
185
|
+
metadata: {}
|
186
|
+
post_install_message:
|
187
|
+
rdoc_options: []
|
188
|
+
require_paths:
|
189
|
+
- lib
|
190
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - ">="
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '0'
|
200
|
+
requirements: []
|
201
|
+
rubyforge_project:
|
202
|
+
rubygems_version: 2.6.13
|
203
|
+
signing_key:
|
204
|
+
specification_version: 4
|
205
|
+
summary: Super Capybara
|
206
|
+
test_files: []
|