superbara 0.4.1 → 0.5.0

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/lib/superbara.rb CHANGED
@@ -1,24 +1,142 @@
1
1
  require "io/console"
2
2
  require "colorize"
3
+ require "faker"
3
4
 
4
5
  require "capybara"
5
6
  require "capybara/dsl"
7
+
6
8
  require "selenium-webdriver"
7
9
 
10
+ require_relative "selenium_monkey"
8
11
  require_relative "capybara_monkey"
9
12
  require_relative "pry_monkey"
10
13
 
14
+ ::Kernel.send :undef_method, :p
15
+
11
16
  module Superbara
12
- def self.puts(str)
13
- return unless ENV["SUPERBARA_DEBUG"]
14
- Kernel.puts "Superbara #{caller[0][/`.*'/][1..-2]}: #{str}"
17
+ @@project_name = nil
18
+ @@shell = false
19
+ @@current_context = nil
20
+ @@visual = false
21
+ @@started_at = Time.now
22
+
23
+ def self.start!
24
+ @@started_at = Time.now
25
+ end
26
+
27
+ def self.seconds_since_start
28
+ return unless @@started_at
29
+ (Time.now - @@started_at).to_f.round(1)
30
+ end
31
+
32
+ def self.shell?
33
+ @@shell
34
+ end
35
+
36
+ def self.shell_enable!
37
+ @@shell = true
38
+ end
39
+
40
+ def self.shell_disable!
41
+ @@shell = false
42
+ end
43
+
44
+ def self.visual?
45
+ return true if @@visual
46
+ return true if ENV["SUPERBARA_VISUAL"]
47
+ end
48
+
49
+ def self.visual_enable!
50
+ @@visual = true
51
+ end
52
+
53
+ def self.visual_disable!
54
+ @@visual = false
55
+ end
56
+
57
+ def self.current_context=(ctx)
58
+ @@current_context = ctx
59
+ end
60
+
61
+ def self.current_context
62
+ @@current_context
63
+ end
64
+
65
+ def self.output(str)
66
+ if Superbara.shell? || Superbara.seconds_since_start.nil?
67
+ puts str
68
+ else
69
+ puts "#{Superbara.seconds_since_start.to_s.ljust(6)} #{str}"
70
+ end
71
+ end
72
+
73
+ def self.project_path=(path)
74
+ @@project_path = path
75
+ end
76
+
77
+ def self.project_path
78
+ @@project_path
79
+ end
80
+
81
+ def self.project_name
82
+ File.basename(@@project_path)
83
+ end
84
+
85
+ def self.toast(text, duration: 1, delay: 0)
86
+ return unless Superbara.visual?
87
+
88
+ duration_millis = (duration * 1000).floor
89
+ js = """
90
+ if (window.__superbaraToastContainerElem) {
91
+ __superbaraToastContainerElem.remove();
92
+ delete(window.__superbaraToastContainerElem);
93
+ }
94
+
95
+ window.__superbaraToastContainerElem = document.createElement('div');
96
+ __superbaraToastContainerElem.style.position = 'fixed';
97
+ __superbaraToastContainerElem.style.top = '0px';
98
+ __superbaraToastContainerElem.style.left = '0px';
99
+ __superbaraToastContainerElem.style.height = '100%';
100
+ __superbaraToastContainerElem.style.width = '100%';
101
+ __superbaraToastContainerElem.style.backgroundColor = 'rgba(0,0,0,0.80)';
102
+ __superbaraToastContainerElem.style.display = 'table';
103
+ __superbaraToastContainerElem.style.zIndex = '99999999999';
104
+
105
+ var __superbaraToastTextElem = document.createElement('p');
106
+ __superbaraToastTextElem.style.display = 'table-cell';
107
+ __superbaraToastTextElem.style.verticalAlign = 'middle';
108
+ __superbaraToastTextElem.style.textAlign = 'center';
109
+
110
+ __superbaraToastTextElem.style.fontFamily = 'Helvetica, Arial';
111
+
112
+ __superbaraToastTextElem.style.fontSize = '4vw';
113
+ __superbaraToastTextElem.style.lineHeight = '4vw';
114
+ __superbaraToastTextElem.style.color = 'white';
115
+
116
+ __superbaraToastTextElem.textContent = '#{text}';
117
+
118
+ __superbaraToastContainerElem.appendChild(__superbaraToastTextElem);
119
+ window.document.body.appendChild(__superbaraToastContainerElem);
120
+
121
+ setTimeout(function() {
122
+ //__superbaraToastContainerElem.remove();
123
+ __superbaraToastContainerElem.style.visibility = 'hidden';
124
+ __superbaraToastContainerElem.style.opacity = 0;
125
+ __superbaraToastContainerElem.style.transition = 'visibility 0s 0.25s, opacity 0.25s linear';
126
+ // delete(window.__superbaraToastContainerElem);
127
+ }, #{duration_millis});
128
+ """
129
+ Capybara.current_session.current_window.session.execute_script js
130
+ sleep delay
15
131
  end
16
132
  end
17
133
 
18
134
  require_relative "superbara/version"
19
135
  require_relative "superbara/helpers"
20
-
21
136
  require_relative "superbara/chrome"
137
+ require_relative "superbara/cli"
138
+ require_relative "superbara/context"
139
+ require_relative "superbara/web"
22
140
 
23
141
  trap "SIGINT" do
24
142
  puts "
@@ -28,10 +146,8 @@ control+c pressed, closing the browser..."
28
146
  Capybara.current_session.driver.browser.close
29
147
  end
30
148
  rescue Timeout::Error => e
31
- puts "Browser failed to close within 2 seconds, exiting anyway.."
149
+ puts "..browser failed to close within 2 seconds, exiting."
32
150
  end
33
-
34
- exit 99
35
151
  end
36
152
 
37
153
  Superbara::Chrome.register_drivers
@@ -39,6 +155,10 @@ Superbara::Chrome.register_drivers
39
155
  require "chromedriver/helper"
40
156
  Chromedriver.set_version "2.37"
41
157
 
42
- Capybara.default_driver = :chrome
43
- Capybara.default_max_wait_time = 1
158
+ Capybara.default_driver = if ENV["CHROME_URL"]
159
+ :chrome_remote
160
+ else
161
+ :chrome
162
+ end
44
163
 
164
+ Capybara.default_max_wait_time = 0.1
data/superbara.gemspec CHANGED
@@ -24,10 +24,11 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency 'colorize', '~> 0.8', '>= 0.8.1'
25
25
  spec.add_dependency 'pry-byebug', '~> 3.6', '>= 3.6.0'
26
26
  spec.add_dependency 'binding_of_caller', '~> 0.8', '>=0.8.0'
27
- spec.add_dependency 'capybara', '~> 3.0', '>= 3.0.0'
28
- spec.add_dependency 'selenium-webdriver', '~> 3.11', '>= 3.11.0'
27
+ spec.add_dependency 'capybara', '~> 3.1', '>= 3.1.0'
28
+ spec.add_dependency 'selenium-webdriver', '~> 3.12', '>= 3.12.0'
29
29
  spec.add_dependency 'chromedriver-helper', '~> 1.2.0', '>= 1.2.0'
30
-
30
+ spec.add_dependency 'faker', '~> 1.8', '>= 1.8.7'
31
+ spec.add_dependency 'sinatra', '~> 2.0', '>= 2.0.1'
31
32
  spec.add_development_dependency 'bundler', '~> 1.15', '>= 1.15.0'
32
33
  spec.add_development_dependency 'rake', '~> 10.0', '>= 10.0.0'
33
34
  spec.add_development_dependency 'rspec', '~> 3.7', '>= 3.7.0'
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,16 @@
1
+ <h1>Superbara</h1>
2
+ <hr>
3
+ <a href="another.html">Another page</a>
4
+ <a href="1.html">1.html</a>
5
+ <a href="/__superbara/long">long</a>
6
+
7
+ <hr>
8
+
9
+ <form>
10
+ <label>name:</label>
11
+ <input name="name"></input>
12
+ <br>
13
+ <textarea rows="10"></textarea>
14
+ <br>
15
+ <input type="submit">
16
+ </form>
@@ -0,0 +1,3 @@
1
+ <a href="/">root</a>
2
+ <hr>
3
+ <%= yield %>
@@ -0,0 +1,3 @@
1
+ <% 10_000.times do |t| %>
2
+ <h2><%= t+1 %></h2>
3
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <script>
2
+ function authorQuiz() {
3
+ answer = prompt("Who is the author of Hello Ruby?");
4
+ if (answer != "Linda Liukas") {
5
+ alert("Incorrect!");
6
+ }
7
+ }
8
+ </script>
9
+
10
+ <a href="javascript:authorQuiz()">Author Quiz!</a>
@@ -0,0 +1,8 @@
1
+ <script>
2
+ ms500 = document.createElement("h2");
3
+ ms500.textContent = "500ms";
4
+
5
+ setTimeout(function() {
6
+ document.body.appendChild(ms500);
7
+ }, 500)
8
+ </script>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: superbara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matti Paksula
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-13 00:00:00.000000000 Z
11
+ date: 2018-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -76,40 +76,40 @@ dependencies:
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: '3.0'
79
+ version: '3.1'
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 3.0.0
82
+ version: 3.1.0
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.0'
89
+ version: '3.1'
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 3.0.0
92
+ version: 3.1.0
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: selenium-webdriver
95
95
  requirement: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: '3.11'
99
+ version: '3.12'
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 3.11.0
102
+ version: 3.12.0
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '3.11'
109
+ version: '3.12'
110
110
  - - ">="
111
111
  - !ruby/object:Gem::Version
112
- version: 3.11.0
112
+ version: 3.12.0
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: chromedriver-helper
115
115
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +130,46 @@ dependencies:
130
130
  - - ">="
131
131
  - !ruby/object:Gem::Version
132
132
  version: 1.2.0
133
+ - !ruby/object:Gem::Dependency
134
+ name: faker
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '1.8'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 1.8.7
143
+ type: :runtime
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '1.8'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 1.8.7
153
+ - !ruby/object:Gem::Dependency
154
+ name: sinatra
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '2.0'
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: 2.0.1
163
+ type: :runtime
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '2.0'
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: 2.0.1
133
173
  - !ruby/object:Gem::Dependency
134
174
  name: bundler
135
175
  requirement: !ruby/object:Gem::Requirement
@@ -215,24 +255,36 @@ files:
215
255
  - docker-compose.build.yml
216
256
  - docker-compose.test.yml
217
257
  - docker-compose.yml
258
+ - e2e/example.rb
259
+ - e2e/init.rb
218
260
  - e2e/main.rb
261
+ - e2e/prompt.rb
262
+ - e2e/type.rb
263
+ - e2e/vars.rb
264
+ - e2e/wait.rb
219
265
  - exe/superbara
220
266
  - lib/capybara_monkey.rb
221
267
  - lib/pry_monkey.rb
268
+ - lib/selenium_monkey.rb
222
269
  - lib/superbara.rb
223
270
  - lib/superbara/chrome.rb
271
+ - lib/superbara/cli.rb
272
+ - lib/superbara/context.rb
224
273
  - lib/superbara/dsl.rb
225
274
  - lib/superbara/helpers.rb
226
275
  - lib/superbara/rspec.rb
227
276
  - lib/superbara/version.rb
228
- - lib/supershell
277
+ - lib/superbara/web.rb
229
278
  - superbara.gemspec
230
- - support/templates/test.rb
231
- - www/1.html
232
- - www/2.html
233
- - www/3.html
234
- - www/another.html
235
- - www/index.html
279
+ - web/public/1.html
280
+ - web/public/2.html
281
+ - web/public/3.html
282
+ - web/public/another.html
283
+ - web/public/index.html
284
+ - web/views/layout.erb
285
+ - web/views/long.erb
286
+ - web/views/prompt.erb
287
+ - web/views/wait.erb
236
288
  homepage: https://www.github.com/matti/superbara
237
289
  licenses:
238
290
  - MIT
@@ -253,7 +305,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
253
305
  version: '0'
254
306
  requirements: []
255
307
  rubyforge_project:
256
- rubygems_version: 2.7.3
308
+ rubygems_version: 2.7.6
257
309
  signing_key:
258
310
  specification_version: 4
259
311
  summary: Super Capybara
data/lib/supershell DELETED
@@ -1,158 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -e
3
- DIR=$( cd -P -- "$(dirname -- "$(command -v -- "$0")")" && pwd -P )
4
-
5
- Edit () {
6
- if [ "$EDITOR" != "" ]; then
7
- $EDITOR $1
8
- else
9
- for editor in code atom micro vim vi msword; do
10
- set +e
11
- command -v $editor
12
- if [ "$?" = 0 ]; then
13
- $editor $1
14
- break
15
- fi
16
- set -e
17
- done
18
- fi
19
- }
20
-
21
- Prompt () {
22
- while true; do
23
- if [ "$SUPERBARA_FRONTEND" = "noninteractive" ]; then
24
- echo "non-interactive mode enabled"
25
- break
26
- fi
27
-
28
- printf "superbara $1 (enter or [r]estart, [e]dit, [q]uit) > "
29
- read input
30
- case "$input" in
31
- ""|"restart"|"r")
32
- echo "starting.."
33
- break
34
- ;;
35
- "edit"|"e")
36
- Edit $1
37
- ;;
38
- "quit"|"exit"|"q")
39
- echo "bye."
40
- exit 0
41
- ;;
42
- *)
43
- echo "err: Unknown input $input
44
-
45
- Usage:
46
- enter (r, restart) - restart test
47
- e or edit - open test in \$EDITOR (set to: $EDITOR) or best guess
48
- q or quit - exit
49
-
50
- "
51
- ;;
52
- esac
53
- done
54
- }
55
-
56
- Usage () {
57
- echo "USAGE: superbara
58
-
59
- superbara init <testdir>
60
- superbara edit <testdir>
61
- superbara start <testdir>
62
- superbara run <testdir>
63
- "
64
- exit 0
65
- }
66
-
67
- Error () {
68
- echo "err: $@"
69
- exit 1
70
- }
71
-
72
- case $1 in
73
- ""|"init"|"version")
74
- ;;
75
- *)
76
- if [ -f $2 ]; then
77
- test_file=$2
78
- else
79
- test_file="${2}/main.rb"
80
- fi
81
-
82
- if [ ! -f "$test_file" ]; then
83
- Error "$test_file not found, create it with superbara init first"
84
- fi
85
- ;;
86
- esac
87
-
88
- case $1 in
89
- "edit")
90
- Edit $test_file
91
- exit 0
92
- ;;
93
- "init")
94
- test_name=$(basename $2)
95
- spec_file="main.rb"
96
- target_file="${2}/${spec_file}"
97
-
98
- if [ -f "$target_file" ]; then
99
- Error "$target_file already exists"
100
- fi
101
- mkdir -p $2
102
- cat $DIR/../support/templates/test.rb > "$target_file"
103
-
104
- echo " --> created $target_file
105
-
106
- start testing with:
107
-
108
- superbara start $2
109
- "
110
- exit 0
111
- ;;
112
- "start")
113
- shift
114
- mode=workbench
115
- ;;
116
- "run")
117
- shift
118
- mode=single
119
- ;;
120
- "version")
121
- ruby -r$DIR/superbara -e "puts Superbara::VERSION"
122
- exit 0
123
- ;;
124
- *)
125
- Usage
126
- ;;
127
- esac
128
-
129
- while true; do
130
- set +e
131
- ruby -r"$DIR/superbara" -r"$DIR/superbara/dsl" "$1/"*.rb
132
- exit_code=$?
133
- set -e
134
-
135
- case "$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 exit code $exit_code"
155
- exit 1
156
- ;;
157
- esac
158
- done
@@ -1,6 +0,0 @@
1
- visit "http://www.example.com"
2
-
3
- more_link = find "a", text: /ore information/
4
- debug
5
- more_link.click
6
- debug
data/www/index.html DELETED
@@ -1,4 +0,0 @@
1
- <h1>Superbara</h1>
2
- <hr>
3
- <a href="another.html">Another page</a>
4
- <a href="1.html">1.html</a>