Tests for lexing a basic HTML document.
This also comes with some changes to the lexer so that it advances column/line numbers correctly.
This commit is contained in:
parent
edf2e4112b
commit
6b2f682c5c
|
@ -264,7 +264,13 @@ module Oga
|
|||
element_start = '<' element_name;
|
||||
|
||||
element_text := |*
|
||||
^'<' => buffer_text;
|
||||
newline => {
|
||||
emit_text_buffer
|
||||
t(:T_TEXT)
|
||||
advance_line
|
||||
};
|
||||
|
||||
^('<' | newline) => buffer_text;
|
||||
|
||||
'<' => {
|
||||
emit_text_buffer
|
||||
|
@ -284,7 +290,8 @@ module Oga
|
|||
advance_column(2)
|
||||
|
||||
# Advance the column for the closing name.
|
||||
advance_column(@te - p)
|
||||
advance_column(text.length)
|
||||
|
||||
fret;
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Oga::Parser do
|
||||
context 'HTML documents' do
|
||||
example 'lex a basic HTML document' do
|
||||
html = <<-EOF
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body></body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
lex(html).should == [
|
||||
[:T_DOCTYPE_START, '<!DOCTYPE html', 1, 1],
|
||||
[:T_DOCTYPE_END, '>', 1, 15],
|
||||
[:T_TEXT, "\n", 1, 16],
|
||||
|
||||
# <html>
|
||||
[:T_ELEM_OPEN, nil, 2, 1],
|
||||
[:T_ELEM_NAME, 'html', 2, 2],
|
||||
[:T_TEXT, "\n", 2, 7],
|
||||
|
||||
# <head>
|
||||
[:T_ELEM_OPEN, nil, 3, 1],
|
||||
[:T_ELEM_NAME, 'head', 3, 2],
|
||||
[:T_TEXT, "\n", 3, 7],
|
||||
|
||||
# <title>Title</title>
|
||||
[:T_ELEM_OPEN, nil, 4, 1],
|
||||
[:T_ELEM_NAME, 'title', 4, 2],
|
||||
[:T_TEXT, 'Title', 4, 8],
|
||||
[:T_ELEM_CLOSE, nil, 4, 13],
|
||||
[:T_TEXT, "\n", 4, 21],
|
||||
|
||||
# </head>
|
||||
[:T_ELEM_CLOSE, nil, 5, 1],
|
||||
[:T_TEXT, "\n", 5, 8],
|
||||
|
||||
# <body></body>
|
||||
[:T_ELEM_OPEN, nil, 6, 1],
|
||||
[:T_ELEM_NAME, 'body', 6, 2],
|
||||
[:T_ELEM_CLOSE, nil, 6, 7],
|
||||
[:T_TEXT, "\n", 6, 14],
|
||||
|
||||
# </html>
|
||||
[:T_ELEM_CLOSE, nil, 7, 1],
|
||||
[:T_TEXT, "\n", 7, 8]
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue