File: tilt_csv_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 (68 lines) | stat: -rw-r--r-- 1,886 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
require_relative 'test_helper'
require 'tilt/csv'

describe 'tilt/csv' do
  data = (<<END).freeze
# header
csv << ['Type', 'Age']

raise NameError

# rows
csv << ['Frog', 2]
csv << ['Cat', 5]
END

  it "registered for '.rcsv' files" do
    assert_equal Tilt::CSVTemplate, Tilt['rcsv']
  end

  it "compiles and evaluates the template on #render" do
    template = Tilt::CSVTemplate.new { "csv << ['hello', 'world']" }
    assert_equal "hello,world\n", template.render
  end

  it "can be rendered more than once" do
    template = Tilt::CSVTemplate.new { "csv << [1,2,3]" }
    3.times { assert_equal "1,2,3\n", template.render }
  end

  it "can pass locals" do
    template = Tilt::CSVTemplate.new { 'csv << [1, name]' }
    assert_equal "1,Joe\n", template.render(Object.new, :name => 'Joe')
  end

  it "evaluating in an object scope" do
    template = Tilt::CSVTemplate.new { 'csv << [1, @name]' }
    scope = Object.new
    scope.instance_variable_set :@name, 'Joe'
    assert_equal "1,Joe\n", template.render(scope)
  end

  it "backtrace file and line reporting" do
    template = Tilt::CSVTemplate.new('test.csv') { data }
    begin
      template.render
      fail 'should have raised an exception'
    rescue => boom
      assert_kind_of NameError, boom
      line = boom.backtrace.grep(/\Atest\.csv:/).first
      assert line, "Backtrace didn't contain test.csv"
      _file, line, _meth = line.split(":")
      assert_equal '4', line
    end
  end

  it "passing options to engine" do
    template = Tilt::CSVTemplate.new(:col_sep => '|') { 'csv << [1,2,3]' }
    assert_equal "1|2|3\n", template.render
  end

  it "outvar option" do
    outvar = '@_output'
    scope = Object.new
    template = Tilt::CSVTemplate.new(:outvar => outvar) { 'csv << [1,2,3]' }
    output = template.render(scope)
    assert_equal output, scope.instance_variable_get(outvar.to_sym)
  end
end