rich_support 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. data/.gitignore +9 -0
  2. data/.suit +4 -0
  3. data/CHANGELOG.rdoc +5 -0
  4. data/Gemfile +3 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.textile +141 -0
  7. data/Rakefile +29 -0
  8. data/VERSION +1 -0
  9. data/lib/rich/support/actionpack/action_controller/test_case.rb +28 -0
  10. data/lib/rich/support/actionpack.rb +3 -0
  11. data/lib/rich/support/activesupport/active_support/dependencies.rb +12 -0
  12. data/lib/rich/support/activesupport.rb +3 -0
  13. data/lib/rich/support/core/string/colorize.rb +41 -0
  14. data/lib/rich/support/core/string/html_safe.rb +17 -0
  15. data/lib/rich/support/core/string/inflections.rb +39 -0
  16. data/lib/rich/support/core/string.rb +7 -0
  17. data/lib/rich/support/core.rb +2 -0
  18. data/lib/rich/support/rails/engine.rb +4 -0
  19. data/lib/rich/support/rails.rb +3 -0
  20. data/lib/rich/support/test/unit/test_case.rb +92 -0
  21. data/lib/rich/support/test.rb +3 -0
  22. data/lib/rich/support/version.rb +11 -0
  23. data/lib/rich/support.rb +51 -0
  24. data/lib/rich_support.rb +7 -0
  25. data/rich_support.gemspec +21 -0
  26. data/suit/rails-2/dummy/Gemfile +14 -0
  27. data/suit/rails-2/dummy/README +243 -0
  28. data/suit/rails-2/dummy/Rakefile +10 -0
  29. data/suit/rails-2/dummy/app/controllers/application_controller.rb +10 -0
  30. data/suit/rails-2/dummy/app/helpers/application_helper.rb +3 -0
  31. data/suit/rails-2/dummy/config/boot.rb +128 -0
  32. data/suit/rails-2/dummy/config/database.yml +22 -0
  33. data/suit/rails-2/dummy/config/environment.rb +41 -0
  34. data/suit/rails-2/dummy/config/environments/development.rb +17 -0
  35. data/suit/rails-2/dummy/config/environments/production.rb +28 -0
  36. data/suit/rails-2/dummy/config/environments/test.rb +28 -0
  37. data/suit/rails-2/dummy/config/initializers/backtrace_silencers.rb +7 -0
  38. data/suit/rails-2/dummy/config/initializers/cookie_verification_secret.rb +7 -0
  39. data/suit/rails-2/dummy/config/initializers/inflections.rb +10 -0
  40. data/suit/rails-2/dummy/config/initializers/mime_types.rb +5 -0
  41. data/suit/rails-2/dummy/config/initializers/new_rails_defaults.rb +21 -0
  42. data/suit/rails-2/dummy/config/initializers/session_store.rb +15 -0
  43. data/suit/rails-2/dummy/config/locales/en.yml +5 -0
  44. data/suit/rails-2/dummy/config/preinitializer.rb +20 -0
  45. data/suit/rails-2/dummy/config/routes.rb +43 -0
  46. data/suit/rails-2/dummy/db/schema.rb +2 -0
  47. data/suit/rails-2/dummy/db/seeds.rb +7 -0
  48. data/suit/rails-2/dummy/doc/README_FOR_APP +2 -0
  49. data/suit/rails-2/dummy/script/about +4 -0
  50. data/suit/rails-2/dummy/script/console +3 -0
  51. data/suit/rails-2/dummy/script/dbconsole +3 -0
  52. data/suit/rails-2/dummy/script/destroy +3 -0
  53. data/suit/rails-2/dummy/script/generate +3 -0
  54. data/suit/rails-2/dummy/script/performance/benchmarker +3 -0
  55. data/suit/rails-2/dummy/script/performance/profiler +3 -0
  56. data/suit/rails-2/dummy/script/plugin +3 -0
  57. data/suit/rails-2/dummy/script/runner +3 -0
  58. data/suit/rails-2/dummy/script/server +3 -0
  59. data/suit/rails-3/dummy/.gitignore +4 -0
  60. data/suit/rails-3/dummy/Gemfile +14 -0
  61. data/suit/rails-3/dummy/README +256 -0
  62. data/suit/rails-3/dummy/Rakefile +7 -0
  63. data/suit/rails-3/dummy/app/controllers/application_controller.rb +3 -0
  64. data/suit/rails-3/dummy/app/helpers/application_helper.rb +2 -0
  65. data/suit/rails-3/dummy/config/application.rb +42 -0
  66. data/suit/rails-3/dummy/config/boot.rb +6 -0
  67. data/suit/rails-3/dummy/config/database.yml +22 -0
  68. data/suit/rails-3/dummy/config/environment.rb +5 -0
  69. data/suit/rails-3/dummy/config/environments/development.rb +26 -0
  70. data/suit/rails-3/dummy/config/environments/production.rb +49 -0
  71. data/suit/rails-3/dummy/config/environments/test.rb +35 -0
  72. data/suit/rails-3/dummy/config/initializers/backtrace_silencers.rb +7 -0
  73. data/suit/rails-3/dummy/config/initializers/inflections.rb +10 -0
  74. data/suit/rails-3/dummy/config/initializers/mime_types.rb +5 -0
  75. data/suit/rails-3/dummy/config/initializers/secret_token.rb +7 -0
  76. data/suit/rails-3/dummy/config/initializers/session_store.rb +8 -0
  77. data/suit/rails-3/dummy/config/locales/en.yml +5 -0
  78. data/suit/rails-3/dummy/config/routes.rb +58 -0
  79. data/suit/rails-3/dummy/config.ru +4 -0
  80. data/suit/rails-3/dummy/db/schema.rb +2 -0
  81. data/suit/rails-3/dummy/db/seeds.rb +7 -0
  82. data/suit/rails-3/dummy/doc/README_FOR_APP +2 -0
  83. data/suit/rails-3/dummy/lib/tasks/.gitkeep +0 -0
  84. data/suit/rails-3/dummy/script/rails +6 -0
  85. data/suit/rails-3/dummy/vendor/plugins/.gitkeep +0 -0
  86. data/suit/shared/app/models/.gitkeep +0 -0
  87. data/suit/shared/app/views/application/index.html.erb +16 -0
  88. data/suit/shared/app/views/layouts/application.html.erb +11 -0
  89. data/suit/shared/db/schema.rb +2 -0
  90. data/suit/shared/db/seeds.rb +7 -0
  91. data/suit/shared/public/404.html +26 -0
  92. data/suit/shared/public/422.html +26 -0
  93. data/suit/shared/public/500.html +26 -0
  94. data/suit/shared/public/favicon.ico +0 -0
  95. data/suit/shared/public/images/rails.png +0 -0
  96. data/suit/shared/public/javascripts/application.js +2 -0
  97. data/suit/shared/public/javascripts/controls.js +965 -0
  98. data/suit/shared/public/javascripts/dragdrop.js +974 -0
  99. data/suit/shared/public/javascripts/effects.js +1123 -0
  100. data/suit/shared/public/javascripts/prototype.js +6001 -0
  101. data/suit/shared/public/javascripts/rails.js +191 -0
  102. data/suit/shared/public/robots.txt +5 -0
  103. data/suit/shared/public/stylesheets/.gitkeep +0 -0
  104. data/suit/shared/public/stylesheets/app.css +99 -0
  105. data/suit/shared/test/fixtures/.gitkeep +0 -0
  106. data/suit/shared/test/integration/suit/example.rb +40 -0
  107. data/suit/shared/test/suit_application/capybara_extensions.rb +32 -0
  108. data/suit/shared/test/suit_application.rb +27 -0
  109. data/suit/shared/test/test_helper.rb +37 -0
  110. data/suit/shared/test/unit/.gitkeep +0 -0
  111. data/suit/shared/test/unit/actionpack/action_controller/routing_test.rb +14 -0
  112. data/suit/shared/test/unit/actionpack/action_controller/test_case_test.rb +17 -0
  113. data/suit/shared/test/unit/activesupport/active_support/dependencies_test.rb +15 -0
  114. data/suit/shared/test/unit/core/string/colorize_test.rb +43 -0
  115. data/suit/shared/test/unit/core/string/html_safe_test.rb +15 -0
  116. data/suit/shared/test/unit/core/string/inflections_test.rb +51 -0
  117. data/suit/shared/test/unit/rails/engine_test.rb +13 -0
  118. data/suit/shared/test/unit/test/unit/test_case_test.rb +19 -0
  119. data/suit/templates/shared/Gemfile +14 -0
  120. data/suit/templates/shared/config/database.yml +10 -0
  121. data/suit/templates/shared/config/initializers/.gitkeep +0 -0
  122. data/suit/templates/shared/db/schema.rb +2 -0
  123. metadata +189 -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,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
File without changes
@@ -0,0 +1,99 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ outline: 0; }
5
+
6
+ html, body {
7
+ height: 100%; }
8
+
9
+ body {
10
+ color: #111;
11
+ font-family: Myriad Pro, Arial;
12
+ font-size: 18px;
13
+ line-height: 120%;
14
+ text-shadow: white 0 2px 0;
15
+ background: #E0E0E0; }
16
+
17
+ ol, ul {
18
+ list-style: none; }
19
+
20
+ a {
21
+ padding-bottom: 1px;
22
+ color: #111;
23
+ cursor: pointer;
24
+ text-decoration: none; }
25
+
26
+ a:hover {
27
+ text-decoration: underline; }
28
+
29
+ abbr, fieldset, img {
30
+ border: 0; }
31
+
32
+ textarea {
33
+ font-family: Myriad Pro, Arial; }
34
+
35
+ #page {
36
+ width: 750px;
37
+ min-height: 100%;
38
+ margin: 0 auto; }
39
+
40
+ #page div.locales {
41
+ padding-top: 80px;
42
+ text-align: center; }
43
+
44
+ #page div.locales a img {
45
+ margin: 0 2px;
46
+ padding: 2px; }
47
+
48
+ #page div.locales a.selected img {
49
+ padding: 1px;
50
+ border: 1px solid #06F; }
51
+
52
+ #page div.content {
53
+ padding-top: 80px;
54
+ clear: both; }
55
+
56
+ #page div.content h1 {
57
+ margin-bottom: 35px; }
58
+
59
+ #page div.content div.left {
60
+ width: 515px;
61
+ float: left; }
62
+
63
+ #page div.content div.left h3 {
64
+ font-size: 22px;
65
+ margin-bottom: 22px; }
66
+
67
+ #page div.content div.left p {
68
+ margin-bottom: 30px;
69
+ font-size: 18px;
70
+ line-height: 140%; }
71
+
72
+ #page div.content div.left form label {
73
+ display: block;
74
+ font-weight: bold; }
75
+
76
+ #page div.content div.left form .inputs input {
77
+ margin-bottom: 15px;
78
+ width: 350px;
79
+ font-size: 16px; }
80
+
81
+ #page div.content div.left form .inputs textarea {
82
+ width: 400px;
83
+ height: 150px;
84
+ font-size: 18px; }
85
+
86
+ #page div.content div.left form .buttons {
87
+ padding: 15px 0 60px 0; }
88
+
89
+ #page div.content div.left form .buttons input {
90
+ margin-right: 6px;
91
+ font-size: 16px; }
92
+
93
+ #page div.content div.left form .buttons a {
94
+ font-size: 14px; }
95
+
96
+ #page div.content ul {
97
+ width: 175px;
98
+ font-weight: bold;
99
+ float: right; }
File without changes
@@ -0,0 +1,40 @@
1
+ require File.expand_path("../../../suit_application.rb", __FILE__)
2
+
3
+ SuitApplication.test
4
+
5
+ class ExampleTest < GemSuit::IntegrationTest
6
+
7
+ context "My example test" do
8
+ setup do
9
+ end
10
+
11
+ teardown do
12
+ SuitApplication.restore_all
13
+ end
14
+
15
+ should "assert css as expected" do
16
+ visit "/"
17
+ assert page.has_css? "div#page"
18
+ assert page.has_no_css? "div#paul_engel"
19
+
20
+ # Hello World ;)
21
+ page.execute_script <<-SCRIPT
22
+ var div = document.createElement("div");
23
+ div.innerHTML = "<h2>Hi. This is an GemSuit example test!</h2><p><br>Closing in <span id='seconds'>10</span> seconds.</p>";
24
+ var divs = document.getElementsByTagName("div");
25
+ for (var i = 0; i < divs.length; i++) {
26
+ if (divs[i].className == "left") {
27
+ divs[i].appendChild(div);
28
+ }
29
+ }
30
+ SCRIPT
31
+
32
+ # Counting down
33
+ 10.times do |i|
34
+ sleep 1
35
+ page.execute_script "document.getElementById('seconds').innerHTML = '#{9 - i}';"
36
+ end
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,32 @@
1
+ module GemSuit
2
+ class IntegrationTest
3
+
4
+ # def login
5
+ # visit "/login"
6
+ # fill_in_and_submit "form#login", {:Email => "paul.engel@holder.nl", :Password => "test"}, "Login"
7
+ # end
8
+
9
+ # def logout
10
+ # find("a#logout").click_link "Logout"
11
+ # end
12
+
13
+ # def fill_in_and_submit(selector, with, submit)
14
+ # within "#{selector} fieldset.inputs" do
15
+ # with.each do |key, value|
16
+ # begin
17
+ # fill_in key.to_s, :with => value
18
+ # rescue Selenium::WebDriver::Error::ElementNotDisplayedError
19
+ # page.execute_script "var input = $('#{selector} [name=\"#{key}\"]');" +
20
+ # "if (input.data('cleditor')) {" +
21
+ # " input.val('#{value}');" +
22
+ # " input.data('cleditor').updateFrame();" +
23
+ # "}"
24
+ # end
25
+ # end
26
+ # end
27
+ # find(selector).find_button(submit).click
28
+ # sleep 2
29
+ # end
30
+
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ require "rubygems"
2
+ require "gem_suit"
3
+
4
+ class SuitApplication < GemSuit::Application
5
+
6
+ # def description
7
+ # "My first GemSuit integration test"
8
+ # end
9
+
10
+ # def prepare
11
+ # generate_something
12
+ # end
13
+
14
+ # def config_for_template(path)
15
+ # case path
16
+ # when "Gemfile"
17
+ # {"rails_gem_version" => "3.0.5"}
18
+ # end
19
+ # end
20
+
21
+ private
22
+
23
+ # def generate_something
24
+ # generate "your_generator", "some_parameter"
25
+ # end
26
+
27
+ end
@@ -0,0 +1,37 @@
1
+ require "rubygems"
2
+ require "gem_suit/test_help"
3
+
4
+ class ActiveSupport::TestCase
5
+ # Transactional fixtures accelerate your tests by wrapping each test method
6
+ # in a transaction that's rolled back on completion. This ensures that the
7
+ # test database remains unchanged so your fixtures don't have to be reloaded
8
+ # between every test method. Fewer database queries means faster tests.
9
+ #
10
+ # Read Mike Clark's excellent walkthrough at
11
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
12
+ #
13
+ # Every Active Record database supports transactions except MyISAM tables
14
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
15
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
16
+ # is recommended.
17
+ #
18
+ # The only drawback to using transactional fixtures is when you actually
19
+ # need to test transactions. Since your test is bracketed by a transaction,
20
+ # any transactions started in your code will be automatically rolled back.
21
+ self.use_transactional_fixtures = true
22
+
23
+ # Instantiated fixtures are slow, but give you @david where otherwise you
24
+ # would need people(:david). If you don't want to migrate your existing
25
+ # test cases which use the @david style and don't mind the speed hit (each
26
+ # instantiated fixtures translates to a database query per test method),
27
+ # then set this back to true.
28
+ self.use_instantiated_fixtures = false
29
+
30
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
31
+ #
32
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
33
+ # -- they do not yet inherit this setting
34
+ fixtures :all
35
+
36
+ # Add more helper methods to be used by all tests here...
37
+ end
File without changes
@@ -0,0 +1,14 @@
1
+ require File.expand_path("../../../../test_helper.rb", __FILE__)
2
+
3
+ module Actionpack
4
+ module ActionController
5
+ class RoutingTest < ::ActionController::TestCase
6
+
7
+ test "root_path" do
8
+ assert_routing "/", :controller => "application", :action => "index"
9
+ assert_named_route "/", :root
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path("../../../../test_helper.rb", __FILE__)
2
+
3
+ module Actionpack
4
+ module ActionController
5
+ class TestCaseTest < ActiveSupport::TestCase
6
+
7
+ context "An ActionController::TestCase instance" do
8
+ should "be provided with named route assertion methods" do
9
+ methods = ::ActionController::TestCase.instance_methods
10
+ assert methods.include?("assert_named_route")
11
+ assert methods.include?("named_routes")
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path("../../../../test_helper.rb", __FILE__)
2
+
3
+ module Activesupport
4
+ module ActiveSupport
5
+ class DependenciesTest < ::ActiveSupport::TestCase
6
+
7
+ context "ActiveSupport::Dependencies" do
8
+ should "respond to :autoload_paths" do
9
+ assert ::ActiveSupport::Dependencies.respond_to? :autoload_paths
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path("../../../../test_helper.rb", __FILE__)
2
+
3
+ module Core
4
+ module String
5
+ class ColorizeTest < ActiveSupport::TestCase
6
+
7
+ context "A String" do
8
+ should "respond to colorize methods" do
9
+ assert "".respond_to?(:red)
10
+ assert "".respond_to?(:green)
11
+ assert "".respond_to?(:yellow)
12
+ end
13
+
14
+ should "return the expected when calling a colorize method" do
15
+ assert_equal "\e[1m\e[31mtesting\e[0m", "testing".red
16
+ assert_equal "\e[1m\e[32mtesting\e[0m", "testing".green
17
+ assert_equal "\e[1m\e[33mtesting\e[0m", "testing".yellow
18
+ end
19
+
20
+ context "with a lot of colorization" do
21
+ should "be able to be colorized" do
22
+ string = <<-STRING
23
+ {{green:Create your Firefox 'capybara' profile if you haven't done it yet}}
24
+ Run the following in your console to start the profile manager and create a profile called 'capybara':
25
+ {{yellow:[Mac] $ /Applications/Firefox.app/Contents/MacOS/firefox-bin -profilemanager}}
26
+ {{yellow:[Linux] $ cd <appdir> && ./firefox -profilemanager}}
27
+ {{green:Done establishing current GemSuit in your environment! ^^}}
28
+ STRING
29
+ result = <<-RESULT
30
+ \e[1m\e[32mCreate your Firefox 'capybara' profile if you haven't done it yet\e[0m
31
+ Run the following in your console to start the profile manager and create a profile called 'capybara':
32
+ \e[1m\e[33m[Mac] $ /Applications/Firefox.app/Contents/MacOS/firefox-bin -profilemanager\e[0m
33
+ \e[1m\e[33m[Linux] $ cd <appdir> && ./firefox -profilemanager\e[0m
34
+ \e[1m\e[32mDone establishing current GemSuit in your environment! ^^\e[0m
35
+ RESULT
36
+ assert_equal result, string.colorize
37
+ end
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path("../../../../test_helper.rb", __FILE__)
2
+
3
+ module Core
4
+ module String
5
+ class HtmlSafeTest < ActiveSupport::TestCase
6
+
7
+ context "A String" do
8
+ should "respond to :html_safe" do
9
+ assert "".respond_to?(:html_safe)
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,51 @@
1
+ require File.expand_path("../../../../test_helper.rb", __FILE__)
2
+
3
+ module Core
4
+ module String
5
+ class InflectionsTest < ActiveSupport::TestCase
6
+
7
+ test "upcase_first" do
8
+ assert_equal "", "".upcase_first
9
+ assert_equal "Value", "value".upcase_first
10
+ assert_equal "VALUE", "vALUE".upcase_first
11
+ assert_equal "Value", "Value".upcase_first
12
+ end
13
+
14
+ test "cp_case" do
15
+ assert_equal "VALUE", "value".cp_case("KEY")
16
+ assert_equal "value", "VALUE".cp_case("key")
17
+ assert_equal "VAlUe", "vAlUe".cp_case("Key")
18
+ assert_equal "Welkom bij CodeHero.es", "welkom bij CodeHero.es".cp_case("Welcome at CodeHero.es")
19
+ end
20
+
21
+ test "upcase_first!" do
22
+ assert_equal nil, "".upcase_first!
23
+ assert_equal nil, "Paul".upcase_first!
24
+ assert_equal "Paul", "paul".upcase_first!
25
+ end
26
+
27
+ test "cp_case!" do
28
+ assert_equal nil, "".cp_case!("")
29
+ assert_equal nil, "Paul".cp_case!("Engel")
30
+ assert_equal nil, "PAUL".cp_case!("ENGEL")
31
+ assert_equal "Paul", "paul".cp_case!("Engel")
32
+ assert_equal "PAUL", "paul".cp_case!("ENGEL")
33
+ end
34
+
35
+ test "singularize!" do
36
+ assert_equal nil, "test" .singularize!
37
+ assert_equal nil, "TeSt" .singularize!
38
+ assert_equal "test", "tests".singularize!
39
+ assert_equal "TeSt", "TeSts".singularize!
40
+ end
41
+
42
+ test "pluralize!" do
43
+ assert_equal nil, "tests".pluralize!
44
+ assert_equal nil, "TeSts".pluralize!
45
+ assert_equal "tests", "test" .pluralize!
46
+ assert_equal "TeSts", "TeSt" .pluralize!
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path("../../../test_helper.rb", __FILE__)
2
+
3
+ module Rails
4
+ class EngineTest < ActiveSupport::TestCase
5
+
6
+ context "Rails::Engine" do
7
+ should "be defined" do
8
+ assert defined?(Rails::Engine)
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path("../../../../test_helper.rb", __FILE__)
2
+
3
+ module Test
4
+ module Unit
5
+ class TestCaseTest < ActiveSupport::TestCase
6
+
7
+ context "An Test::Unit::TestCase instance" do
8
+ should "be provided with pending methods" do
9
+ if defined? Test
10
+ klass = ::Test::Unit::TestCase
11
+ # assert klass .methods.include?("pending")
12
+ # assert klass.instance_methods.include?("pending")
13
+ end
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rails", "<%= rails_gem_version %>"
4
+ gem "sqlite3-ruby", :require => "sqlite3"
5
+
6
+ gem "rich_support", :path => File.expand_path("../../../..", __FILE__)
7
+
8
+ group :test do
9
+ gem "mysql"
10
+ gem "shoulda"
11
+ gem "mocha"
12
+ gem "capybara"
13
+ gem "launchy"
14
+ end
@@ -0,0 +1,10 @@
1
+ development:
2
+ adapter: sqlite3
3
+ database: db/development.sqlite3
4
+ pool: 5
5
+ timeout: 5000
6
+ test:
7
+ adapter: sqlite3
8
+ database: db/test.sqlite3
9
+ pool: 5
10
+ timeout: 5000
@@ -0,0 +1,2 @@
1
+ ActiveRecord::Schema.define(:version => 19820801133704) do
2
+ end