qunit_for_rails 0.0.4

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 (73) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +7 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.mdown +103 -0
  5. data/Rakefile +31 -0
  6. data/app/controllers/qunit_for_rails/qunit_tests_controller.rb +19 -0
  7. data/app/views/layouts/qunit_for_rails/main.haml +15 -0
  8. data/app/views/qunit_for_rails/qunit_tests/index.html.haml +15 -0
  9. data/config/routes.rb +3 -0
  10. data/lib/qunit_for_rails.rb +15 -0
  11. data/lib/qunit_for_rails/engine.rb +20 -0
  12. data/lib/qunit_for_rails/version.rb +3 -0
  13. data/lib/tasks/qunit_for_rails_tasks.rake +4 -0
  14. data/public/images/bg_diagonalDarkBlue.gif +0 -0
  15. data/public/images/bg_secondaryNav_left.gif +0 -0
  16. data/public/images/bg_secondaryNav_right.gif +0 -0
  17. data/public/images/i_loading_bar.gif +0 -0
  18. data/public/images/l_qunit.png +0 -0
  19. data/public/javascripts/qunit_for_rails/index.js +0 -0
  20. data/public/javascripts/qunit_for_rails/inject.js +191 -0
  21. data/public/javascripts/qunit_for_rails/jquery-1.6.4.min.js +4 -0
  22. data/public/javascripts/qunit_for_rails/qunit.js +1585 -0
  23. data/public/javascripts/qunit_for_rails/qunit.page_load.js +47 -0
  24. data/public/javascripts/qunit_for_rails/qunit.test_loader.js +98 -0
  25. data/public/javascripts/qunit_for_rails/qunit.test_page.js +55 -0
  26. data/public/javascripts/qunit_for_rails/qunit_for_rails.js +159 -0
  27. data/public/javascripts/tests/test.js +13 -0
  28. data/public/stylesheets/qunit.css +228 -0
  29. data/public/stylesheets/qunit_for_rails.css +255 -0
  30. data/qunit_for_rails.gemspec +29 -0
  31. data/test/dummy/Rakefile +7 -0
  32. data/test/dummy/app/controllers/application_controller.rb +3 -0
  33. data/test/dummy/app/helpers/application_helper.rb +2 -0
  34. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  35. data/test/dummy/config.ru +4 -0
  36. data/test/dummy/config/application.rb +43 -0
  37. data/test/dummy/config/boot.rb +10 -0
  38. data/test/dummy/config/database.yml +22 -0
  39. data/test/dummy/config/environment.rb +5 -0
  40. data/test/dummy/config/environments/development.rb +26 -0
  41. data/test/dummy/config/environments/production.rb +49 -0
  42. data/test/dummy/config/environments/test.rb +35 -0
  43. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  44. data/test/dummy/config/initializers/inflections.rb +10 -0
  45. data/test/dummy/config/initializers/mime_types.rb +5 -0
  46. data/test/dummy/config/initializers/secret_token.rb +7 -0
  47. data/test/dummy/config/initializers/session_store.rb +8 -0
  48. data/test/dummy/config/locales/en.yml +5 -0
  49. data/test/dummy/config/routes.rb +58 -0
  50. data/test/dummy/db/development.sqlite3 +0 -0
  51. data/test/dummy/log/development.log +4297 -0
  52. data/test/dummy/log/production.log +0 -0
  53. data/test/dummy/log/server.log +0 -0
  54. data/test/dummy/log/test.log +0 -0
  55. data/test/dummy/public/404.html +26 -0
  56. data/test/dummy/public/422.html +26 -0
  57. data/test/dummy/public/500.html +26 -0
  58. data/test/dummy/public/favicon.ico +0 -0
  59. data/test/dummy/public/javascripts/application.js +2 -0
  60. data/test/dummy/public/javascripts/controls.js +965 -0
  61. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  62. data/test/dummy/public/javascripts/effects.js +1123 -0
  63. data/test/dummy/public/javascripts/prototype.js +6001 -0
  64. data/test/dummy/public/javascripts/rails.js +191 -0
  65. data/test/dummy/public/javascripts/test/example2_test.js +23 -0
  66. data/test/dummy/public/javascripts/test/example_test.js +23 -0
  67. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  68. data/test/dummy/script/rails +6 -0
  69. data/test/integration/navigation_test.rb +7 -0
  70. data/test/qunit_for_rails_test.rb +33 -0
  71. data/test/support/integration_case.rb +5 -0
  72. data/test/test_helper.rb +3 -0
  73. metadata +224 -0
@@ -0,0 +1,191 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
@@ -0,0 +1,23 @@
1
+ test("a basic test example", function() {
2
+ ok( true, "this test is fine" );
3
+ var value = "hello";
4
+ equal( value, "hello", "We expect value to be hello" );
5
+ });
6
+
7
+ module("Module C");
8
+
9
+ test("first test within module", function() {
10
+ ok( true, "all pass" );
11
+ });
12
+
13
+ test("second test within module", function() {
14
+ ok( true, "all pass" );
15
+ });
16
+
17
+ module("Module D");
18
+
19
+ test("some other test", function() {
20
+ expect(2);
21
+ equal( true, false, "failing test" );
22
+ equal( true, true, "passing test" );
23
+ });
@@ -0,0 +1,23 @@
1
+ test("a basic test example", function() {
2
+ ok( true, "this test is fine" );
3
+ var value = "hello";
4
+ equal( value, "hello", "We expect value to be hello" );
5
+ });
6
+
7
+ module("Module A");
8
+
9
+ test("first test within module", function() {
10
+ ok( true, "all pass" );
11
+ });
12
+
13
+ test("second test within module", function() {
14
+ ok( true, "all pass" );
15
+ });
16
+
17
+ module("Module B");
18
+
19
+ test("some other test", function() {
20
+ expect(2);
21
+ equal( true, false, "failing test" );
22
+ equal( true, true, "passing test" );
23
+ });
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class NavigationTest < ActiveSupport::IntegrationCase
4
+ test "truth" do
5
+ assert_kind_of Dummy::Application, Rails.application
6
+ end
7
+ end
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/qunit_for_rails'
4
+
5
+ class QunitForRailsTest < ActiveSupport::TestCase
6
+ include QunitForRails
7
+
8
+ def setup
9
+ arr = Dir.entries(File.dirname(__FILE__) + "/../public/javascript/tests")
10
+ @arr_size = arr.size - 2 # removing . and ..
11
+ end
12
+
13
+ # include_qunit includes string containing qunit js files
14
+ test "will insert javascript files into the head" do
15
+ assert include_qunit.scan(/javascript\/qunit.js/)
16
+ assert include_qunit.scan(/javascript\/qunit_for_rails.js/)
17
+ assert include_qunit.scan(/stylesheets\/qunit_for_rails.css/)
18
+ end
19
+
20
+ # list_tasks will return a list of the test files as a string representing an array
21
+ test "can list files in a directory" do
22
+ assert @arr_size, list_tests.to_a.size
23
+ assert_not_nil list_tests.scan(/../)
24
+ end
25
+
26
+ # collect_tasks loads test files from directory and creates select block
27
+ test "can create dropdown of tests" do
28
+ # number of file options match arr_size of files in directory
29
+ num = collect_tests.scan(/<option>/)
30
+ assert @arr_size, num
31
+ end
32
+
33
+ end
@@ -0,0 +1,5 @@
1
+ # Define a bare test case to use with Capybara
2
+ class ActiveSupport::IntegrationCase < ActiveSupport::TestCase
3
+ include Capybara
4
+ include Rails.application.routes.url_helpers
5
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qunit_for_rails
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 4
10
+ version: 0.0.4
11
+ platform: ruby
12
+ authors:
13
+ - Michael Krisher
14
+ - Eric D Helms
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-12-15 00:00:00 Z
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ type: :runtime
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ hash: 19
29
+ segments:
30
+ - 3
31
+ - 0
32
+ - 10
33
+ version: 3.0.10
34
+ prerelease: false
35
+ name: rails
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ type: :runtime
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ prerelease: false
49
+ name: ruby-debug
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ type: :runtime
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 7
59
+ segments:
60
+ - 3
61
+ - 1
62
+ - 2
63
+ version: 3.1.2
64
+ prerelease: false
65
+ name: haml
66
+ version_requirements: *id003
67
+ description: Helper to integrate QUnit JavaScript testing into any Rails app
68
+ email:
69
+ - ericdhelms@gmail.com
70
+ executables: []
71
+
72
+ extensions: []
73
+
74
+ extra_rdoc_files: []
75
+
76
+ files:
77
+ - .gitignore
78
+ - Gemfile
79
+ - MIT-LICENSE
80
+ - README.mdown
81
+ - Rakefile
82
+ - app/controllers/qunit_for_rails/qunit_tests_controller.rb
83
+ - app/views/layouts/qunit_for_rails/main.haml
84
+ - app/views/qunit_for_rails/qunit_tests/index.html.haml
85
+ - config/routes.rb
86
+ - lib/qunit_for_rails.rb
87
+ - lib/qunit_for_rails/engine.rb
88
+ - lib/qunit_for_rails/version.rb
89
+ - lib/tasks/qunit_for_rails_tasks.rake
90
+ - public/images/bg_diagonalDarkBlue.gif
91
+ - public/images/bg_secondaryNav_left.gif
92
+ - public/images/bg_secondaryNav_right.gif
93
+ - public/images/i_loading_bar.gif
94
+ - public/images/l_qunit.png
95
+ - public/javascripts/qunit_for_rails/index.js
96
+ - public/javascripts/qunit_for_rails/inject.js
97
+ - public/javascripts/qunit_for_rails/jquery-1.6.4.min.js
98
+ - public/javascripts/qunit_for_rails/qunit.js
99
+ - public/javascripts/qunit_for_rails/qunit.page_load.js
100
+ - public/javascripts/qunit_for_rails/qunit.test_loader.js
101
+ - public/javascripts/qunit_for_rails/qunit.test_page.js
102
+ - public/javascripts/qunit_for_rails/qunit_for_rails.js
103
+ - public/javascripts/tests/test.js
104
+ - public/stylesheets/qunit.css
105
+ - public/stylesheets/qunit_for_rails.css
106
+ - qunit_for_rails.gemspec
107
+ - test/dummy/Rakefile
108
+ - test/dummy/app/controllers/application_controller.rb
109
+ - test/dummy/app/helpers/application_helper.rb
110
+ - test/dummy/app/views/layouts/application.html.erb
111
+ - test/dummy/config.ru
112
+ - test/dummy/config/application.rb
113
+ - test/dummy/config/boot.rb
114
+ - test/dummy/config/database.yml
115
+ - test/dummy/config/environment.rb
116
+ - test/dummy/config/environments/development.rb
117
+ - test/dummy/config/environments/production.rb
118
+ - test/dummy/config/environments/test.rb
119
+ - test/dummy/config/initializers/backtrace_silencers.rb
120
+ - test/dummy/config/initializers/inflections.rb
121
+ - test/dummy/config/initializers/mime_types.rb
122
+ - test/dummy/config/initializers/secret_token.rb
123
+ - test/dummy/config/initializers/session_store.rb
124
+ - test/dummy/config/locales/en.yml
125
+ - test/dummy/config/routes.rb
126
+ - test/dummy/db/development.sqlite3
127
+ - test/dummy/log/development.log
128
+ - test/dummy/log/production.log
129
+ - test/dummy/log/server.log
130
+ - test/dummy/log/test.log
131
+ - test/dummy/public/404.html
132
+ - test/dummy/public/422.html
133
+ - test/dummy/public/500.html
134
+ - test/dummy/public/favicon.ico
135
+ - test/dummy/public/javascripts/application.js
136
+ - test/dummy/public/javascripts/controls.js
137
+ - test/dummy/public/javascripts/dragdrop.js
138
+ - test/dummy/public/javascripts/effects.js
139
+ - test/dummy/public/javascripts/prototype.js
140
+ - test/dummy/public/javascripts/rails.js
141
+ - test/dummy/public/javascripts/test/example2_test.js
142
+ - test/dummy/public/javascripts/test/example_test.js
143
+ - test/dummy/public/stylesheets/.gitkeep
144
+ - test/dummy/script/rails
145
+ - test/integration/navigation_test.rb
146
+ - test/qunit_for_rails_test.rb
147
+ - test/support/integration_case.rb
148
+ - test/test_helper.rb
149
+ homepage: https://github.com/ehelms/qunit_for_rails
150
+ licenses: []
151
+
152
+ post_install_message:
153
+ rdoc_options: []
154
+
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ hash: 3
163
+ segments:
164
+ - 0
165
+ version: "0"
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ hash: 3
172
+ segments:
173
+ - 0
174
+ version: "0"
175
+ requirements: []
176
+
177
+ rubyforge_project: qunit_for_rails
178
+ rubygems_version: 1.8.11
179
+ signing_key:
180
+ specification_version: 3
181
+ summary: ""
182
+ test_files:
183
+ - test/dummy/Rakefile
184
+ - test/dummy/app/controllers/application_controller.rb
185
+ - test/dummy/app/helpers/application_helper.rb
186
+ - test/dummy/app/views/layouts/application.html.erb
187
+ - test/dummy/config.ru
188
+ - test/dummy/config/application.rb
189
+ - test/dummy/config/boot.rb
190
+ - test/dummy/config/database.yml
191
+ - test/dummy/config/environment.rb
192
+ - test/dummy/config/environments/development.rb
193
+ - test/dummy/config/environments/production.rb
194
+ - test/dummy/config/environments/test.rb
195
+ - test/dummy/config/initializers/backtrace_silencers.rb
196
+ - test/dummy/config/initializers/inflections.rb
197
+ - test/dummy/config/initializers/mime_types.rb
198
+ - test/dummy/config/initializers/secret_token.rb
199
+ - test/dummy/config/initializers/session_store.rb
200
+ - test/dummy/config/locales/en.yml
201
+ - test/dummy/config/routes.rb
202
+ - test/dummy/db/development.sqlite3
203
+ - test/dummy/log/development.log
204
+ - test/dummy/log/production.log
205
+ - test/dummy/log/server.log
206
+ - test/dummy/log/test.log
207
+ - test/dummy/public/404.html
208
+ - test/dummy/public/422.html
209
+ - test/dummy/public/500.html
210
+ - test/dummy/public/favicon.ico
211
+ - test/dummy/public/javascripts/application.js
212
+ - test/dummy/public/javascripts/controls.js
213
+ - test/dummy/public/javascripts/dragdrop.js
214
+ - test/dummy/public/javascripts/effects.js
215
+ - test/dummy/public/javascripts/prototype.js
216
+ - test/dummy/public/javascripts/rails.js
217
+ - test/dummy/public/javascripts/test/example2_test.js
218
+ - test/dummy/public/javascripts/test/example_test.js
219
+ - test/dummy/public/stylesheets/.gitkeep
220
+ - test/dummy/script/rails
221
+ - test/integration/navigation_test.rb
222
+ - test/qunit_for_rails_test.rb
223
+ - test/support/integration_case.rb
224
+ - test/test_helper.rb