|
|
|
require 'parslet/rig/rspec'
|
|
|
|
require_relative '../../bristlecode.rb'
|
|
|
|
|
|
|
|
module Bristlecode
|
|
|
|
describe Parser do
|
|
|
|
let(:parser) { Parser.new }
|
|
|
|
|
|
|
|
describe '#parse' do
|
|
|
|
it 'can parse an empty string' do
|
|
|
|
expect(parser).to parse('')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can parse whitespace' do
|
|
|
|
expect(parser).to parse(' ')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can parse plain text' do
|
|
|
|
expect(parser).to parse('this is some plain text')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#bold' do
|
|
|
|
it 'can parse correct bold text syntax' do
|
|
|
|
expect(parser.bold).to parse('[b]bolded contents here[/b]')
|
|
|
|
expect(parser.bold).to parse('[b]bolded contents here[/B]')
|
|
|
|
expect(parser.bold).to parse('[B]bolded contents here[/b]')
|
|
|
|
expect(parser.bold).to parse('[B]bolded contents here[/B]')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can parse an empty bold tag' do
|
|
|
|
expect(parser.bold).to parse('[b][/b]')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can parse nested tags' do
|
|
|
|
expect(parser.bold).to parse('[b] one [b] two [/b] three [/b]')
|
|
|
|
expect(parser.bold).to parse('[b] one [i] two [/i] three [/b]')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can parse an unclosed tag' do
|
|
|
|
expect(parser.bold).to parse('[b]bolded contents here')
|
|
|
|
expect(parser.bold).to parse('[B]bolded contents here')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'fails non-bold text' do
|
|
|
|
expect(parser.bold).not_to parse('this is not bold')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'fails dangling close tags' do
|
|
|
|
expect(parser.bold).not_to parse('before [/b] after')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'fails nonsense tag' do
|
|
|
|
expect(parser.bold).not_to parse('[bold]fake content[/bold]')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#italic' do
|
|
|
|
it 'can parse correct italic text syntax' do
|
|
|
|
expect(parser.italic).to parse('[i]italiced contents here[/i]')
|
|
|
|
expect(parser.italic).to parse('[i]italiced contents here[/I]')
|
|
|
|
expect(parser.italic).to parse('[I]italiced contents here[/i]')
|
|
|
|
expect(parser.italic).to parse('[I]italiced contents here[/I]')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can parse an empty italic tag' do
|
|
|
|
expect(parser.italic).to parse('[i][/i]')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can parse nested tags' do
|
|
|
|
expect(parser.italic).to parse('[i] one [i] two [/i] three [/i]')
|
|
|
|
expect(parser.italic).to parse('[i] one [b] two [/b] three [/i]')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'can parse an unclosed tag' do
|
|
|
|
expect(parser.italic).to parse('[i]italiced contents here')
|
|
|
|
expect(parser.italic).to parse('[I]italiced contents here')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'fails non-italic text' do
|
|
|
|
expect(parser.italic).not_to parse('this is not italic')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'fails dangling close tags' do
|
|
|
|
expect(parser.italic).not_to parse('before [/i] after')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'fails nonsense tag' do
|
|
|
|
expect(parser.italic).not_to parse('[italic]fake content[/italic]')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|