bauxite 0.6.18 → 0.6.19

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 (205) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +21 -21
  3. data/README.md +293 -293
  4. data/Rakefile +128 -128
  5. data/bin/bauxite +27 -27
  6. data/doc/Bauxite.html +6 -9
  7. data/doc/Bauxite/Action.html +298 -315
  8. data/doc/Bauxite/ActionModule.html +23 -26
  9. data/doc/Bauxite/Application.html +36 -38
  10. data/doc/Bauxite/Context.html +303 -303
  11. data/doc/Bauxite/Errors.html +6 -9
  12. data/doc/Bauxite/Errors/AssertionError.html +6 -9
  13. data/doc/Bauxite/Errors/FileNotFoundError.html +6 -9
  14. data/doc/Bauxite/Errors/FormatError.html +6 -9
  15. data/doc/Bauxite/Loggers.html +6 -9
  16. data/doc/Bauxite/Loggers/CompositeLogger.html +29 -32
  17. data/doc/Bauxite/Loggers/EchoLogger.html +10 -13
  18. data/doc/Bauxite/Loggers/FileLogger.html +25 -28
  19. data/doc/Bauxite/Loggers/HtmlLogger.html +99 -102
  20. data/doc/Bauxite/Loggers/NullLogger.html +16 -19
  21. data/doc/Bauxite/Loggers/ReportLogger.html +43 -46
  22. data/doc/Bauxite/Loggers/TerminalLogger.html +76 -79
  23. data/doc/Bauxite/Loggers/XtermLogger.html +28 -31
  24. data/doc/Bauxite/Parser.html +87 -89
  25. data/doc/Bauxite/ParserModule.html +19 -22
  26. data/doc/Bauxite/Selector.html +99 -105
  27. data/doc/Bauxite/SelectorModule.html +27 -30
  28. data/doc/README_md.html +117 -103
  29. data/doc/created.rid +58 -58
  30. data/doc/fonts.css +167 -167
  31. data/doc/fonts/Lato-Light.ttf +0 -0
  32. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  33. data/doc/fonts/Lato-Regular.ttf +0 -0
  34. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  35. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  36. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  37. data/doc/images/add.png +0 -0
  38. data/doc/images/arrow_up.png +0 -0
  39. data/doc/images/brick.png +0 -0
  40. data/doc/images/brick_link.png +0 -0
  41. data/doc/images/bug.png +0 -0
  42. data/doc/images/bullet_black.png +0 -0
  43. data/doc/images/bullet_toggle_minus.png +0 -0
  44. data/doc/images/bullet_toggle_plus.png +0 -0
  45. data/doc/images/date.png +0 -0
  46. data/doc/images/delete.png +0 -0
  47. data/doc/images/find.png +0 -0
  48. data/doc/images/loadingAnimation.gif +0 -0
  49. data/doc/images/macFFBgHack.png +0 -0
  50. data/doc/images/package.png +0 -0
  51. data/doc/images/page_green.png +0 -0
  52. data/doc/images/page_white_text.png +0 -0
  53. data/doc/images/page_white_width.png +0 -0
  54. data/doc/images/plugin.png +0 -0
  55. data/doc/images/ruby.png +0 -0
  56. data/doc/images/tag_blue.png +0 -0
  57. data/doc/images/tag_green.png +0 -0
  58. data/doc/images/transparent.png +0 -0
  59. data/doc/images/wrench.png +0 -0
  60. data/doc/images/wrench_orange.png +0 -0
  61. data/doc/images/zoom.png +0 -0
  62. data/doc/index.html +117 -103
  63. data/doc/js/darkfish.js +32 -11
  64. data/doc/js/jquery.js +0 -0
  65. data/doc/js/navigation.js +0 -0
  66. data/doc/js/search.js +0 -0
  67. data/doc/js/search_index.js +1 -1
  68. data/doc/js/searcher.js +0 -0
  69. data/doc/rdoc.css +580 -580
  70. data/doc/table_of_contents.html +69 -72
  71. data/lib/bauxite.rb +28 -28
  72. data/lib/bauxite/actions/alias.rb +51 -51
  73. data/lib/bauxite/actions/assert.rb +49 -49
  74. data/lib/bauxite/actions/asserth.rb +60 -60
  75. data/lib/bauxite/actions/assertm.rb +49 -49
  76. data/lib/bauxite/actions/assertv.rb +40 -40
  77. data/lib/bauxite/actions/assertw.rb +47 -47
  78. data/lib/bauxite/actions/break.rb +39 -39
  79. data/lib/bauxite/actions/capture.rb +61 -61
  80. data/lib/bauxite/actions/click.rb +36 -36
  81. data/lib/bauxite/actions/debug.rb +103 -103
  82. data/lib/bauxite/actions/doif.rb +43 -43
  83. data/lib/bauxite/actions/dounless.rb +43 -43
  84. data/lib/bauxite/actions/echo.rb +36 -36
  85. data/lib/bauxite/actions/exec.rb +46 -46
  86. data/lib/bauxite/actions/exit.rb +35 -35
  87. data/lib/bauxite/actions/failif.rb +52 -52
  88. data/lib/bauxite/actions/js.rb +41 -41
  89. data/lib/bauxite/actions/load.rb +49 -49
  90. data/lib/bauxite/actions/open.rb +35 -35
  91. data/lib/bauxite/actions/params.rb +40 -40
  92. data/lib/bauxite/actions/replace.rb +37 -37
  93. data/lib/bauxite/actions/reset.rb +38 -38
  94. data/lib/bauxite/actions/return.rb +68 -68
  95. data/lib/bauxite/actions/ruby.rb +58 -58
  96. data/lib/bauxite/actions/select.rb +48 -48
  97. data/lib/bauxite/actions/set.rb +39 -39
  98. data/lib/bauxite/actions/setif.rb +44 -44
  99. data/lib/bauxite/actions/source.rb +44 -44
  100. data/lib/bauxite/actions/store.rb +38 -38
  101. data/lib/bauxite/actions/submit.rb +37 -37
  102. data/lib/bauxite/actions/test.rb +67 -67
  103. data/lib/bauxite/actions/tryload.rb +71 -71
  104. data/lib/bauxite/actions/wait.rb +38 -38
  105. data/lib/bauxite/actions/write.rb +44 -44
  106. data/lib/bauxite/application.rb +349 -349
  107. data/lib/bauxite/core/action.rb +199 -199
  108. data/lib/bauxite/core/context.rb +791 -791
  109. data/lib/bauxite/core/errors.rb +41 -41
  110. data/lib/bauxite/core/logger.rb +169 -169
  111. data/lib/bauxite/core/parser.rb +85 -85
  112. data/lib/bauxite/core/selector.rb +152 -152
  113. data/lib/bauxite/loggers/composite.rb +91 -91
  114. data/lib/bauxite/loggers/echo.rb +36 -36
  115. data/lib/bauxite/loggers/file.rb +68 -68
  116. data/lib/bauxite/loggers/html.rb +154 -154
  117. data/lib/bauxite/loggers/terminal.rb +134 -134
  118. data/lib/bauxite/loggers/xterm.rb +101 -101
  119. data/lib/bauxite/parsers/csv.rb +43 -43
  120. data/lib/bauxite/parsers/default.rb +42 -42
  121. data/lib/bauxite/parsers/html.rb +79 -79
  122. data/lib/bauxite/selectors/attr.rb +39 -39
  123. data/lib/bauxite/selectors/frame.rb +60 -60
  124. data/lib/bauxite/selectors/json.rb +88 -88
  125. data/lib/bauxite/selectors/sid.rb +38 -38
  126. data/lib/bauxite/selectors/smart.rb +80 -80
  127. data/lib/bauxite/selectors/window.rb +77 -77
  128. data/test/alert.bxt +3 -3
  129. data/test/alert/page.html +4 -4
  130. data/test/alias.bxt +9 -9
  131. data/test/asserth.bxt +2 -2
  132. data/test/assertv.bxt +1 -1
  133. data/test/assertw.bxt +7 -7
  134. data/test/broken.bxt.manual +0 -0
  135. data/test/bug_load_path.bxt.manual +0 -0
  136. data/test/bug_load_path/broken.bxt.manual +0 -0
  137. data/test/bug_load_path/test.bxt +0 -0
  138. data/test/capture.bxt.manual +20 -20
  139. data/test/capture/my_test.bxt +1 -1
  140. data/test/capture/page.html +6 -6
  141. data/test/capture_on_error.bxt.manual +3 -3
  142. data/test/capture_on_error/my_test.bxt +1 -1
  143. data/test/capture_on_error/page.html +2 -2
  144. data/test/debug.bxt.manual +0 -0
  145. data/test/default_selector.bxt.manual +7 -7
  146. data/test/default_selector/page.html +10 -10
  147. data/test/default_selector_var.bxt +1 -1
  148. data/test/delay.bxt +2 -2
  149. data/test/delay/page.html +4 -4
  150. data/test/doif.bxt +6 -6
  151. data/test/dounless.bxt +6 -6
  152. data/test/exec.bxt +6 -6
  153. data/test/exit.bxt +3 -3
  154. data/test/exit/test.bxt +3 -3
  155. data/test/extension.bxt.manual +4 -4
  156. data/test/extension/custom.rb +12 -12
  157. data/test/extension/page.html +4 -4
  158. data/test/failif.bxt +7 -7
  159. data/test/failif/page.html +5 -5
  160. data/test/format.bxt +17 -17
  161. data/test/format/page.html +6 -6
  162. data/test/frame.bxt +6 -6
  163. data/test/frame/child_frame.html +6 -6
  164. data/test/frame/grandchild_frame.html +4 -4
  165. data/test/frame/page.html +4 -4
  166. data/test/js.bxt +4 -4
  167. data/test/json.bxt +19 -19
  168. data/test/json/array.json +3 -3
  169. data/test/json/object.json +13 -13
  170. data/test/load.bxt +18 -18
  171. data/test/load/child.bxt +12 -12
  172. data/test/parsers.bxt +1 -1
  173. data/test/parsers.csv +7 -7
  174. data/test/parsers.html +32 -32
  175. data/test/parsers/page.html +6 -6
  176. data/test/return.bxt +1 -1
  177. data/test/return/f1.bxt +1 -1
  178. data/test/return/f2.bxt +1 -1
  179. data/test/return/f3.bxt +1 -1
  180. data/test/return/f4.bxt +2 -2
  181. data/test/ruby.bxt +1 -1
  182. data/test/ruby/custom.rb +5 -5
  183. data/test/select.bxt +9 -9
  184. data/test/select/page.html +8 -8
  185. data/test/selectors.bxt +7 -7
  186. data/test/selectors/page.html +6 -6
  187. data/test/set_builtin.bxt +5 -0
  188. data/test/set_builtin/page.html +5 -0
  189. data/test/setif.bxt +3 -3
  190. data/test/smart_selector.bxt +17 -17
  191. data/test/smart_selector/page.html +17 -17
  192. data/test/stdin.bxt +0 -0
  193. data/test/submit.bxt +4 -4
  194. data/test/submit/page.html +6 -6
  195. data/test/submit/page2.html +4 -4
  196. data/test/test.bxt.manual +6 -6
  197. data/test/test/test1.bxt +2 -2
  198. data/test/test/test2.bxt +3 -3
  199. data/test/test/test3.bxt +2 -2
  200. data/test/test/test4.bxt +1 -1
  201. data/test/test/test5.bxt +1 -1
  202. data/test/window.bxt +14 -14
  203. data/test/window/page.html +5 -5
  204. data/test/window/popup.html +4 -4
  205. metadata +5 -3
@@ -1,42 +1,42 @@
1
- #--
2
- # Copyright (c) 2014 Patricio Zavolinsky
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- # SOFTWARE.
21
- #++
22
-
23
- module Bauxite
24
- # Errors Module
25
- module Errors
26
- # Error raised when an assertion fails.
27
- #
28
- class AssertionError < StandardError
29
- end
30
-
31
- # Error raised when an invalid file tried to be loaded.
32
- #
33
- class FileNotFoundError < StandardError
34
- end
35
-
36
- # Error raised when trying to process an invalid file format.
37
- #
38
- class FormatError < StandardError
39
- end
40
-
41
- end
1
+ #--
2
+ # Copyright (c) 2014 Patricio Zavolinsky
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ #++
22
+
23
+ module Bauxite
24
+ # Errors Module
25
+ module Errors
26
+ # Error raised when an assertion fails.
27
+ #
28
+ class AssertionError < StandardError
29
+ end
30
+
31
+ # Error raised when an invalid file tried to be loaded.
32
+ #
33
+ class FileNotFoundError < StandardError
34
+ end
35
+
36
+ # Error raised when trying to process an invalid file format.
37
+ #
38
+ class FormatError < StandardError
39
+ end
40
+
41
+ end
42
42
  end
@@ -1,170 +1,170 @@
1
- #--
2
- # Copyright (c) 2014 Patricio Zavolinsky
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- # SOFTWARE.
21
- #++
22
-
23
- module Bauxite
24
- # Test loggers module
25
- #
26
- # The default Logger class and all custom loggers must be included in this
27
- # module.
28
- #
29
- module Loggers
30
- # Test logger class.
31
- #
32
- # Test loggers handle test output format.
33
- #
34
- # The default logger does not provide any output logging.
35
- #
36
- # This default behavior can be overriden in a custom logger passed to the
37
- # Context constructor (see Context::new). By convention, custom loggers are
38
- # defined in the 'loggers/' directory.
39
- #
40
- class NullLogger
41
-
42
- # Constructs a new null logger instance.
43
- #
44
- def initialize(options)
45
- @options = options
46
- end
47
-
48
- # Executes the given block in a logging context.
49
- #
50
- # This default implementation does not provide any logging
51
- # capabilities.
52
- #
53
- # For example:
54
- # log.log_cmd('echo', 'Hello World!') do
55
- # puts 'Hello World!'
56
- # end
57
- # # => echoes 'Hello World!'
58
- #
59
- def log_cmd(action)
60
- yield
61
- end
62
-
63
- # Returns the prompt shown by the debug console (see Context#debug).
64
- #
65
- # For example:
66
- # log.debug_prompt
67
- # # => returns the debug prompt
68
- def debug_prompt
69
- 'debug> '
70
- end
71
-
72
- # Updates the progress of the current action.
73
- def progress(value)
74
- end
75
-
76
- # Logs the specified string.
77
- #
78
- # +type+, if specified, should be one of +:error+, +:warning+,
79
- # +:info+ (default), +:debug+.
80
- #
81
- def log(s, type = :info)
82
- print s
83
- end
84
-
85
- # Completes the log execution.
86
- #
87
- def finalize(ctx)
88
- end
89
- end
90
-
91
- # Report logger.
92
- #
93
- # This base logger class can be inherited to create reporting loggers.
94
- #
95
- # Descendent classes must override the #finalize method and iterate the
96
- # <tt>@data</tt> array to produce the report.
97
- #
98
- # The items included in the <tt>@data</tt> array contain the
99
- # following fields:
100
- # [:name]
101
- # Name of the current test.
102
- # [:actions]
103
- # Array of actions with the following fields
104
- # - +:cmd+: name of the action.
105
- # - +:args+: action arguments.
106
- # - +:action+: action object.
107
- # - +:status+: action execution status: +:ok+, +:skip+ or +:error+.
108
- # - +:capture+: path to the current capture, if any.
109
- #
110
- # For an example of a ReportLogger implementation see the HtmlLogger
111
- # class.
112
- #
113
- class ReportLogger < NullLogger
114
- # Constructs a new report logger instance.
115
- #
116
- def initialize(options)
117
- super(options)
118
- @data = []
119
- end
120
-
121
- # Logs the specified string.
122
- #
123
- # +type+, if specified, should be one of +:error+, +:warning+,
124
- # +:info+ (default), +:debug+.
125
- #
126
- def log(s, type = :info)
127
- end
128
-
129
- # Echoes the raw action text.
130
- def log_cmd(action)
131
- stime = Time.new
132
- ret = yield || false
133
- etime = Time.new
134
- ensure
135
- etime ||= Time.new
136
- status = case ret; when nil; :error; when false; :skip; else :ok; end
137
-
138
- test_name = action.ctx.variables['__TEST__'] || 'Main'
139
- test = @data.find { |t| t[:name] == test_name }
140
- unless test
141
- test = { :name => test_name, :actions => [] }
142
- @data << test
143
- end
144
-
145
- capture = action.ctx.variables['__CAPTURE__']
146
- if capture == @last_capture
147
- capture = nil
148
- else
149
- @last_capture = capture
150
- end
151
-
152
- test[:actions] << {
153
- :cmd => action.cmd,
154
- :args => action.args(true),
155
- :action => action,
156
- :status => status,
157
- :time => (etime - stime),
158
- :capture => capture
159
- }
160
-
161
- ret
162
- end
163
-
164
- # Completes the log execution.
165
- #
166
- def finalize(ctx)
167
- end
168
- end
169
- end
1
+ #--
2
+ # Copyright (c) 2014 Patricio Zavolinsky
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ #++
22
+
23
+ module Bauxite
24
+ # Test loggers module
25
+ #
26
+ # The default Logger class and all custom loggers must be included in this
27
+ # module.
28
+ #
29
+ module Loggers
30
+ # Test logger class.
31
+ #
32
+ # Test loggers handle test output format.
33
+ #
34
+ # The default logger does not provide any output logging.
35
+ #
36
+ # This default behavior can be overriden in a custom logger passed to the
37
+ # Context constructor (see Context::new). By convention, custom loggers are
38
+ # defined in the 'loggers/' directory.
39
+ #
40
+ class NullLogger
41
+
42
+ # Constructs a new null logger instance.
43
+ #
44
+ def initialize(options)
45
+ @options = options
46
+ end
47
+
48
+ # Executes the given block in a logging context.
49
+ #
50
+ # This default implementation does not provide any logging
51
+ # capabilities.
52
+ #
53
+ # For example:
54
+ # log.log_cmd('echo', 'Hello World!') do
55
+ # puts 'Hello World!'
56
+ # end
57
+ # # => echoes 'Hello World!'
58
+ #
59
+ def log_cmd(action)
60
+ yield
61
+ end
62
+
63
+ # Returns the prompt shown by the debug console (see Context#debug).
64
+ #
65
+ # For example:
66
+ # log.debug_prompt
67
+ # # => returns the debug prompt
68
+ def debug_prompt
69
+ 'debug> '
70
+ end
71
+
72
+ # Updates the progress of the current action.
73
+ def progress(value)
74
+ end
75
+
76
+ # Logs the specified string.
77
+ #
78
+ # +type+, if specified, should be one of +:error+, +:warning+,
79
+ # +:info+ (default), +:debug+.
80
+ #
81
+ def log(s, type = :info)
82
+ print s
83
+ end
84
+
85
+ # Completes the log execution.
86
+ #
87
+ def finalize(ctx)
88
+ end
89
+ end
90
+
91
+ # Report logger.
92
+ #
93
+ # This base logger class can be inherited to create reporting loggers.
94
+ #
95
+ # Descendent classes must override the #finalize method and iterate the
96
+ # <tt>@data</tt> array to produce the report.
97
+ #
98
+ # The items included in the <tt>@data</tt> array contain the
99
+ # following fields:
100
+ # [:name]
101
+ # Name of the current test.
102
+ # [:actions]
103
+ # Array of actions with the following fields
104
+ # - +:cmd+: name of the action.
105
+ # - +:args+: action arguments.
106
+ # - +:action+: action object.
107
+ # - +:status+: action execution status: +:ok+, +:skip+ or +:error+.
108
+ # - +:capture+: path to the current capture, if any.
109
+ #
110
+ # For an example of a ReportLogger implementation see the HtmlLogger
111
+ # class.
112
+ #
113
+ class ReportLogger < NullLogger
114
+ # Constructs a new report logger instance.
115
+ #
116
+ def initialize(options)
117
+ super(options)
118
+ @data = []
119
+ end
120
+
121
+ # Logs the specified string.
122
+ #
123
+ # +type+, if specified, should be one of +:error+, +:warning+,
124
+ # +:info+ (default), +:debug+.
125
+ #
126
+ def log(s, type = :info)
127
+ end
128
+
129
+ # Echoes the raw action text.
130
+ def log_cmd(action)
131
+ stime = Time.new
132
+ ret = yield || false
133
+ etime = Time.new
134
+ ensure
135
+ etime ||= Time.new
136
+ status = case ret; when nil; :error; when false; :skip; else :ok; end
137
+
138
+ test_name = action.ctx.variables['__TEST__'] || 'Main'
139
+ test = @data.find { |t| t[:name] == test_name }
140
+ unless test
141
+ test = { :name => test_name, :actions => [] }
142
+ @data << test
143
+ end
144
+
145
+ capture = action.ctx.variables['__CAPTURE__']
146
+ if capture == @last_capture
147
+ capture = nil
148
+ else
149
+ @last_capture = capture
150
+ end
151
+
152
+ test[:actions] << {
153
+ :cmd => action.cmd,
154
+ :args => action.args(true),
155
+ :action => action,
156
+ :status => status,
157
+ :time => (etime - stime),
158
+ :capture => capture
159
+ }
160
+
161
+ ret
162
+ end
163
+
164
+ # Completes the log execution.
165
+ #
166
+ def finalize(ctx)
167
+ end
168
+ end
169
+ end
170
170
  end
@@ -1,86 +1,86 @@
1
- #--
2
- # Copyright (c) 2014 Patricio Zavolinsky
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- # SOFTWARE.
21
- #++
22
-
23
- module Bauxite
24
- # Parser common state and behavior.
25
- module ParserModule
26
- # Constructs a new test parser instance.
27
- def initialize(ctx)
28
- @ctx = ctx
29
- end
30
-
31
- # Parse +file+ and yield the resulting actions.
32
- def parse(file)
33
- actions = nil
34
- Context::parsers.any? { |p| actions = send(p, file) }
35
-
36
- unless actions
37
- raise Errors::FormatError, "Invalid format in '#{file}'. None of the available parsers can understand this file format."
38
- end
39
-
40
- actions.each do |action, args, text, line|
41
- yield action.strip.downcase, args, text, file, line
42
- end
43
- end
44
- end
45
-
46
- # Parser class.
47
- #
48
- # Parser represent different strategies for reading input files into lists
49
- # of Bauxite actions.
50
- #
51
- # Each custom parser is defined in a separate file in the 'parsers/'
52
- # directory. These files should avoid adding public methods other than
53
- # the parser method itself. Also, no +attr_accessors+ should be added.
54
- #
55
- # Parser methods can use the +ctx+ attribute to refer to the current test
56
- # Context.
57
- # Parser methods receive a single action hash argument including <tt>:file</tt>
58
- # and return an array of arrays or nil if the parser can't handle the file.
59
- #
60
- # Each element in the output array must contain the following fields:
61
- # [
62
- # action, # action name
63
- # args, # args array
64
- # text, # raw action text (before parsing), or nil
65
- # line # line in the file that defined the action
66
- # ]
67
- #
68
- # For example:
69
- # # === parsers/my_parser.rb ======= #
70
- # class Parser
71
- # # :category: Parser Methods
72
- # def my_parser(action)
73
- # # open and read file
74
- # [
75
- # [ 'echo', [ 'hello world' ], 'echo "hello world"', 0 ],
76
- # [ 'write',[ 'id=username', 'jdoe' ], nil , 1 ],
77
- # [ 'write',[ 'id=password', 'hello world!' ], nil , 2 ]
78
- # ]
79
- # end
80
- # end
81
- # # === end parsers/my_parser.rb === #
82
- #
83
- class Parser
84
- include Bauxite::ParserModule
85
- end
1
+ #--
2
+ # Copyright (c) 2014 Patricio Zavolinsky
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ # SOFTWARE.
21
+ #++
22
+
23
+ module Bauxite
24
+ # Parser common state and behavior.
25
+ module ParserModule
26
+ # Constructs a new test parser instance.
27
+ def initialize(ctx)
28
+ @ctx = ctx
29
+ end
30
+
31
+ # Parse +file+ and yield the resulting actions.
32
+ def parse(file)
33
+ actions = nil
34
+ Context::parsers.any? { |p| actions = send(p, file) }
35
+
36
+ unless actions
37
+ raise Errors::FormatError, "Invalid format in '#{file}'. None of the available parsers can understand this file format."
38
+ end
39
+
40
+ actions.each do |action, args, text, line|
41
+ yield action.strip.downcase, args, text, file, line
42
+ end
43
+ end
44
+ end
45
+
46
+ # Parser class.
47
+ #
48
+ # Parser represent different strategies for reading input files into lists
49
+ # of Bauxite actions.
50
+ #
51
+ # Each custom parser is defined in a separate file in the 'parsers/'
52
+ # directory. These files should avoid adding public methods other than
53
+ # the parser method itself. Also, no +attr_accessors+ should be added.
54
+ #
55
+ # Parser methods can use the +ctx+ attribute to refer to the current test
56
+ # Context.
57
+ # Parser methods receive a single action hash argument including <tt>:file</tt>
58
+ # and return an array of arrays or nil if the parser can't handle the file.
59
+ #
60
+ # Each element in the output array must contain the following fields:
61
+ # [
62
+ # action, # action name
63
+ # args, # args array
64
+ # text, # raw action text (before parsing), or nil
65
+ # line # line in the file that defined the action
66
+ # ]
67
+ #
68
+ # For example:
69
+ # # === parsers/my_parser.rb ======= #
70
+ # class Parser
71
+ # # :category: Parser Methods
72
+ # def my_parser(action)
73
+ # # open and read file
74
+ # [
75
+ # [ 'echo', [ 'hello world' ], 'echo "hello world"', 0 ],
76
+ # [ 'write',[ 'id=username', 'jdoe' ], nil , 1 ],
77
+ # [ 'write',[ 'id=password', 'hello world!' ], nil , 2 ]
78
+ # ]
79
+ # end
80
+ # end
81
+ # # === end parsers/my_parser.rb === #
82
+ #
83
+ class Parser
84
+ include Bauxite::ParserModule
85
+ end
86
86
  end