browsery 0.1.0 → 0.2.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.
@@ -0,0 +1,21 @@
1
+ require 'selenium-webdriver'
2
+
3
+ module Selenium
4
+ module WebDriver
5
+
6
+ class Element
7
+
8
+ # Click in a way that is reliable for IE and works for other browsers as well
9
+ def browser_safe_click
10
+ bridge.browser == :internet_explorer ? send_keys(:enter) : click
11
+ end
12
+
13
+ # Click in a way that is reliable for IE and Firefox and works for other browsers as well
14
+ def browser_safe_checkbox_click
15
+ (bridge.browser == :internet_explorer || bridge.browser == :firefox) ? send_keys(:space) : click
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,94 @@
1
+ class FancyTapReporter < Tapout::Reporters::Abstract
2
+
3
+ #
4
+ def start_suite(entry)
5
+ @start = Time.now
6
+ @i = 0
7
+ #n = 0
8
+ #suite.concerns.each{ |f| f.concerns.each { |s| n += s.ok.size } }
9
+ puts "1..#{entry['count']}"
10
+ end
11
+
12
+ #
13
+ def start_case(entry)
14
+ #$stdout.puts concern.label.ansi(:bold)
15
+ end
16
+
17
+ #
18
+ def pass(entry)
19
+ super(entry)
20
+
21
+ @i += 1
22
+ #desc = entry['message'] #+ " #{ok.arguments.inspect}"
23
+
24
+ puts "ok".ansi(*config.pass) + highlight(" #{@i} - #{entry['label']}")
25
+ end
26
+
27
+ #
28
+ def fail(entry)
29
+ super(entry)
30
+
31
+ @i += 1
32
+ x = entry['exception']
33
+
34
+ #desc = #ok.concern.label + " #{ok.arguments.inspect}"
35
+
36
+ body = []
37
+ body << "FAIL #{x['file']}:#{x['line']}" #clean_backtrace(exception.backtrace)[0]
38
+ body << "#{x['message']}"
39
+ body << x['snippet']
40
+ body << x['backtrace']
41
+ body << entry['stdout']
42
+ body = body.join("\n").gsub(/^/, ' # ')
43
+
44
+ puts "not ok".ansi(*config.fail) + highlight(" #{@i} - #{entry['label']}")
45
+ puts body
46
+ end
47
+
48
+ #
49
+ def error(entry)
50
+ super(entry)
51
+
52
+ @i += 1
53
+ x = entry['exception']
54
+
55
+ #desc = ok.concern.label + " #{ok.arguments.inspect}"
56
+
57
+ body = []
58
+ body << "ERROR #{x['file']}:#{x['line']}" #clean_backtrace(exception.backtrace)[0..2].join(" \n")
59
+ body << "#{x['class']}: #{x['message']}"
60
+ body << ""
61
+ body << x['backtrace']
62
+ body << entry['stdout']
63
+ body = body.join("\n").gsub(/^/, ' # ')
64
+
65
+ puts "not ok".ansi(*config.error) + highlight(" #{@i} - #{entry['label']}")
66
+ puts body
67
+ end
68
+
69
+ def todo(entry)
70
+ super(entry)
71
+ @i += 1
72
+ puts 'ok'.ansi(*config.pass) + highlight(" #{@i} - #{entry['label']} # skip #{entry['exception']['message']}")
73
+ puts " # #{entry['exception']['message']}"
74
+ end
75
+
76
+ def highlight(anything)
77
+ anything.ansi(*config.highlight)
78
+ end
79
+
80
+ # to print out formatted time and rates
81
+ def finish_suite(entry)
82
+ time, rate, avg = time_tally(entry)
83
+ delta = duration(time)
84
+
85
+ ending = []
86
+ ending << ""
87
+ ending << tally_message(entry)
88
+ ending << "[%s %.2ft/s %.4fs/t] " % [delta, rate, avg] + "Finished at: #{Time.now}"
89
+ ending = ending.join("\n").gsub(/^/, ' # ')
90
+
91
+ puts ending
92
+ end
93
+
94
+ end
@@ -0,0 +1,61 @@
1
+
2
+ module YARD
3
+
4
+ # Intercept all tagged test case definitions in order to document test case
5
+ # taggings automatically.
6
+ class TaggedTestCaseHandler < YARD::Handlers::Ruby::Base
7
+ # Register ourselves to handle method calls to `test`. Limit our interactions
8
+ # to the current namespace only.
9
+ handles method_call(:test)
10
+ namespace_only
11
+
12
+ # Process the method call to `test do ... end` as a dynamic method definition.
13
+ def process
14
+ # Retrieve the currently-active statement and its parameters
15
+ stmt = self.statement
16
+ params = stmt.parameters
17
+
18
+ # Move the AST pointer to the first parameter that is either a string or
19
+ # an identifier (e.g., inner symbol)
20
+ name = params.first.jump(:tstring_content, :ident).source
21
+
22
+ # Create a new method object in the namespace with the correct name
23
+ object = YARD::CodeObjects::MethodObject.new(self.namespace, "test_#{name}")
24
+
25
+ # Parse the block between the `test do` and `end` and attribute it to the
26
+ # method object above
27
+ self.parse_block(stmt.last.last, owner: object)
28
+
29
+ # Annotate it as a dynamic object with custom attributes
30
+ object.dynamic = true
31
+
32
+ # The options s-exp looks like:
33
+ #
34
+ # s(s(:assoc, s(:label, 'Key1'), s(...)),
35
+ # s(:assoc, s(:label, 'Key2'), s(...))
36
+ # )
37
+ #
38
+ # if one exists (nil otherwise)
39
+ if opts_sexp = params[1]
40
+ object['test_case_attrs'] = opts_sexp.inject(Hash.new) do |hsh, kv|
41
+ key_sexp, value_sexp = kv.jump(:assoc)
42
+
43
+ if (string_sexp = value_sexp.jump(:tstring_content)) && (string_sexp.type == :tstring_content)
44
+ hsh[key_sexp.first] = string_sexp.first
45
+ elsif (array_sexp = value_sexp.jump(:array)) && (array_sexp.type == :array)
46
+ hsh[key_sexp.first] = array_sexp.first.map { |sexp| sexp.jump(:tstring_content, :ident).first }
47
+ else
48
+ raise ArgumentError, "Cannot parse and render: #{kv.inspect}"
49
+ end
50
+
51
+ hsh
52
+ end
53
+ end
54
+
55
+ # Register the object
56
+ self.register(object)
57
+ end
58
+
59
+ end
60
+
61
+ end
metadata CHANGED
@@ -1,15 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browsery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peijie Hu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-11 00:00:00.000000000 Z
11
+ date: 2016-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faker
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitap
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.5.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.5.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.10'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 5.4.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 5.4.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: selenium-webdriver
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.46'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.46'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rest-client
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.8'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.8'
13
111
  - !ruby/object:Gem::Dependency
14
112
  name: rake
15
113
  requirement: !ruby/object:Gem::Requirement
@@ -40,17 +138,45 @@ dependencies:
40
138
  version: '0'
41
139
  description: Browsery
42
140
  email:
43
- executables: []
141
+ executables:
142
+ - browsery
44
143
  extensions: []
45
144
  extra_rdoc_files: []
46
145
  files:
47
146
  - ".gitignore"
147
+ - ".ruby-version"
48
148
  - Gemfile
49
- - Gemfile.lock
50
149
  - Rakefile
150
+ - bin/browsery
51
151
  - browsery.gemspec
52
152
  - lib/browsery.rb
153
+ - lib/browsery/connector.rb
154
+ - lib/browsery/console.rb
155
+ - lib/browsery/init.rb
156
+ - lib/browsery/logger.rb
157
+ - lib/browsery/page_objects.rb
158
+ - lib/browsery/page_objects/base.rb
159
+ - lib/browsery/page_objects/element_container.rb
160
+ - lib/browsery/page_objects/overlay/base.rb
161
+ - lib/browsery/page_objects/widgets/base.rb
162
+ - lib/browsery/parallel.rb
163
+ - lib/browsery/runner.rb
164
+ - lib/browsery/settings.rb
165
+ - lib/browsery/test_case.rb
166
+ - lib/browsery/test_cases.rb
167
+ - lib/browsery/utils.rb
168
+ - lib/browsery/utils/assertion_helper.rb
169
+ - lib/browsery/utils/castable.rb
170
+ - lib/browsery/utils/data_generator_helper.rb
171
+ - lib/browsery/utils/loggable.rb
172
+ - lib/browsery/utils/overlay_and_widget_helper.rb
173
+ - lib/browsery/utils/page_object_helper.rb
53
174
  - lib/browsery/version.rb
175
+ - lib/minitap/minitest5_browsery.rb
176
+ - lib/minitest/autobot_settings_plugin.rb
177
+ - lib/selenium/webdriver/common/element_browsery.rb
178
+ - lib/tapout/custom_reporters/fancy_tap_reporter.rb
179
+ - lib/yard/tagged_test_case_handler.rb
54
180
  homepage: https://github.com/peijiehu/browsery
55
181
  licenses:
56
182
  - MIT
@@ -71,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
197
  version: '0'
72
198
  requirements: []
73
199
  rubyforge_project:
74
- rubygems_version: 2.4.8
200
+ rubygems_version: 2.4.5.1
75
201
  signing_key:
76
202
  specification_version: 4
77
203
  summary: Browsery