]> git.wincent.com - wikitext.git/blob - spec/tt_spec.rb
Emit <code> rather than <tt> elements
[wikitext.git] / spec / tt_spec.rb
1 #!/usr/bin/env ruby
2 # Copyright 2007-2009 Wincent Colaiuta. All rights reserved.
3 #
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are met:
6 #
7 # 1. Redistributions of source code must retain the above copyright notice,
8 #    this list of conditions and the following disclaimer.
9 # 2. Redistributions in binary form must reproduce the above copyright notice,
10 #    this list of conditions and the following disclaimer in the documentation
11 #    and/or other materials provided with the distribution.
12
13 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
17 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23 # POSSIBILITY OF SUCH DAMAGE.
24
25 require File.join(File.dirname(__FILE__), 'spec_helper.rb')
26 require 'wikitext'
27
28 describe Wikitext::Parser, 'parsing <tt> spans' do
29   before do
30     @parser = Wikitext::Parser.new
31   end
32
33   it 'should recognize paired <tt> and </tt> tags' do
34     # note how in version 2.0 and above, we output <code> tags instead of <tt>
35     # tags, seeing as the latter have been removed from HTML5
36     @parser.parse('foo <tt>bar</tt> baz').should == "<p>foo <code>bar</code> baz</p>\n"
37   end
38
39   it 'should recognize <tt> tags case-insensitively' do
40     @parser.parse('foo <TT>bar</tT> baz').should == "<p>foo <code>bar</code> baz</p>\n"
41     @parser.parse('foo <tT>bar</Tt> baz').should == "<p>foo <code>bar</code> baz</p>\n"
42     @parser.parse('foo <Tt>bar</TT> baz').should == "<p>foo <code>bar</code> baz</p>\n"
43   end
44
45   it 'should automatically insert missing closing tags' do
46     @parser.parse('foo <tt>bar').should == "<p>foo <code>bar</code></p>\n"
47   end
48
49   it 'should automatically close unclosed spans upon hitting newline' do
50     @parser.parse("foo <tt>bar\nbaz").should == "<p>foo <code>bar</code> baz</p>\n"
51   end
52
53   it 'should convert unexpected closing tags into entities' do
54     @parser.parse('foo </tt>bar').should == "<p>foo &lt;/tt&gt;bar</p>\n"
55   end
56
57   it 'should handle (illegal) nested <tt> spans' do
58     @parser.parse('foo <tt>bar <tt>inner</tt></tt> baz').should == "<p>foo <code>bar &lt;tt&gt;inner</code>&lt;/tt&gt; baz</p>\n"
59   end
60
61   it 'should handle (illegal) interleaved spans' do
62     @parser.parse("foo <tt>bar '''inner</tt> baz'''").should == "<p>foo <code>bar <strong>inner</strong></code> baz<strong></strong></p>\n"
63   end
64
65   it 'should have no effect inside <pre> blocks' do
66     @parser.parse(' <tt>foo</tt>').should == "<pre>&lt;tt&gt;foo&lt;/tt&gt;</pre>\n"
67   end
68
69   it 'should have no effect inside <nowiki> spans' do
70     @parser.parse('<nowiki><tt>foo</tt></nowiki>').should == "<p>&lt;tt&gt;foo&lt;/tt&gt;</p>\n"
71   end
72
73   it 'should have no effect if a backtick span is already open' do
74     @parser.parse('foo `<tt>bar</tt>` baz').should == "<p>foo <code>&lt;tt&gt;bar&lt;/tt&gt;</code> baz</p>\n"
75   end
76 end
77
78 describe Wikitext::Parser, 'parsing backtick spans' do
79   before do
80     @parser = Wikitext::Parser.new
81   end
82
83   it 'should recognize paired backticks' do
84     @parser.parse('foo `bar` baz').should == "<p>foo <code>bar</code> baz</p>\n"
85   end
86
87   it 'should automatically insert missing closing backtick' do
88     @parser.parse('foo `bar').should == "<p>foo <code>bar</code></p>\n"
89   end
90
91   it 'should automatically close unclosed spans upon hitting newline' do
92     @parser.parse("foo `bar\nbaz").should == "<p>foo <code>bar</code> baz</p>\n"
93   end
94
95   it 'should handle (illegal) interleaved spans' do
96     @parser.parse("foo `bar '''inner` baz'''").should == "<p>foo <code>bar <strong>inner</strong></code> baz<strong></strong></p>\n"
97   end
98
99   it 'should have no effect inside <pre> blocks' do
100     @parser.parse(' `foo`').should == "<pre>`foo`</pre>\n"
101   end
102
103   it 'should have no effect inside <nowiki> spans' do
104     @parser.parse('<nowiki>`foo`</nowiki>').should == "<p>`foo`</p>\n"
105   end
106
107   it 'should have no effect if a <tt> span is already open' do
108     @parser.parse('foo <tt>`bar`</tt> baz').should == "<p>foo <code>`bar`</code> baz</p>\n"
109   end
110 end
111