File: string_splitter_spec.rb

package info (click to toggle)
ruby-temple 0.10.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 476 kB
  • sloc: ruby: 3,347; makefile: 6
file content (50 lines) | stat: -rw-r--r-- 2,222 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
require 'spec_helper'
begin
  require 'ripper'
rescue LoadError
end

if defined?(Ripper)
  describe Temple::Filters::StringSplitter do
    before do
      @filter = Temple::Filters::StringSplitter.new
    end

    {
      %q|''|                     => [:multi],
      %q|""|                     => [:multi],
      %q|"hello"|                => [:multi, [:static, 'hello']],
      %q|"hello #{}world"|       => [:multi, [:static, 'hello '], [:static, 'world']],
      %q|"#{hello}"|             => [:multi, [:dynamic, 'hello']],
      %q|"nya#{123}"|            => [:multi, [:static, 'nya'], [:dynamic, '123']],
      %q|"#{()}()"|              => [:multi, [:dynamic, '()'], [:static, '()']],
      %q|" #{ " #{ '#{}' } " }"| => [:multi, [:static, ' '], [:multi, [:static, ' '], [:multi, [:static, '#{}']], [:static, ' ']]],
      %q|%Q[a#{b}c#{d}e]|        => [:multi, [:static, 'a'], [:dynamic, 'b'], [:static, 'c'], [:dynamic, 'd'], [:static, 'e']],
      %q|%q[a#{b}c#{d}e]|        => [:multi, [:static, 'a#{b}c#{d}e']],
      %q|"\#{}#{123}"|           => [:multi, [:static, '#{}'], [:dynamic, '123']],
      %q|"#{ '}' }"|             => [:multi, [:multi, [:static, '}']]],
      %q| "a" # hello |          => [:multi, [:static, 'a']],
      %q|"\""|                   => [:multi, [:static, '"']],
      %q|"\\\\\\""|              => [:multi, [:static, '\\"']],
      %q|'\"'|                   => [:multi, [:static, '\"']],
      %q|'\\\"'|                 => [:multi, [:static, '\\"']],
      %q|"static#{dynamic}"|     => [:multi, [:static, 'static'], [:dynamic, 'dynamic']],
    }.each do |code, expected|
      it "should split #{code}" do
        actual = @filter.call([:dynamic, code])
        expect(actual).to eq(expected)
      end
    end

    describe '.compile' do
      it 'should raise CompileError for non-string literals' do
        expect { Temple::Filters::StringSplitter.compile('1') }.to raise_error(Temple::FilterError)
      end

      it 'should compile strings quoted with parenthesis' do
        tokens = Temple::Filters::StringSplitter.compile('%Q(href("#{1 + 1}");)')
        expect(tokens).to eq([[:static, "href(\""], [:dynamic, "1 + 1"], [:static, "\");"]])
      end
    end
  end
end