waterpig 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/waterpig/browser-console-logger.rb +120 -0
- data/lib/waterpig/browser-integration.rb +11 -0
- metadata +20 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2302e9b10ed3f0a42d946396094cf816e4232996
|
4
|
+
data.tar.gz: f4865aa1135e03154302b85d905d66d15bc22c64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14ffed5cfb8bdf24a35e61a417b9a973604b15cc07a1a12519485e30f69c185eb265e82632732f3af483c6c59875651a265da229d4602908c07d883acc60e472
|
7
|
+
data.tar.gz: 78cfec302ed71689e329584dd0144e1bd4a055bc4b20a1fc118df966a3fb58e05716c8fab29bac8d757717a555a32ece1b74d46a84ef43c464c38f0a236fbcee
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
module Waterpig
|
3
|
+
class BrowserConsoleLogger
|
4
|
+
include Singleton
|
5
|
+
|
6
|
+
require 'text-table'
|
7
|
+
attr_writer :file
|
8
|
+
attr_accessor :path
|
9
|
+
|
10
|
+
def file
|
11
|
+
@file ||= File.new(path, "w")
|
12
|
+
end
|
13
|
+
|
14
|
+
def emit_header(string)
|
15
|
+
file.write("#{bold(string)}\n")
|
16
|
+
end
|
17
|
+
|
18
|
+
def emit_log(entry)
|
19
|
+
file.write( entry['time'] + "\n")
|
20
|
+
if entry['type'] == 'table'
|
21
|
+
emit_table(entry['value'])
|
22
|
+
else
|
23
|
+
file.write(entry['value'].to_s + "\n\n")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Tables are either a simple hash, or a hash of hashes. See documentation
|
28
|
+
# on emit_simple_table and emit_complex_table.
|
29
|
+
def emit_table(hash)
|
30
|
+
table = Text::Table.new
|
31
|
+
if hash.values.any?{ |val| val.is_a?(Hash) }
|
32
|
+
emit_complex_table(hash, table)
|
33
|
+
else
|
34
|
+
emit_simple_table(hash, table)
|
35
|
+
end
|
36
|
+
@file.write(table.to_s + "\n\n")
|
37
|
+
end
|
38
|
+
|
39
|
+
# Simple hashes emit as a two-column table, with keys making up the index
|
40
|
+
# column:
|
41
|
+
# { a: 1, b: 4, c: 'foo'}
|
42
|
+
#
|
43
|
+
# Will render as:
|
44
|
+
#
|
45
|
+
# +-------+--------+
|
46
|
+
# | index | Values |
|
47
|
+
# +-------+--------+
|
48
|
+
# | a | 1 |
|
49
|
+
# +-------+--------+
|
50
|
+
# | b | 4 |
|
51
|
+
# +-------+--------+
|
52
|
+
# | c | 'foo' |
|
53
|
+
# +-------+--------+
|
54
|
+
def emit_simple_table(hash, table)
|
55
|
+
table.head = [ "index", "values" ]
|
56
|
+
hash.each do | key, val |
|
57
|
+
table.rows << [ key, val ]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# When they are a hash of hashes, used as follows:
|
62
|
+
# * The keys of the top-level hashes will be the leftmost column, "index".
|
63
|
+
# * The merged keys of the inner hashes will be the column headers
|
64
|
+
# * The values of the inner hashes will fill the table cells.
|
65
|
+
#
|
66
|
+
# So for example:
|
67
|
+
# { foo: { a: 1, b: 2 },
|
68
|
+
# bar: { a: 5, c: 3 }}
|
69
|
+
#
|
70
|
+
# Will render as:
|
71
|
+
# +-------+---+---+---+
|
72
|
+
# | index | a | b | c |
|
73
|
+
# +-------+---+---+---+
|
74
|
+
# | foo | 1 | 2 | |
|
75
|
+
# +-------+---+---+---+
|
76
|
+
# | bar | 5 | | 3 |
|
77
|
+
# +-------+---+---+---+
|
78
|
+
def emit_complex_table(hash, table)
|
79
|
+
keys = hash.reduce([]){ |memo, arr| memo + arr[1].keys }.uniq
|
80
|
+
table.head = [ "index" ] + keys
|
81
|
+
hash.each do |name, row|
|
82
|
+
table.rows << [ name ] + keys.map{ |key| row.fetch(key, nil)}
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def bold(string)
|
87
|
+
"\e[1m#{string}\e[0m"
|
88
|
+
end
|
89
|
+
|
90
|
+
class << self
|
91
|
+
def configure(config)
|
92
|
+
config.add_setting :waterpig_browser_console_log_path, :default => nil
|
93
|
+
config.add_setting :waterpig_log_browser_console, :default => ENV['LOG_BROWSER_CONSOLE']
|
94
|
+
|
95
|
+
config.before(:suite) do
|
96
|
+
if config.waterpig_log_browser_console
|
97
|
+
config.waterpig_browser_console_log_path ||= Rails.root.join("log/#{Rails.env}_browser_console.log")
|
98
|
+
config.waterpig_clearable_logs << 'test_browser_console'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
config.after(:each,:type => proc{|value|
|
103
|
+
config.waterpig_log_types && config.waterpig_log_types.include?(value)
|
104
|
+
}) do |example|
|
105
|
+
if config.waterpig_log_browser_console
|
106
|
+
logger = Waterpig::BrowserConsoleLogger.instance
|
107
|
+
logger.path = config.waterpig_browser_console_log_path
|
108
|
+
logger.emit_header "Browser console for #{example.full_description}"
|
109
|
+
console_entries = page.evaluate_script("console.history");
|
110
|
+
console_entries.each do |entry|
|
111
|
+
logger.emit_log(entry)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
end
|
@@ -10,6 +10,7 @@ require 'waterpig/ckeditor-tools'
|
|
10
10
|
require 'waterpig/tinymce-tools'
|
11
11
|
require 'waterpig/browser-tools'
|
12
12
|
require 'waterpig/browser-size'
|
13
|
+
require 'waterpig/browser-console-logger'
|
13
14
|
require 'waterpig/snap-step'
|
14
15
|
|
15
16
|
module Waterpig
|
@@ -56,6 +57,7 @@ RSpec.configure do |config|
|
|
56
57
|
config.add_setting :waterpig_autosnap, :default => ENV['WATERPIG_AUTOSNAP']
|
57
58
|
config.add_setting :waterpig_driver, :default => ENV['CAPYBARA_DRIVER']
|
58
59
|
config.add_setting :waterpig_js_driver, :default => ENV['CAPYBARA_JS_DRIVER']
|
60
|
+
config.add_setting :waterpig_clearable_logs, :default => [ 'test' ]
|
59
61
|
|
60
62
|
config.add_setting :waterpig_browser_sizes, :default => {
|
61
63
|
:mobile => { :width => 320, :height => 480 },
|
@@ -64,10 +66,18 @@ RSpec.configure do |config|
|
|
64
66
|
:desktop => { :width => 1024, :height => 1024 }
|
65
67
|
}
|
66
68
|
|
69
|
+
Waterpig::BrowserConsoleLogger.configure(config)
|
67
70
|
|
68
71
|
config.before(:suite) do
|
69
72
|
Capybara.default_driver = Waterpig.pick_capybara_driver(config.waterpig_driver)
|
70
73
|
Capybara.javascript_driver = Waterpig.pick_capybara_driver(config.waterpig_js_driver)
|
74
|
+
config.waterpig_clearable_logs.each do |logfile|
|
75
|
+
if File.directory?('log')
|
76
|
+
File::open("log/#{logfile}.log", "w") do |log|
|
77
|
+
log.write ""
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
71
81
|
end
|
72
82
|
|
73
83
|
if defined?(Timecop)
|
@@ -87,6 +97,7 @@ RSpec.configure do |config|
|
|
87
97
|
config.include Waterpig::BrowserSize, :type => proc{|value|
|
88
98
|
config.waterpig_browser_size_types && config.waterpig_browser_size_types.include?(value)
|
89
99
|
}
|
100
|
+
|
90
101
|
end
|
91
102
|
|
92
103
|
RSpec.configure do |config|
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: waterpig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Judson Lester
|
8
|
+
- Evan Dorn
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2015-03-17 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: capybara
|
@@ -52,10 +53,25 @@ dependencies:
|
|
52
53
|
- - '>'
|
53
54
|
- !ruby/object:Gem::Version
|
54
55
|
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: text-table
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.2.3
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.2.3
|
55
70
|
description: |2
|
56
71
|
Because waterpig is what the scientific name for a capybara translates to, that's why.
|
57
72
|
email:
|
58
73
|
- nyarly@gmail.com
|
74
|
+
- evan@lrdesign.com
|
59
75
|
executables: []
|
60
76
|
extensions: []
|
61
77
|
extra_rdoc_files: []
|
@@ -68,6 +84,7 @@ files:
|
|
68
84
|
- lib/waterpig/deadbeat-connections.rb
|
69
85
|
- lib/waterpig/tinymce-tools.rb
|
70
86
|
- lib/waterpig/browser-integration.rb
|
87
|
+
- lib/waterpig/browser-console-logger.rb
|
71
88
|
- lib/waterpig/poltergeist.rb
|
72
89
|
- lib/waterpig/warning-suppressor.rb
|
73
90
|
- lib/waterpig/snap-step.rb
|
@@ -86,7 +103,7 @@ rdoc_options:
|
|
86
103
|
- --main
|
87
104
|
- doc/README
|
88
105
|
- --title
|
89
|
-
- waterpig-0.
|
106
|
+
- waterpig-0.6.0 Documentation
|
90
107
|
require_paths:
|
91
108
|
- lib/
|
92
109
|
required_ruby_version: !ruby/object:Gem::Requirement
|