super-pro-kit 0.0.1

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 (127) hide show
  1. checksums.yaml +7 -0
  2. data/slim-5.2.1/CHANGES +496 -0
  3. data/slim-5.2.1/Gemfile +43 -0
  4. data/slim-5.2.1/LICENSE +21 -0
  5. data/slim-5.2.1/README.jp.md +1276 -0
  6. data/slim-5.2.1/README.md +1313 -0
  7. data/slim-5.2.1/Rakefile +80 -0
  8. data/slim-5.2.1/bin/slimrb +6 -0
  9. data/slim-5.2.1/doc/include.md +20 -0
  10. data/slim-5.2.1/doc/jp/include.md +20 -0
  11. data/slim-5.2.1/doc/jp/logic_less.md +137 -0
  12. data/slim-5.2.1/doc/jp/smart.md +102 -0
  13. data/slim-5.2.1/doc/jp/translator.md +28 -0
  14. data/slim-5.2.1/doc/logic_less.md +137 -0
  15. data/slim-5.2.1/doc/smart.md +120 -0
  16. data/slim-5.2.1/doc/translator.md +28 -0
  17. data/slim-5.2.1/lib/slim/code_attributes.rb +68 -0
  18. data/slim-5.2.1/lib/slim/command.rb +122 -0
  19. data/slim-5.2.1/lib/slim/controls.rb +61 -0
  20. data/slim-5.2.1/lib/slim/do_inserter.rb +34 -0
  21. data/slim-5.2.1/lib/slim/embedded.rb +248 -0
  22. data/slim-5.2.1/lib/slim/end_inserter.rb +63 -0
  23. data/slim-5.2.1/lib/slim/engine.rb +42 -0
  24. data/slim-5.2.1/lib/slim/erb_converter.rb +15 -0
  25. data/slim-5.2.1/lib/slim/filter.rb +31 -0
  26. data/slim-5.2.1/lib/slim/grammar.rb +24 -0
  27. data/slim-5.2.1/lib/slim/include.rb +58 -0
  28. data/slim-5.2.1/lib/slim/interpolation.rb +36 -0
  29. data/slim-5.2.1/lib/slim/logic_less/context.rb +126 -0
  30. data/slim-5.2.1/lib/slim/logic_less/filter.rb +81 -0
  31. data/slim-5.2.1/lib/slim/logic_less.rb +6 -0
  32. data/slim-5.2.1/lib/slim/parser.rb +535 -0
  33. data/slim-5.2.1/lib/slim/railtie.rb +19 -0
  34. data/slim-5.2.1/lib/slim/smart/escaper.rb +42 -0
  35. data/slim-5.2.1/lib/slim/smart/filter.rb +97 -0
  36. data/slim-5.2.1/lib/slim/smart/parser.rb +35 -0
  37. data/slim-5.2.1/lib/slim/smart.rb +9 -0
  38. data/slim-5.2.1/lib/slim/splat/builder.rb +115 -0
  39. data/slim-5.2.1/lib/slim/splat/filter.rb +93 -0
  40. data/slim-5.2.1/lib/slim/template.rb +6 -0
  41. data/slim-5.2.1/lib/slim/translator.rb +119 -0
  42. data/slim-5.2.1/lib/slim/version.rb +6 -0
  43. data/slim-5.2.1/lib/slim.rb +16 -0
  44. data/slim-5.2.1/slim.gemspec +33 -0
  45. data/slim-5.2.1/test/core/helper.rb +201 -0
  46. data/slim-5.2.1/test/core/test_code_blocks.rb +194 -0
  47. data/slim-5.2.1/test/core/test_code_escaping.rb +162 -0
  48. data/slim-5.2.1/test/core/test_code_evaluation.rb +181 -0
  49. data/slim-5.2.1/test/core/test_code_output.rb +168 -0
  50. data/slim-5.2.1/test/core/test_code_structure.rb +203 -0
  51. data/slim-5.2.1/test/core/test_commands.rb +219 -0
  52. data/slim-5.2.1/test/core/test_embedded_engines.rb +247 -0
  53. data/slim-5.2.1/test/core/test_encoding.rb +28 -0
  54. data/slim-5.2.1/test/core/test_erb_converter.rb +65 -0
  55. data/slim-5.2.1/test/core/test_html_attributes.rb +276 -0
  56. data/slim-5.2.1/test/core/test_html_escaping.rb +65 -0
  57. data/slim-5.2.1/test/core/test_html_structure.rb +599 -0
  58. data/slim-5.2.1/test/core/test_parser_errors.rb +148 -0
  59. data/slim-5.2.1/test/core/test_pretty.rb +163 -0
  60. data/slim-5.2.1/test/core/test_ruby_errors.rb +200 -0
  61. data/slim-5.2.1/test/core/test_slim_template.rb +78 -0
  62. data/slim-5.2.1/test/core/test_splat_prefix_option.rb +155 -0
  63. data/slim-5.2.1/test/core/test_tabs.rb +169 -0
  64. data/slim-5.2.1/test/core/test_text_interpolation.rb +79 -0
  65. data/slim-5.2.1/test/core/test_thread_options.rb +18 -0
  66. data/slim-5.2.1/test/core/test_unicode.rb +15 -0
  67. data/slim-5.2.1/test/include/files/recursive.slim +1 -0
  68. data/slim-5.2.1/test/include/files/slimfile.slim +3 -0
  69. data/slim-5.2.1/test/include/files/subdir/test.slim +1 -0
  70. data/slim-5.2.1/test/include/files/textfile +1 -0
  71. data/slim-5.2.1/test/include/test_include.rb +24 -0
  72. data/slim-5.2.1/test/literate/TESTS.md +1323 -0
  73. data/slim-5.2.1/test/literate/helper.rb +15 -0
  74. data/slim-5.2.1/test/literate/run.rb +92 -0
  75. data/slim-5.2.1/test/logic_less/test_logic_less.rb +330 -0
  76. data/slim-5.2.1/test/rails/Rakefile +7 -0
  77. data/slim-5.2.1/test/rails/app/assets/config/manifest.js +1 -0
  78. data/slim-5.2.1/test/rails/app/controllers/application_controller.rb +2 -0
  79. data/slim-5.2.1/test/rails/app/controllers/entries_controller.rb +5 -0
  80. data/slim-5.2.1/test/rails/app/controllers/slim_controller.rb +46 -0
  81. data/slim-5.2.1/test/rails/app/helpers/application_helper.rb +5 -0
  82. data/slim-5.2.1/test/rails/app/models/entry.rb +16 -0
  83. data/slim-5.2.1/test/rails/app/views/entries/edit.html.slim +3 -0
  84. data/slim-5.2.1/test/rails/app/views/layouts/application.html+testvariant.slim +10 -0
  85. data/slim-5.2.1/test/rails/app/views/layouts/application.html.slim +10 -0
  86. data/slim-5.2.1/test/rails/app/views/slim/_partial.html.slim +1 -0
  87. data/slim-5.2.1/test/rails/app/views/slim/attributes.html.slim +3 -0
  88. data/slim-5.2.1/test/rails/app/views/slim/content_for.html.slim +7 -0
  89. data/slim-5.2.1/test/rails/app/views/slim/erb.html.erb +1 -0
  90. data/slim-5.2.1/test/rails/app/views/slim/form_for.html.slim +2 -0
  91. data/slim-5.2.1/test/rails/app/views/slim/helper.html.slim +4 -0
  92. data/slim-5.2.1/test/rails/app/views/slim/integers.html.slim +1 -0
  93. data/slim-5.2.1/test/rails/app/views/slim/no_layout.html.slim +1 -0
  94. data/slim-5.2.1/test/rails/app/views/slim/normal.html.slim +1 -0
  95. data/slim-5.2.1/test/rails/app/views/slim/partial.html.slim +2 -0
  96. data/slim-5.2.1/test/rails/app/views/slim/splat.html.slim +2 -0
  97. data/slim-5.2.1/test/rails/app/views/slim/splat_with_delimiter.slim +1 -0
  98. data/slim-5.2.1/test/rails/app/views/slim/thread_options.html.slim +1 -0
  99. data/slim-5.2.1/test/rails/app/views/slim/variables.html.slim +1 -0
  100. data/slim-5.2.1/test/rails/app/views/slim/xml.slim +1 -0
  101. data/slim-5.2.1/test/rails/config/application.rb +44 -0
  102. data/slim-5.2.1/test/rails/config/boot.rb +10 -0
  103. data/slim-5.2.1/test/rails/config/environment.rb +5 -0
  104. data/slim-5.2.1/test/rails/config/environments/test.rb +34 -0
  105. data/slim-5.2.1/test/rails/config/initializers/backtrace_silencers.rb +7 -0
  106. data/slim-5.2.1/test/rails/config/initializers/inflections.rb +10 -0
  107. data/slim-5.2.1/test/rails/config/initializers/mime_types.rb +5 -0
  108. data/slim-5.2.1/test/rails/config/initializers/session_store.rb +8 -0
  109. data/slim-5.2.1/test/rails/config/locales/en.yml +5 -0
  110. data/slim-5.2.1/test/rails/config/routes.rb +60 -0
  111. data/slim-5.2.1/test/rails/config.ru +4 -0
  112. data/slim-5.2.1/test/rails/script/rails +6 -0
  113. data/slim-5.2.1/test/rails/test/helper.rb +34 -0
  114. data/slim-5.2.1/test/rails/test/test_slim.rb +102 -0
  115. data/slim-5.2.1/test/sinatra/contest.rb +91 -0
  116. data/slim-5.2.1/test/sinatra/helper.rb +143 -0
  117. data/slim-5.2.1/test/sinatra/test_core.rb +91 -0
  118. data/slim-5.2.1/test/sinatra/test_include.rb +16 -0
  119. data/slim-5.2.1/test/sinatra/views/embed_include_js.slim +8 -0
  120. data/slim-5.2.1/test/sinatra/views/embed_js.slim +11 -0
  121. data/slim-5.2.1/test/sinatra/views/footer.slim +1 -0
  122. data/slim-5.2.1/test/sinatra/views/hello.slim +1 -0
  123. data/slim-5.2.1/test/sinatra/views/layout2.slim +3 -0
  124. data/slim-5.2.1/test/smart/test_smart_text.rb +294 -0
  125. data/slim-5.2.1/test/translator/test_translator.rb +76 -0
  126. data/super-pro-kit.gemspec +11 -0
  127. metadata +165 -0
@@ -0,0 +1,148 @@
1
+ require 'helper'
2
+
3
+ class TestParserErrors < TestSlim
4
+ def test_correct_filename
5
+ source = %q{
6
+ doctype 5
7
+ div Invalid
8
+ }
9
+
10
+ assert_syntax_error "Unexpected indentation\n test.slim, Line 3, Column 2\n div Invalid\n ^\n", source, file: 'test.slim'
11
+ end
12
+
13
+ def test_unexpected_indentation
14
+ source = %q{
15
+ doctype 5
16
+ div Invalid
17
+ }
18
+
19
+ assert_syntax_error "Unexpected indentation\n (__TEMPLATE__), Line 3, Column 2\n div Invalid\n ^\n", source
20
+ end
21
+
22
+ def test_malformed_indentation
23
+ source = %q{
24
+ p
25
+ div Valid
26
+ div Invalid
27
+ }
28
+
29
+ assert_syntax_error "Malformed indentation\n (__TEMPLATE__), Line 4, Column 1\n div Invalid\n ^\n", source
30
+ end
31
+
32
+ def test_malformed_indentation2
33
+ source = %q{
34
+ div Valid
35
+ div Invalid
36
+ }
37
+
38
+ assert_syntax_error "Malformed indentation\n (__TEMPLATE__), Line 3, Column 1\n div Invalid\n ^\n", source
39
+ end
40
+
41
+ def test_unknown_line_indicator
42
+ source = %q{
43
+ p
44
+ div Valid
45
+ .valid
46
+ #valid
47
+ ?invalid
48
+ }
49
+
50
+ assert_syntax_error "Unknown line indicator\n (__TEMPLATE__), Line 6, Column 2\n ?invalid\n ^\n", source
51
+ end
52
+
53
+ def test_expected_closing_delimiter
54
+ source = %q{
55
+ p
56
+ img(src="img.jpg" title={title}
57
+ }
58
+
59
+ assert_syntax_error "Expected closing delimiter )\n (__TEMPLATE__), Line 3, Column 33\n img(src=\"img.jpg\" title={title}\n ^\n", source
60
+ end
61
+
62
+ def test_missing_quote_unexpected_end
63
+ source = %q{
64
+ p
65
+ img(src="img.jpg
66
+ }
67
+
68
+ assert_syntax_error "Unexpected end of file\n (__TEMPLATE__), Line 3, Column 0\n \n ^\n", source
69
+ end
70
+
71
+ def test_expected_closing_attribute_delimiter
72
+ source = %q{
73
+ p
74
+ img src=[hash[1] + hash[2]
75
+ }
76
+
77
+ assert_syntax_error "Expected closing delimiter ]\n (__TEMPLATE__), Line 3, Column 28\n img src=[hash[1] + hash[2]\n ^\n", source
78
+ end
79
+
80
+ def test_invalid_empty_attribute
81
+ source = %q{
82
+ p
83
+ img{src= }
84
+ }
85
+
86
+ assert_syntax_error "Invalid empty attribute\n (__TEMPLATE__), Line 3, Column 11\n img{src= }\n ^\n", source
87
+ end
88
+
89
+ def test_invalid_empty_attribute2
90
+ source = %q{
91
+ p
92
+ img{src=}
93
+ }
94
+
95
+ assert_syntax_error "Invalid empty attribute\n (__TEMPLATE__), Line 3, Column 10\n img{src=}\n ^\n", source
96
+ end
97
+
98
+ def test_invalid_empty_attribute3
99
+ source = %q{
100
+ p
101
+ img src=
102
+ }
103
+
104
+ assert_syntax_error "Invalid empty attribute\n (__TEMPLATE__), Line 3, Column 10\n img src=\n ^\n", source
105
+ end
106
+
107
+ def test_missing_tag_in_block_expansion
108
+ source = %{
109
+ html: body:
110
+ }
111
+
112
+ assert_syntax_error "Expected tag\n (__TEMPLATE__), Line 2, Column 11\n html: body:\n ^\n", source
113
+ end
114
+
115
+ def test_invalid_tag_in_block_expansion
116
+ source = %{
117
+ html: body: /comment
118
+ }
119
+ assert_syntax_error "Expected tag\n (__TEMPLATE__), Line 2, Column 12\n html: body: /comment\n ^\n", source
120
+
121
+ source = %{
122
+ html: body:/comment
123
+ }
124
+ assert_syntax_error "Expected tag\n (__TEMPLATE__), Line 2, Column 11\n html: body:/comment\n ^\n", source
125
+ end
126
+
127
+ def test_unexpected_text_after_closed
128
+ source = %{
129
+ img / text
130
+ }
131
+
132
+ assert_syntax_error "Unexpected text after closed tag\n (__TEMPLATE__), Line 2, Column 6\n img / text\n ^\n", source
133
+ end
134
+
135
+ def test_illegal_shortcuts
136
+ source = %{
137
+ .#test
138
+ }
139
+
140
+ assert_syntax_error "Illegal shortcut\n (__TEMPLATE__), Line 2, Column 0\n .#test\n ^\n", source
141
+
142
+ source = %{
143
+ div.#test
144
+ }
145
+
146
+ assert_syntax_error "Illegal shortcut\n (__TEMPLATE__), Line 2, Column 3\n div.#test\n ^\n", source
147
+ end
148
+ end
@@ -0,0 +1,163 @@
1
+ require 'helper'
2
+
3
+ class TestSlimPretty < TestSlim
4
+ def setup
5
+ super
6
+ Slim::Engine.set_options pretty: true
7
+ end
8
+
9
+ def teardown
10
+ Slim::Engine.set_options pretty: false
11
+ end
12
+
13
+ def test_pretty
14
+ source = %q{
15
+ doctype 5
16
+ html
17
+ head
18
+ title Hello World!
19
+ /! Meta tags
20
+ with long explanatory
21
+ multiline comment
22
+ meta name="description" content="template language"
23
+ /! Stylesheets
24
+ link href="style.css" media="screen" rel="stylesheet" type="text/css"
25
+ link href="colors.css" media="screen" rel="stylesheet" type="text/css"
26
+ /! Javascripts
27
+ script src="jquery.js"
28
+ script src="jquery.ui.js"
29
+ /[if lt IE 9]
30
+ script src="old-ie1.js"
31
+ script src="old-ie2.js"
32
+ css:
33
+ body { background-color: red; }
34
+ body
35
+ #container
36
+ p Hello
37
+ World!
38
+ p= "dynamic text with\nnewline"
39
+ }
40
+
41
+ result = %q{<!DOCTYPE html>
42
+ <html>
43
+ <head>
44
+ <title>Hello World!</title><!--Meta tags
45
+ with long explanatory
46
+ multiline comment-->
47
+ <meta content="template language" name="description" />
48
+ <!--Stylesheets-->
49
+ <link href="style.css" media="screen" rel="stylesheet" type="text/css" />
50
+ <link href="colors.css" media="screen" rel="stylesheet" type="text/css" />
51
+ <!--Javascripts-->
52
+ <script src="jquery.js"></script>
53
+ <script src="jquery.ui.js"></script>
54
+ <!--[if lt IE 9]>
55
+ <script src="old-ie1.js"></script>
56
+ <script src="old-ie2.js"></script>
57
+ <![endif]-->
58
+ <style>
59
+ body { background-color: red; }
60
+ </style>
61
+ </head>
62
+ <body>
63
+ <div id="container">
64
+ <p>
65
+ Hello
66
+ World!
67
+ </p>
68
+ <p>
69
+ dynamic text with
70
+ newline
71
+ </p>
72
+ </div>
73
+ </body>
74
+ </html>}
75
+
76
+ assert_html result, source
77
+ end
78
+
79
+ def test_partials
80
+ body = %q{body
81
+ == render content}
82
+
83
+ content = %q{div
84
+ | content}
85
+
86
+ source = %q{html
87
+ == render body, scope: self, locals: { content: content }}
88
+
89
+ result = %q{<html>
90
+ <body>
91
+ <div>
92
+ content
93
+ </div>
94
+ </body>
95
+ </html>}
96
+
97
+ assert_html result, source, scope: self, locals: {body: body, content: content }
98
+ end
99
+
100
+ def test_correct_line_number
101
+ source = %q{
102
+ html
103
+ head
104
+ body
105
+ p Slim
106
+ = ''
107
+ = ''
108
+ = ''
109
+ = unknown_ruby_method
110
+ }
111
+
112
+ assert_ruby_error NameError,"(__TEMPLATE__):9", source
113
+ end
114
+
115
+ def test_unindenting
116
+ source = %q{
117
+ span before
118
+ span = " middle "
119
+ span after
120
+ }
121
+
122
+ result = %q{<span>before</span><span> middle </span><span>after</span>}
123
+
124
+ assert_html result, source
125
+
126
+ source = %q{
127
+ html
128
+ body == " <div>\n <a>link</a>\n </div>"
129
+ }
130
+
131
+ result = %q{<html>
132
+ <body>
133
+ <div>
134
+ <a>link</a>
135
+ </div>
136
+ </body>
137
+ </html>}
138
+ assert_html result, source
139
+ end
140
+
141
+ def test_helper_unindent
142
+ source = %q{
143
+ = define_macro :content
144
+ div
145
+ a link
146
+ html
147
+ body
148
+ == call_macro :content
149
+ }
150
+
151
+ result = %q{
152
+
153
+ <html>
154
+ <body>
155
+ <div>
156
+ <a>link</a>
157
+ </div>
158
+ </body>
159
+ </html>}
160
+
161
+ assert_html result, source
162
+ end
163
+ end
@@ -0,0 +1,200 @@
1
+ require 'helper'
2
+
3
+ class TestSlimRubyErrors < TestSlim
4
+ def test_multline_attribute
5
+ source = %q{
6
+ p(data-1=1
7
+ data2-=1)
8
+ p
9
+ = unknown_ruby_method
10
+ }
11
+
12
+ assert_ruby_error NameError, "test.slim:5", source, file: 'test.slim'
13
+ end
14
+
15
+ def test_broken_output_line
16
+ source = %q{
17
+ p = hello_world + \
18
+ hello_world + \
19
+ unknown_ruby_method
20
+ }
21
+
22
+ assert_ruby_error NameError, "test.slim:4", source, file: 'test.slim'
23
+ end
24
+
25
+ def test_broken_output_line2
26
+ source = %q{
27
+ p = hello_world + \
28
+ hello_world
29
+ p Hello
30
+ = unknown_ruby_method
31
+ }
32
+
33
+ assert_ruby_error NameError,"(__TEMPLATE__):5", source
34
+ end
35
+
36
+ def test_output_block
37
+ source = %q{
38
+ p = hello_world "Hello Ruby" do
39
+ = unknown_ruby_method
40
+ }
41
+
42
+ assert_ruby_error NameError,"(__TEMPLATE__):3", source
43
+ end
44
+
45
+ def test_output_block2
46
+ source = %q{
47
+ p = hello_world "Hello Ruby" do
48
+ = "Hello from block"
49
+ p Hello
50
+ = unknown_ruby_method
51
+ }
52
+
53
+ assert_ruby_error NameError, "(__TEMPLATE__):5", source
54
+ end
55
+
56
+ def test_text_block
57
+ source = %q{
58
+ p Text line 1
59
+ Text line 2
60
+ = unknown_ruby_method
61
+ }
62
+
63
+ assert_ruby_error NameError,"(__TEMPLATE__):4", source
64
+ end
65
+
66
+ def test_text_block2
67
+ source = %q{
68
+ |
69
+ Text line 1
70
+ Text line 2
71
+ = unknown_ruby_method
72
+ }
73
+
74
+ assert_ruby_error NameError,"(__TEMPLATE__):5", source
75
+ end
76
+
77
+ def test_comment
78
+ source = %q{
79
+ / Comment line 1
80
+ Comment line 2
81
+ = unknown_ruby_method
82
+ }
83
+
84
+ assert_ruby_error NameError,"(__TEMPLATE__):4", source
85
+ end
86
+
87
+ def test_embedded_ruby1
88
+ source = %q{
89
+ ruby:
90
+ a = 1
91
+ b = 2
92
+ = a + b
93
+ = unknown_ruby_method
94
+ }
95
+
96
+ assert_ruby_error NameError,"(__TEMPLATE__):7", source
97
+ end
98
+
99
+ def test_embedded_ruby2
100
+ source = %q{
101
+ ruby:
102
+ a = 1
103
+ unknown_ruby_method
104
+ }
105
+
106
+ assert_ruby_error NameError,"(__TEMPLATE__):4", source
107
+ end
108
+
109
+ def test_embedded_ruby3
110
+ source = %q{
111
+ h1 before
112
+ ruby:
113
+ a = 1
114
+
115
+ h1 between
116
+ ruby:
117
+ b = a + 1
118
+
119
+ unknown_ruby_method
120
+
121
+ c = 3
122
+ h1 third
123
+ }
124
+
125
+ assert_ruby_error NameError,"(__TEMPLATE__):10", source
126
+ end
127
+
128
+ def test_embedded_markdown
129
+ source = %q{
130
+ markdown:
131
+ #Header
132
+ Hello from #{"Markdown!"}
133
+ "Second Line!"
134
+ = unknown_ruby_method
135
+ }
136
+
137
+ assert_ruby_error NameError,"(__TEMPLATE__):6", source
138
+ end
139
+
140
+ def test_embedded_javascript
141
+ source = %q{
142
+ javascript:
143
+ alert();
144
+ alert();
145
+ = unknown_ruby_method
146
+ }
147
+
148
+ assert_ruby_error NameError,"(__TEMPLATE__):5", source
149
+ end
150
+
151
+ def test_invalid_nested_code
152
+ source = %q{
153
+ p
154
+ - test = 123
155
+ = "Hello from within a block! "
156
+ }
157
+ assert_ruby_syntax_error "(__TEMPLATE__):3", source
158
+ end
159
+
160
+ def test_invalid_nested_output
161
+ source = %q{
162
+ p
163
+ = "Hello Ruby!"
164
+ = "Hello from within a block! "
165
+ }
166
+ assert_ruby_syntax_error "(__TEMPLATE__):3", source
167
+ end
168
+
169
+ def test_explicit_end
170
+ source = %q{
171
+ div
172
+ - if show_first?
173
+ p The first paragraph
174
+ - end
175
+ }
176
+
177
+ assert_runtime_error 'Explicit end statements are forbidden', source
178
+ end
179
+
180
+ def test_multiple_id_attribute
181
+ source = %{
182
+ #alpha id="beta" Test it
183
+ }
184
+ assert_runtime_error 'Multiple id attributes specified', source
185
+ end
186
+
187
+ def test_splat_multiple_id_attribute
188
+ source = %{
189
+ #alpha *{id:"beta"} Test it
190
+ }
191
+ assert_runtime_error 'Multiple id attributes specified', source
192
+ end
193
+
194
+ # def test_invalid_option
195
+ # render('', foobar: 42)
196
+ # raise Exception, 'ArgumentError expected'
197
+ # rescue ArgumentError => ex
198
+ # assert_equal 'Option :foobar is not supported by Slim::Engine', ex.message
199
+ # end
200
+ end
@@ -0,0 +1,78 @@
1
+ require 'helper'
2
+
3
+ class ::MockError < NameError
4
+ end
5
+
6
+ class TestSlimTemplate < TestSlim
7
+ def test_default_mime_type
8
+ assert_equal 'text/html', Slim::Template.default_mime_type
9
+ end
10
+
11
+ def test_registered_extension
12
+ assert_equal Slim::Template, Tilt['test.slim']
13
+ end
14
+
15
+ def test_preparing_and_evaluating
16
+ template = Slim::Template.new { |t| "p Hello World!\n" }
17
+ assert_equal "<p>Hello World!</p>", template.render
18
+ end
19
+
20
+ def test_evaluating_in_an_object_scope
21
+ template = Slim::Template.new { "p = 'Hey ' + @name + '!'\n" }
22
+ scope = Object.new
23
+ scope.instance_variable_set :@name, 'Joe'
24
+ assert_equal "<p>Hey Joe!</p>", template.render(scope)
25
+ end
26
+
27
+ def test_passing_a_block_for_yield
28
+ template = Slim::Template.new { "p = 'Hey ' + yield + '!'\n" }
29
+ assert_equal "<p>Hey Joe!</p>", template.render { 'Joe' }
30
+ end
31
+
32
+ def test_backtrace_file_and_line_reporting_without_locals
33
+ data = File.read(__FILE__).split("\n__END__\n").last
34
+ fail unless data[0] == ?h
35
+ template = Slim::Template.new('test.slim', 10) { data }
36
+ begin
37
+ template.render
38
+ fail 'should have raised an exception'
39
+ rescue => ex
40
+ assert_kind_of NameError, ex
41
+ assert_backtrace(ex, 'test.slim:12')
42
+ end
43
+ end
44
+
45
+ def test_backtrace_file_and_line_reporting_with_locals
46
+ data = File.read(__FILE__).split("\n__END__\n").last
47
+ fail unless data[0] == ?h
48
+ template = Slim::Template.new('test.slim') { data }
49
+ begin
50
+ template.render(Object.new, name: 'Joe', foo: 'bar')
51
+ fail 'should have raised an exception'
52
+ rescue => ex
53
+ assert_kind_of MockError, ex
54
+ assert_backtrace(ex, 'test.slim:5')
55
+ end
56
+ end
57
+
58
+ def test_compiling_template_source_to_a_method
59
+ template = Slim::Template.new { |t| "Hello World!" }
60
+ template.render
61
+ method = template.send(:compiled_method, [])
62
+ assert_kind_of UnboundMethod, method
63
+ end
64
+
65
+ def test_passing_locals
66
+ template = Slim::Template.new { "p = 'Hey ' + name + '!'\n" }
67
+ assert_equal "<p>Hey Joe!</p>", template.render(Object.new, name: 'Joe')
68
+ end
69
+ end
70
+
71
+ __END__
72
+ html
73
+ body
74
+ h1 = "Hey #{name}"
75
+
76
+ = raise MockError
77
+
78
+ p we never get here