capybara-ui 0.10.0 → 1.0.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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/lib/capybara/ui.rb +33 -0
  3. data/lib/capybara/ui/assertions.rb +21 -0
  4. data/lib/{capybara-ui → capybara/ui}/capybara.rb +0 -0
  5. data/lib/capybara/ui/checkpoint.rb +113 -0
  6. data/lib/capybara/ui/conversions.rb +33 -0
  7. data/lib/capybara/ui/cucumber.rb +5 -0
  8. data/lib/capybara/ui/dsl.rb +109 -0
  9. data/lib/capybara/ui/instance_conversions.rb +21 -0
  10. data/lib/{capybara-ui → capybara/ui}/matchers.rb +4 -4
  11. data/lib/capybara/ui/optional_dependencies.rb +7 -0
  12. data/lib/capybara/ui/rails.rb +5 -0
  13. data/lib/capybara/ui/rails/role.rb +11 -0
  14. data/lib/capybara/ui/role.rb +21 -0
  15. data/lib/capybara/ui/text_table.rb +109 -0
  16. data/lib/capybara/ui/text_table/cell_text.rb +9 -0
  17. data/lib/capybara/ui/text_table/mapping.rb +42 -0
  18. data/lib/capybara/ui/text_table/transformations.rb +15 -0
  19. data/lib/capybara/ui/text_table/void_mapping.rb +10 -0
  20. data/lib/capybara/ui/version.rb +5 -0
  21. data/lib/capybara/ui/widgets.rb +63 -0
  22. data/lib/capybara/ui/widgets/check_box.rb +28 -0
  23. data/lib/capybara/ui/widgets/cucumber_methods.rb +75 -0
  24. data/lib/capybara/ui/widgets/document.rb +21 -0
  25. data/lib/capybara/ui/widgets/dsl.rb +49 -0
  26. data/lib/capybara/ui/widgets/field.rb +24 -0
  27. data/lib/capybara/ui/widgets/field_group.rb +331 -0
  28. data/lib/capybara/ui/widgets/form.rb +28 -0
  29. data/lib/capybara/ui/widgets/list.rb +202 -0
  30. data/lib/capybara/ui/widgets/list_item.rb +24 -0
  31. data/lib/capybara/ui/widgets/parts/container.rb +48 -0
  32. data/lib/capybara/ui/widgets/parts/struct.rb +119 -0
  33. data/lib/capybara/ui/widgets/radio_button.rb +64 -0
  34. data/lib/capybara/ui/widgets/select.rb +59 -0
  35. data/lib/capybara/ui/widgets/string_value.rb +45 -0
  36. data/lib/capybara/ui/widgets/table.rb +78 -0
  37. data/lib/capybara/ui/widgets/text_field.rb +29 -0
  38. data/lib/capybara/ui/widgets/widget.rb +394 -0
  39. data/lib/capybara/ui/widgets/widget/node_filter.rb +50 -0
  40. data/lib/capybara/ui/widgets/widget_class.rb +13 -0
  41. data/lib/capybara/ui/widgets/widget_name.rb +58 -0
  42. metadata +47 -43
  43. data/lib/capybara-ui.rb +0 -31
  44. data/lib/capybara-ui/assertions.rb +0 -19
  45. data/lib/capybara-ui/checkpoint.rb +0 -111
  46. data/lib/capybara-ui/conversions.rb +0 -31
  47. data/lib/capybara-ui/cucumber.rb +0 -5
  48. data/lib/capybara-ui/dsl.rb +0 -107
  49. data/lib/capybara-ui/instance_conversions.rb +0 -19
  50. data/lib/capybara-ui/optional_dependencies.rb +0 -5
  51. data/lib/capybara-ui/rails.rb +0 -5
  52. data/lib/capybara-ui/rails/role.rb +0 -9
  53. data/lib/capybara-ui/role.rb +0 -19
  54. data/lib/capybara-ui/text_table.rb +0 -107
  55. data/lib/capybara-ui/text_table/cell_text.rb +0 -7
  56. data/lib/capybara-ui/text_table/mapping.rb +0 -40
  57. data/lib/capybara-ui/text_table/transformations.rb +0 -13
  58. data/lib/capybara-ui/text_table/void_mapping.rb +0 -8
  59. data/lib/capybara-ui/version.rb +0 -3
  60. data/lib/capybara-ui/widgets.rb +0 -61
  61. data/lib/capybara-ui/widgets/check_box.rb +0 -26
  62. data/lib/capybara-ui/widgets/cucumber_methods.rb +0 -73
  63. data/lib/capybara-ui/widgets/document.rb +0 -19
  64. data/lib/capybara-ui/widgets/dsl.rb +0 -47
  65. data/lib/capybara-ui/widgets/field.rb +0 -22
  66. data/lib/capybara-ui/widgets/field_group.rb +0 -329
  67. data/lib/capybara-ui/widgets/form.rb +0 -26
  68. data/lib/capybara-ui/widgets/list.rb +0 -200
  69. data/lib/capybara-ui/widgets/list_item.rb +0 -22
  70. data/lib/capybara-ui/widgets/parts/container.rb +0 -46
  71. data/lib/capybara-ui/widgets/parts/struct.rb +0 -117
  72. data/lib/capybara-ui/widgets/radio_button.rb +0 -62
  73. data/lib/capybara-ui/widgets/select.rb +0 -57
  74. data/lib/capybara-ui/widgets/string_value.rb +0 -43
  75. data/lib/capybara-ui/widgets/table.rb +0 -76
  76. data/lib/capybara-ui/widgets/text_field.rb +0 -27
  77. data/lib/capybara-ui/widgets/widget.rb +0 -392
  78. data/lib/capybara-ui/widgets/widget/node_filter.rb +0 -48
  79. data/lib/capybara-ui/widgets/widget_class.rb +0 -11
  80. data/lib/capybara-ui/widgets/widget_name.rb +0 -56
@@ -1,107 +0,0 @@
1
- module CapybaraUI
2
- module DSL
3
- attr_writer :widget_lookup_scope
4
-
5
- # Clicks the widget defined by +name+ and optional +args+.
6
- #
7
- # Makes no distinction between links or buttons.
8
- #
9
- # class MyWidget < CapybaraUI::Widget
10
- # root { |text| ['.my-widget', text: text] }
11
- # end
12
- #
13
- # # <a href="#one" class="my-widget">One</li>
14
- # # <a href="#two" class="my-widget">Two</li> <!-- clicks this node -->
15
- # click :my_widget, 'Two'
16
- def click(name, *args)
17
- widget(name, *args).click
18
- end
19
-
20
- # Hovers the widget defined by +name+ and optional +args+.
21
- def hover(name, *args)
22
- widget(name, *args).hover
23
- end
24
-
25
- # Double clicks the widget defined by +name+ and optional +args+.
26
- def double_click(name, *args)
27
- widget(name, *args).double_click
28
- end
29
-
30
- # Right clicks the widget defined by +name+ and optional +args+.
31
- def right_click(name, *args)
32
- widget(name, *args).right_click
33
- end
34
-
35
- # @return [Document] the current document with the class of the
36
- # current object set as the widget lookup scope.
37
- def document
38
- Document.new(widget_lookup_scope)
39
- end
40
-
41
- # @return [Boolean] Whether one or more widgets exist in the current
42
- # document.
43
- def has_widget?(name, *args)
44
- document.has_widget?(name, *args)
45
- end
46
-
47
- alias_method :widget?, :has_widget?
48
-
49
- def visible?(name, *args)
50
- document.visible?(name, *args)
51
- end
52
-
53
- def not_visible?(name, *args)
54
- document.not_visible?(name, *args)
55
- end
56
-
57
- def set(name, fields)
58
- widget(name).set fields
59
- end
60
-
61
- def submit(name, fields = {})
62
- widget(name).submit_with fields
63
- end
64
-
65
- def value(name, *args)
66
- widget(name, *args).value
67
- end
68
-
69
- def values(name, *args)
70
- widgets(name, *args).map(&:value)
71
- end
72
-
73
- def visit(path)
74
- Capybara.current_session.visit path
75
- end
76
-
77
- # Returns a widget instance for the given name.
78
- #
79
- # @param name [String, Symbol]
80
- def widget(name, *args)
81
- eventually { document.widget(name, *args) }
82
- end
83
-
84
- # Returns a list of widget instances for the given name.
85
- #
86
- # @param name [String, Symbol]
87
- def widgets(name, *args)
88
- document.widgets(name, *args)
89
- end
90
-
91
- def widget_lookup_scope
92
- @widget_lookup_scope ||= default_widget_lookup_scope
93
- end
94
-
95
- # re-run one or more assertions until either they all pass,
96
- # or CapybaraUI times out, which will result in a test failure.
97
- def eventually(wait_time = Capybara.default_max_wait_time, &block)
98
- Checkpoint.wait_for wait_time, &block
99
- end
100
-
101
- private
102
-
103
- def default_widget_lookup_scope
104
- Module === self ? self : self.class
105
- end
106
- end
107
- end
@@ -1,19 +0,0 @@
1
- module CapybaraUI
2
- module InstanceConversions
3
- def self.included(base)
4
- base.send :include, CapybaraUI::Conversions
5
- end
6
-
7
- def to_boolean
8
- Boolean(self)
9
- end
10
-
11
- def to_a
12
- List(self)
13
- end
14
-
15
- def to_time
16
- Timeish(self)
17
- end
18
- end
19
- end
@@ -1,5 +0,0 @@
1
- module CapybaraUI
2
- module OptionalDependencies
3
- RSPEC_VERSION = '3.0'
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- require 'action_dispatch/testing/integration'
2
-
3
- require 'capybara-ui/rails/role'
4
- require 'capybara-ui'
5
- require 'capybara-ui/role'
@@ -1,9 +0,0 @@
1
- module CapybaraUI
2
- module Rails
3
- class Role < ActionDispatch::IntegrationTest
4
- def initialize
5
- super self.class.name
6
- end
7
- end
8
- end
9
- end
@@ -1,19 +0,0 @@
1
- module CapybaraUI
2
- class Role < CapybaraUI::Rails::Role
3
- extend Widgets::DSL
4
-
5
- include CapybaraUI::DSL
6
-
7
- def see?(name, *args)
8
- if respond_to?("see_#{name}?")
9
- send("see_#{name}?", *args)
10
- else
11
- visible?(name, *args)
12
- end
13
- end
14
-
15
- def inspect
16
- self.class.name
17
- end
18
- end
19
- end
@@ -1,107 +0,0 @@
1
- module CapybaraUI
2
- class TextTable
3
- extend Forwardable
4
-
5
- include Enumerable
6
- include Conversions
7
-
8
- class << self
9
- def Array(table)
10
- new(table).to_a
11
- end
12
-
13
- def Hash(table)
14
- new(table).to_h
15
- end
16
-
17
- def map(name, options = {}, &block)
18
- case name
19
- when :*
20
- set_default_mapping options, &block
21
- else
22
- set_mapping name, options, &block
23
- end
24
- end
25
-
26
- def mappings
27
- @mappings ||= Hash.
28
- new { |h, k| h[k] = Mapping.new }.
29
- merge(with_parent_mappings)
30
- end
31
-
32
- def skip(name)
33
- case name
34
- when :*
35
- set_default_mapping VoidMapping
36
- else
37
- raise ArgumentError, "can't convert #{name.inspect} to name"
38
- end
39
- end
40
-
41
- private
42
-
43
- def set_default_mapping(options, &block)
44
- case options
45
- when Hash
46
- @mappings = Hash.
47
- new { |h, k|
48
- h[k] = Mapping.new(key_transformer: options[:to],
49
- value_transformer: block) }.
50
- merge(mappings)
51
- when Class
52
- @mappings = Hash.new { |h, k| h[k] = options.new }.merge(mappings)
53
- else
54
- raise ArgumentError, "can't convert #{options.inspect} to mapping"
55
- end
56
- end
57
-
58
- def set_mapping(name, options, &block)
59
- mappings[name] = Mapping.
60
- new(key: options[:to], value_transformer: block)
61
- end
62
-
63
- def with_parent_mappings
64
- if superclass.respond_to?(:mappings)
65
- superclass.send(:mappings).dup
66
- else
67
- {}
68
- end
69
- end
70
- end
71
-
72
- def_delegators 'self.class', :mappings
73
-
74
- def initialize(table)
75
- self.table = table
76
- end
77
-
78
- def each(&block)
79
- rows.each(&block)
80
- end
81
-
82
- def rows
83
- @rows ||= table.hashes.map { |h| new_row(h) }
84
- end
85
-
86
- def single_row
87
- @single_row ||= new_row(table.rows_hash)
88
- end
89
-
90
- alias_method :to_a, :rows
91
- alias_method :to_h, :single_row
92
-
93
- private
94
-
95
- attr_accessor :table
96
-
97
- def new_row(hash)
98
- hash.each_with_object({}) { |(k, v), h|
99
- mapping_for(k).set(self, h, k, CellText.new(v))
100
- }
101
- end
102
-
103
- def mapping_for(header)
104
- mappings[header]
105
- end
106
- end
107
- end
@@ -1,7 +0,0 @@
1
- module CapybaraUI
2
- class TextTable
3
- class CellText < String
4
- include InstanceConversions
5
- end
6
- end
7
- end
@@ -1,40 +0,0 @@
1
- module CapybaraUI
2
- class TextTable
3
- class Mapping
4
- def initialize(settings = {})
5
- self.key = settings[:key]
6
- self.value_transformer = transformer(settings[:value_transformer], :pass)
7
- self.key_transformer = transformer(settings[:key_transformer], :keyword)
8
- end
9
-
10
- def set(instance, row, key, value)
11
- row[transform_key(instance, key)] = transform_value(instance, value)
12
- end
13
-
14
- private
15
-
16
- attr_accessor :key, :value_transformer, :key_transformer
17
-
18
- def transform_key(_, k)
19
- key || key_transformer.(k)
20
- end
21
-
22
- def transform_value(instance, value)
23
- instance.instance_exec(value, &value_transformer)
24
- end
25
-
26
- def transformer(set, fallback)
27
- case set
28
- when Symbol
29
- Transformations.send(set)
30
- when Proc
31
- set
32
- when nil
33
- Transformations.send(fallback)
34
- else
35
- raise ArgumentError, "can't convert #{set.inspect} to transformer"
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,13 +0,0 @@
1
- module CapybaraUI
2
- class TextTable
3
- module Transformations
4
- def self.keyword
5
- ->(val) { val.squeeze(' ').strip.gsub(' ', '_').sub(/\?$/, '').to_sym }
6
- end
7
-
8
- def self.pass
9
- ->(val) { val }
10
- end
11
- end
12
- end
13
- end
@@ -1,8 +0,0 @@
1
- module CapybaraUI
2
- class TextTable
3
- class VoidMapping
4
- def set(*)
5
- end
6
- end
7
- end
8
- end
@@ -1,3 +0,0 @@
1
- module CapybaraUI
2
- VERSION = '0.10.0'
3
- end
@@ -1,61 +0,0 @@
1
- # This file describes the organization of the major Widget API components.
2
- #
3
- # === Parts
4
- #
5
- # Widget parts encapsulate the set of behaviours that constitute a widget.
6
- module CapybaraUI
7
- module Constructors
8
- def Widget(*selector, &block)
9
- if block_given?
10
- WidgetClass.new(selector.flatten) do
11
- define_method :value do
12
- block.call(text)
13
- end
14
- end
15
- else
16
- WidgetClass.new(selector.flatten)
17
- end
18
- end
19
-
20
- alias_method :String, :Widget
21
-
22
- def Integer(*selector)
23
- Widget(selector) { |text| Kernel::Integer(text) }
24
- end
25
-
26
- require 'bigdecimal'
27
-
28
- def Decimal(*selector)
29
- Widget(selector) { |text|
30
- # ensure we can convert to float first
31
- Float(text) && BigDecimal.new(text)
32
- }
33
- end
34
- end
35
-
36
- extend Constructors
37
- end
38
-
39
- module CapybaraUI::WidgetParts; end
40
-
41
- require 'capybara-ui/widgets/parts/struct'
42
- require 'capybara-ui/widgets/parts/container'
43
-
44
- require 'capybara-ui/widgets/cucumber_methods'
45
- require 'capybara-ui/widgets/dsl'
46
- require 'capybara-ui/widgets/widget_class'
47
- require 'capybara-ui/widgets/widget_name'
48
- require 'capybara-ui/widgets/widget'
49
- require 'capybara-ui/widgets/widget/node_filter'
50
- require 'capybara-ui/widgets/list_item'
51
- require 'capybara-ui/widgets/list'
52
- require 'capybara-ui/widgets/field'
53
- require 'capybara-ui/widgets/check_box'
54
- require 'capybara-ui/widgets/radio_button'
55
- require 'capybara-ui/widgets/select'
56
- require 'capybara-ui/widgets/text_field'
57
- require 'capybara-ui/widgets/field_group'
58
- require 'capybara-ui/widgets/form'
59
- require 'capybara-ui/widgets/document'
60
- require 'capybara-ui/widgets/table'
61
- require 'capybara-ui/widgets/string_value'
@@ -1,26 +0,0 @@
1
- module CapybaraUI
2
- # A check box.
3
- class CheckBox < Field
4
- # @!method set(value)
5
- # Checks or unchecks the current checkbox.
6
- #
7
- # @param value [Boolean] +true+ to check the checkbox, +false+
8
- # otherwise.
9
- def_delegator :root, :set
10
-
11
- # @return [Boolean] +true+ if the checkbox is checked, +false+
12
- # otherwise.
13
- def get
14
- !! root.checked?
15
- end
16
-
17
- def to_cell
18
- to_s
19
- end
20
-
21
- # @return +"yes"+ if the checkbox is checked, +"no"+ otherwise.
22
- def to_s
23
- get ? 'yes' : 'no'
24
- end
25
- end
26
- end