File: tilt_test.rb

package info (click to toggle)
ruby-tilt 2.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 648 kB
  • sloc: ruby: 4,998; makefile: 7
file content (132 lines) | stat: -rw-r--r-- 3,767 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
require_relative 'test_helper'

describe 'tilt' do
  _MockTemplate = Class.new do
    attr_reader :args, :block
    def initialize(*args, &block)
      @args = args
      @block = block
    end
  end

  after do
    Tilt.default_mapping.unregister('mock')
  end

  it "registering template implementation classes by file extension" do
    Tilt.register(_MockTemplate, 'mock')
  end

  it "an extension is registered if explicit handle is found" do
    Tilt.register(_MockTemplate, 'mock')
    assert Tilt.registered?('mock')
  end

  it "registering template classes by symbol file extension" do
    Tilt.register(_MockTemplate, :mock)
  end

  it "registering template classes with prefer" do
    Tilt.prefer(_MockTemplate, :mock)
  end

  it "looking up template classes by exact file extension" do
    Tilt.register(_MockTemplate, 'mock')
    impl = Tilt['mock']
    assert_equal _MockTemplate, impl
  end

  it "should have working template_for" do
    Tilt.register(_MockTemplate, 'mock')
    assert_equal _MockTemplate, Tilt.template_for('mock')
  end

  it "should have working templates_for" do
    Tilt.register(_MockTemplate, 'mock')
    assert_equal [_MockTemplate], Tilt.templates_for('mock')
  end

  it "looking up template classes by implicit file extension" do
    Tilt.register(_MockTemplate, 'mock')
    impl = Tilt['.mock']
    assert_equal _MockTemplate, impl
  end

  it "looking up template classes with multiple file extensions" do
    Tilt.register(_MockTemplate, 'mock')
    impl = Tilt['index.html.mock']
    assert_equal _MockTemplate, impl
  end

  it "looking up template classes by file name" do
    Tilt.register(_MockTemplate, 'mock')
    impl = Tilt['templates/test.mock']
    assert_equal _MockTemplate, impl
  end

  it "looking up non-existant template class" do
    assert_nil Tilt['none']
  end

  it "creating new template instance with a filename" do
    Tilt.register(_MockTemplate, 'mock')
    template = Tilt.new('foo.mock', 1, :key => 'val') { 'Hello World!' }
    assert_equal ['foo.mock', 1, {:key => 'val'}], template.args
    assert_equal 'Hello World!', template.block.call
  end
end

describe 'Tilt' do
  _Stub = Class.new
  _Stub2 = Class.new

  before do
    @default_mapping = Tilt.default_mapping
    frozen = @frozen = []

    Tilt.class_eval do
      define_singleton_method(:freeze){frozen << self; self}
      @default_mapping = Tilt::Mapping.new
      register(_Stub, 'foo', 'bar')
      register(_Stub2, 'foo', 'baz')
      register_lazy(:StringTemplate, 'str')
    end
  end

  after do
    Tilt.singleton_class.send(:remove_method, :freeze)
    mod = Tilt.singleton_class.ancestors.first
    mod.send(:remove_method, :lazy_map)
    mod.send(:remove_method, :register)
    mod.send(:remove_method, :prefer)
    mod.send(:remove_method, :register_lazy)
    mod.send(:remove_method, :register_pipeline)
    Tilt.instance_variable_set(:@default_mapping,  @default_mapping)
  end

  it ".finalize! switches to a finalized mapping" do
    assert_equal [], @frozen
    refute Tilt.default_mapping.frozen?

    Tilt.finalize!
    assert Tilt.default_mapping.frozen?
    assert_equal [Tilt], @frozen
    assert_equal _Stub2, Tilt['foo']
    assert_equal _Stub, Tilt['bar']
    assert_nil Tilt['str']

    assert_raises(RuntimeError){Tilt.lazy_map}
    assert_raises(RuntimeError){Tilt.register(Class.new, 'mock')}
    assert_raises(RuntimeError){Tilt.prefer(Class.new, 'mock')}
    assert_raises(RuntimeError){Tilt.register_lazy(:StringTemplate, 'str2')}
    assert_raises(RuntimeError){Tilt.register_pipeline('str.erb')}
  end

  it ".finalize! is idempotent" do
    2.times do
      assert_equal Tilt, Tilt.finalize!
      assert Tilt.default_mapping.frozen?
      assert_equal [Tilt], @frozen
    end
  end
end