flott 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,155 @@
1
+ require 'test_helper'
2
+ require 'flott'
3
+ require 'stringio'
4
+
5
+ class TC_FlottFile < Test::Unit::TestCase
6
+ include Flott
7
+ Flott.debug = false
8
+ def setup
9
+ @expected =<<__EOT
10
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
11
+ "http://www.w3.org/TR/html4/strict.dtd">
12
+ <html>
13
+ <head>
14
+ <title>Hello Flor&lt;i&gt;an!</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
16
+ </head>
17
+ <body>
18
+
19
+ <h1>Hello Flor&lt;i&gt;an[!</h1>
20
+
21
+ <i>Hello Flor<i>an]!</i>
22
+
23
+ <b>Hello Flor&lt;i&gt;an]!</b>
24
+
25
+ <i>Hello Flor<i>an]!</i>
26
+
27
+ <b>Hello Flor&lt;i&gt;an]!</b>
28
+
29
+ <i>Hello Flor<i>an]!</i>
30
+
31
+ <b>Hello Flor&lt;i&gt;an]!</b>
32
+
33
+
34
+ </body> ]
35
+ </html>
36
+ __EOT
37
+ @expected2 =<<__EOT.gsub(/: .*templates/, ': @{prefix}')
38
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
39
+ "http://www.w3.org/TR/html4/strict.dtd">
40
+ <html>
41
+ <head>
42
+ <title>Hello !</title>
43
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
44
+ </head>
45
+ <body>
46
+ Workdir before (template2): @{prefix}
47
+ Workdir 1 (included): @{prefix}/subdir
48
+ Toplevel
49
+ Workdir (toplevel): @{prefix}
50
+
51
+ Workdir 2 (included): @{prefix}/subdir
52
+ Workdir (included2): @{prefix}/subdir/subdir2
53
+
54
+ Workdir 3 (included): @{prefix}/subdir
55
+ Workdir (included3): @{prefix}/subdir
56
+
57
+ Workdir 4 (included): @{prefix}/subdir
58
+ Toplevel
59
+ Workdir (toplevel): @{prefix}/subdir
60
+
61
+ Workdir 5 (included): @{prefix}/subdir
62
+
63
+ Workdir after (template2): @{prefix}
64
+ </body>
65
+ </html>
66
+ __EOT
67
+ workdir = File.join(File.dirname(__FILE__), 'templates')
68
+ @parser = Parser.new(File.read(File.join(workdir, 'template')), workdir)
69
+ @parser2 = Parser.from_filename(File.join(workdir, 'template2'))
70
+ end
71
+
72
+ def test_kind
73
+ assert_kind_of Parser, @parser
74
+ assert_kind_of Parser, @parser2
75
+ end
76
+
77
+ def test_compile
78
+ assert @parser.compile
79
+ end
80
+
81
+ def test_compile2
82
+ assert @parser2.compile
83
+ end
84
+
85
+ def test_execute
86
+ output = StringIO.new('')
87
+ env = Environment.new(output)
88
+ assert_raise(NoMethodError) do
89
+ @parser.evaluate(env)
90
+ end
91
+ output.rewind
92
+ env[:name] = 'Flor<i>an'
93
+ @parser.evaluate(env)
94
+ assert_equal(@expected, output.string)
95
+ output.rewind
96
+ @parser.evaluate(env)
97
+ assert_equal(@expected, output.string)
98
+ end
99
+
100
+ def test_compile_evaluate
101
+ output = StringIO.new('')
102
+ env = Environment.new(output)
103
+ env[:@name] = 'Flor<i>an'
104
+ compiled = @parser.compile
105
+ Flott.evaluate(compiled, env)
106
+ assert_equal(@expected, output.string)
107
+ output.rewind
108
+ Flott.evaluate(compiled, env)
109
+ assert_equal(@expected, output.string)
110
+ end
111
+
112
+ def test_execute2
113
+ output = StringIO.new('')
114
+ env = Environment.new(output)
115
+ @parser2.evaluate(env)
116
+ assert_match(/Toplevel/, output.string)
117
+ output.rewind
118
+ @parser2.evaluate(env)
119
+ assert_match(/Toplevel/, output.string)
120
+ end
121
+
122
+ def test_dynamic_include
123
+ output = ''
124
+ env = Environment.new(output)
125
+ @parser2.evaluate(env)
126
+ output.gsub!(/: .*templates/, ': @{prefix}')
127
+ assert_equal @expected2, output
128
+ end
129
+
130
+ def test_check_secure_pathes
131
+ assert_raises(SecurityViolation) do
132
+ Parser.new('foo', '~foo/bar')
133
+ end
134
+ assert Parser.new('foo', 'foo/bar')
135
+ assert_raises(SecurityViolation) do
136
+ Parser.new('foo', 'foo/bar/../baz')
137
+ end
138
+ assert_raises(SecurityViolation) do
139
+ Parser.new('foo', 'foo', '~foo/bar')
140
+ end
141
+ assert_raises(SecurityViolation) do
142
+ Parser.new('foo', 'foo', 'foo/bar')
143
+ end
144
+ assert Parser.new('foo', 'foo/bar', 'foo')
145
+ assert_raises(SecurityViolation) do
146
+ Parser.new('foo', 'foo/bar', 'bar')
147
+ end
148
+ assert_raises(SecurityViolation) do
149
+ Parser.new('foo', 'bar', 'foo/bar')
150
+ end
151
+ assert_raises(SecurityViolation) do
152
+ Parser.new('foo', 'foo', 'foo/bar/../baz')
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,3 @@
1
+ require 'gem_hadar'
2
+ ENV['START_SIMPLECOV'].to_i == 1 and GemHadar.start_simplecov
3
+ require 'test/unit'
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flott
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Florian Frank
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: gem_hadar
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.1.8
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.1.8
30
+ - !ruby/object:Gem::Dependency
31
+ name: bullshit
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.1.3
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.1.3
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.9.2.2
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.2.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: tins
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.4.2
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.4.2
78
+ description: Ruby as a templating language
79
+ email: flori@ping.de
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files:
83
+ - README.rdoc
84
+ - lib/flott.rb
85
+ - lib/flott/version.rb
86
+ - lib/flott/cache.rb
87
+ files:
88
+ - .gitignore
89
+ - .travis.yml
90
+ - Gemfile
91
+ - README.rdoc
92
+ - Rakefile
93
+ - VERSION
94
+ - benchmarks/data/.keep
95
+ - benchmarks/flott_benchmark.rb
96
+ - benchmarks/runner.rb
97
+ - doc-main.txt
98
+ - flott.gemspec
99
+ - install.rb
100
+ - lib/flott.rb
101
+ - lib/flott/cache.rb
102
+ - lib/flott/version.rb
103
+ - make_doc.rb
104
+ - tests/templates/header
105
+ - tests/templates/subdir/deeptemplate
106
+ - tests/templates/subdir/included
107
+ - tests/templates/subdir/subdir2/deepincluded2
108
+ - tests/templates/subdir/subdir2/included2
109
+ - tests/templates/subdir/subdir3/included3
110
+ - tests/templates/template
111
+ - tests/templates/template2
112
+ - tests/templates/toplevel
113
+ - tests/templates/toplevel2
114
+ - tests/test_cache.rb
115
+ - tests/test_flott.rb
116
+ - tests/test_flott_file.rb
117
+ - tests/test_helper.rb
118
+ homepage: http://github.com/flori/flott
119
+ licenses: []
120
+ post_install_message:
121
+ rdoc_options:
122
+ - --title
123
+ - Flott - Ruby as a templating language
124
+ - --main
125
+ - README.rdoc
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ segments:
135
+ - 0
136
+ hash: -2936619538582661052
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 1.8.24
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: Ruby as a templating language
149
+ test_files:
150
+ - tests/test_flott_file.rb
151
+ - tests/test_flott.rb
152
+ - tests/test_cache.rb
153
+ - tests/test_helper.rb