if RUBY_PLATFORM == 'opal' else require 'spec_helper' require 'benchmark' require 'volt/server/html_parser/sandlebars_parser' class HTMLHandler attr_reader :html def initialize @html = '' end def comment(comment) @html << "" end def text(text) @html << text end def binding(binding) @html << "{#{binding}}" end def start_tag(tag_name, attributes, unary) attr_str = attributes.map { |v| "#{v[0]}=\"#{v[1]}\"" }.join(' ') if attr_str.size > 0 # extra space attr_str = ' ' + attr_str end @html << "<#{tag_name}#{attr_str}#{unary ? ' /' : ''}>" end def end_tag(tag_name) @html << "#{tag_name}>" end end def parse_url(url) require 'open-uri' html = open("http://#{url}").read # html = File.read("/Users/ryanstout/Desktop/tests/#{url}1.html") File.open("/Users/ryanstout/Desktop/tests/#{url}1.html", 'w') { |f| f.write(html) } handler = HTMLHandler.new Volt::SandlebarsParser.new(html, handler) File.open("/Users/ryanstout/Desktop/tests/#{url}2.html", 'w') { |f| f.write(handler.html) } end describe Volt::SandlebarsParser do def test_html(html, match = nil) handler = HTMLHandler.new parser = Volt::SandlebarsParser.new(html, handler) expect(handler.html).to eq(match || html) end it 'should handle a doctype' do html = '
text
' test_html(html) end it 'should parse comments' do html = '' test_html(html) end it 'should handle text' do html = 'some text, , some more text' test_html(html) end it 'should handle tags' do html = "" test_html(html) end it 'should close tags' do html = 'test
' match = 'test
some cool {text} is {awesome}
' test_html(html) end it 'should handle bindings with nested { and }' do html = "testing with {nested { 'binding stuff' }}
" test_html(html) end it 'should raise an exception on an unclosed binding at the end of the document' do html = 'testing with {{nested' handler = HTMLHandler.new expect { Volt::SandlebarsParser.new(html, handler) }.to raise_error(Volt::HTMLParseError) end it 'should raise an exception on an unclosed binding' do html = "
testing with {{nested
\nok
" handler = HTMLHandler.new expect { Volt::SandlebarsParser.new(html, handler) }.to raise_error(Volt::HTMLParseError) end it 'should report the line number' do html = "\n\nsome paragraph
\n\ntesting with {{nested
\nok
" handler = HTMLHandler.new expect { Volt::SandlebarsParser.new(html, handler) }.to raise_error(Volt::HTMLParseError, 'unclosed binding: {nested on line: 5') end it 'should handle a bunch of things' do html = <<-ENDThis is my text something.com
END test_html(html) end it 'should not jump between script tags' do html = "\n\n\n\n" test_html(html) end it 'should not jump bindings' do html = '{some} text {binding}
' test_html(html) end it 'should handle escaping things in a tripple escape' do html = 'this is my {{{ tripple escape }}}' match = 'this is my tripple escape ' test_html(html, match) end it 'should let you escape { and }' do html = 'should escape {{{{}}} and {{{}}}}' match = 'should escape { and }' test_html(html, match) end it 'should handle sandlebar tags' do html = "custom tag <:awesome name=\"yes\" />" test_html(html) end it 'should keep the text after script' do html = "test