mega-quick-lib 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.
- checksums.yaml +7 -0
- data/mega-quick-lib.gemspec +12 -0
- data/slim-5.2.1/CHANGES +496 -0
- data/slim-5.2.1/Gemfile +43 -0
- data/slim-5.2.1/LICENSE +21 -0
- data/slim-5.2.1/README.jp.md +1276 -0
- data/slim-5.2.1/README.md +1313 -0
- data/slim-5.2.1/Rakefile +80 -0
- data/slim-5.2.1/bin/slimrb +6 -0
- data/slim-5.2.1/doc/include.md +20 -0
- data/slim-5.2.1/doc/jp/include.md +20 -0
- data/slim-5.2.1/doc/jp/logic_less.md +137 -0
- data/slim-5.2.1/doc/jp/smart.md +102 -0
- data/slim-5.2.1/doc/jp/translator.md +28 -0
- data/slim-5.2.1/doc/logic_less.md +137 -0
- data/slim-5.2.1/doc/smart.md +120 -0
- data/slim-5.2.1/doc/translator.md +28 -0
- data/slim-5.2.1/lib/slim/code_attributes.rb +68 -0
- data/slim-5.2.1/lib/slim/command.rb +122 -0
- data/slim-5.2.1/lib/slim/controls.rb +61 -0
- data/slim-5.2.1/lib/slim/do_inserter.rb +34 -0
- data/slim-5.2.1/lib/slim/embedded.rb +248 -0
- data/slim-5.2.1/lib/slim/end_inserter.rb +63 -0
- data/slim-5.2.1/lib/slim/engine.rb +42 -0
- data/slim-5.2.1/lib/slim/erb_converter.rb +15 -0
- data/slim-5.2.1/lib/slim/filter.rb +31 -0
- data/slim-5.2.1/lib/slim/grammar.rb +24 -0
- data/slim-5.2.1/lib/slim/include.rb +58 -0
- data/slim-5.2.1/lib/slim/interpolation.rb +36 -0
- data/slim-5.2.1/lib/slim/logic_less/context.rb +126 -0
- data/slim-5.2.1/lib/slim/logic_less/filter.rb +81 -0
- data/slim-5.2.1/lib/slim/logic_less.rb +6 -0
- data/slim-5.2.1/lib/slim/parser.rb +535 -0
- data/slim-5.2.1/lib/slim/railtie.rb +19 -0
- data/slim-5.2.1/lib/slim/smart/escaper.rb +42 -0
- data/slim-5.2.1/lib/slim/smart/filter.rb +97 -0
- data/slim-5.2.1/lib/slim/smart/parser.rb +35 -0
- data/slim-5.2.1/lib/slim/smart.rb +9 -0
- data/slim-5.2.1/lib/slim/splat/builder.rb +115 -0
- data/slim-5.2.1/lib/slim/splat/filter.rb +93 -0
- data/slim-5.2.1/lib/slim/template.rb +6 -0
- data/slim-5.2.1/lib/slim/translator.rb +119 -0
- data/slim-5.2.1/lib/slim/version.rb +6 -0
- data/slim-5.2.1/lib/slim.rb +16 -0
- data/slim-5.2.1/slim.gemspec +33 -0
- data/slim-5.2.1/test/core/helper.rb +201 -0
- data/slim-5.2.1/test/core/test_code_blocks.rb +194 -0
- data/slim-5.2.1/test/core/test_code_escaping.rb +162 -0
- data/slim-5.2.1/test/core/test_code_evaluation.rb +181 -0
- data/slim-5.2.1/test/core/test_code_output.rb +168 -0
- data/slim-5.2.1/test/core/test_code_structure.rb +203 -0
- data/slim-5.2.1/test/core/test_commands.rb +219 -0
- data/slim-5.2.1/test/core/test_embedded_engines.rb +247 -0
- data/slim-5.2.1/test/core/test_encoding.rb +28 -0
- data/slim-5.2.1/test/core/test_erb_converter.rb +65 -0
- data/slim-5.2.1/test/core/test_html_attributes.rb +276 -0
- data/slim-5.2.1/test/core/test_html_escaping.rb +65 -0
- data/slim-5.2.1/test/core/test_html_structure.rb +599 -0
- data/slim-5.2.1/test/core/test_parser_errors.rb +148 -0
- data/slim-5.2.1/test/core/test_pretty.rb +163 -0
- data/slim-5.2.1/test/core/test_ruby_errors.rb +200 -0
- data/slim-5.2.1/test/core/test_slim_template.rb +78 -0
- data/slim-5.2.1/test/core/test_splat_prefix_option.rb +155 -0
- data/slim-5.2.1/test/core/test_tabs.rb +169 -0
- data/slim-5.2.1/test/core/test_text_interpolation.rb +79 -0
- data/slim-5.2.1/test/core/test_thread_options.rb +18 -0
- data/slim-5.2.1/test/core/test_unicode.rb +15 -0
- data/slim-5.2.1/test/include/files/recursive.slim +1 -0
- data/slim-5.2.1/test/include/files/slimfile.slim +3 -0
- data/slim-5.2.1/test/include/files/subdir/test.slim +1 -0
- data/slim-5.2.1/test/include/files/textfile +1 -0
- data/slim-5.2.1/test/include/test_include.rb +24 -0
- data/slim-5.2.1/test/literate/TESTS.md +1323 -0
- data/slim-5.2.1/test/literate/helper.rb +15 -0
- data/slim-5.2.1/test/literate/run.rb +92 -0
- data/slim-5.2.1/test/logic_less/test_logic_less.rb +330 -0
- data/slim-5.2.1/test/rails/Rakefile +7 -0
- data/slim-5.2.1/test/rails/app/assets/config/manifest.js +1 -0
- data/slim-5.2.1/test/rails/app/controllers/application_controller.rb +2 -0
- data/slim-5.2.1/test/rails/app/controllers/entries_controller.rb +5 -0
- data/slim-5.2.1/test/rails/app/controllers/slim_controller.rb +46 -0
- data/slim-5.2.1/test/rails/app/helpers/application_helper.rb +5 -0
- data/slim-5.2.1/test/rails/app/models/entry.rb +16 -0
- data/slim-5.2.1/test/rails/app/views/entries/edit.html.slim +3 -0
- data/slim-5.2.1/test/rails/app/views/layouts/application.html+testvariant.slim +10 -0
- data/slim-5.2.1/test/rails/app/views/layouts/application.html.slim +10 -0
- data/slim-5.2.1/test/rails/app/views/slim/_partial.html.slim +1 -0
- data/slim-5.2.1/test/rails/app/views/slim/attributes.html.slim +3 -0
- data/slim-5.2.1/test/rails/app/views/slim/content_for.html.slim +7 -0
- data/slim-5.2.1/test/rails/app/views/slim/erb.html.erb +1 -0
- data/slim-5.2.1/test/rails/app/views/slim/form_for.html.slim +2 -0
- data/slim-5.2.1/test/rails/app/views/slim/helper.html.slim +4 -0
- data/slim-5.2.1/test/rails/app/views/slim/integers.html.slim +1 -0
- data/slim-5.2.1/test/rails/app/views/slim/no_layout.html.slim +1 -0
- data/slim-5.2.1/test/rails/app/views/slim/normal.html.slim +1 -0
- data/slim-5.2.1/test/rails/app/views/slim/partial.html.slim +2 -0
- data/slim-5.2.1/test/rails/app/views/slim/splat.html.slim +2 -0
- data/slim-5.2.1/test/rails/app/views/slim/splat_with_delimiter.slim +1 -0
- data/slim-5.2.1/test/rails/app/views/slim/thread_options.html.slim +1 -0
- data/slim-5.2.1/test/rails/app/views/slim/variables.html.slim +1 -0
- data/slim-5.2.1/test/rails/app/views/slim/xml.slim +1 -0
- data/slim-5.2.1/test/rails/config/application.rb +44 -0
- data/slim-5.2.1/test/rails/config/boot.rb +10 -0
- data/slim-5.2.1/test/rails/config/environment.rb +5 -0
- data/slim-5.2.1/test/rails/config/environments/test.rb +34 -0
- data/slim-5.2.1/test/rails/config/initializers/backtrace_silencers.rb +7 -0
- data/slim-5.2.1/test/rails/config/initializers/inflections.rb +10 -0
- data/slim-5.2.1/test/rails/config/initializers/mime_types.rb +5 -0
- data/slim-5.2.1/test/rails/config/initializers/session_store.rb +8 -0
- data/slim-5.2.1/test/rails/config/locales/en.yml +5 -0
- data/slim-5.2.1/test/rails/config/routes.rb +60 -0
- data/slim-5.2.1/test/rails/config.ru +4 -0
- data/slim-5.2.1/test/rails/script/rails +6 -0
- data/slim-5.2.1/test/rails/test/helper.rb +34 -0
- data/slim-5.2.1/test/rails/test/test_slim.rb +102 -0
- data/slim-5.2.1/test/sinatra/contest.rb +91 -0
- data/slim-5.2.1/test/sinatra/helper.rb +143 -0
- data/slim-5.2.1/test/sinatra/test_core.rb +91 -0
- data/slim-5.2.1/test/sinatra/test_include.rb +16 -0
- data/slim-5.2.1/test/sinatra/views/embed_include_js.slim +8 -0
- data/slim-5.2.1/test/sinatra/views/embed_js.slim +11 -0
- data/slim-5.2.1/test/sinatra/views/footer.slim +1 -0
- data/slim-5.2.1/test/sinatra/views/hello.slim +1 -0
- data/slim-5.2.1/test/sinatra/views/layout2.slim +3 -0
- data/slim-5.2.1/test/smart/test_smart_text.rb +294 -0
- data/slim-5.2.1/test/translator/test_translator.rb +76 -0
- metadata +166 -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
|