Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
06478ef3
Commit
06478ef3
authored
Jul 20, 2015
by
Robert Speicher
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Minor Markdown feature spec reorganization
parent
b07ecbb5
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
47 additions
and
46 deletions
+47
-46
spec/features/markdown_spec.rb
spec/features/markdown_spec.rb
+47
-46
No files found.
spec/features/markdown_spec.rb
View file @
06478ef3
...
...
@@ -33,39 +33,31 @@ require 'erb'
# See the MarkdownFeature class for setup details.
describe
'GitLab Markdown'
,
feature:
true
do
include
ActionView
::
Helpers
::
TagHelper
include
ActionView
::
Helpers
::
UrlHelper
include
Capybara
::
Node
::
Matchers
include
GitlabMarkdownHelper
# `markdown` calls these two methods
def
current_user
@feat
.
user
end
def
user_color_scheme_class
:white
end
# Let's only parse this thing once
before
(
:all
)
do
@feat
=
MarkdownFeature
.
new
# `
markdown` expects
a `@project` variable
# `
gfm_with_options` depends on
a `@project` variable
@project
=
@feat
.
project
@md
=
markdown
(
@feat
.
raw_markdown
)
@doc
=
Nokogiri
::
HTML
::
DocumentFragment
.
parse
(
@md
)
@html
=
markdown
(
@feat
.
raw_markdown
)
end
after
(
:all
)
do
@feat
.
teardown
end
def
doc
@doc
||=
Nokogiri
::
HTML
::
DocumentFragment
.
parse
(
@html
)
end
# Given a header ID, goes to that element's parent (the header itself), then
# its next sibling element (the body).
def
get_section
(
id
)
@
doc
.
at_css
(
"#
#{
id
}
"
).
parent
.
next_element
doc
.
at_css
(
"#
#{
id
}
"
).
parent
.
next_element
end
# Sometimes it can be useful to see the parsed output of the Markdown document
...
...
@@ -74,11 +66,11 @@ describe 'GitLab Markdown', feature: true do
#
# it 'writes to a file' do
# File.open(Rails.root.join('tmp/capybara/markdown_spec.html'), 'w') do |file|
# file.puts @
md
# file.puts @
html
# end
# end
describe
'
Markdown
'
do
describe
'
Redcarpet extensions
'
do
describe
'No Intra Emphasis'
do
it
'does not parse emphasis inside of words'
do
body
=
get_section
(
'no-intra-emphasis'
)
...
...
@@ -95,21 +87,21 @@ describe 'GitLab Markdown', feature: true do
end
it
'allows Markdown in tables'
do
expect
(
@
doc
.
at_css
(
'td:contains("Baz")'
).
children
.
to_html
).
expect
(
doc
.
at_css
(
'td:contains("Baz")'
).
children
.
to_html
).
to
eq
'<strong>Baz</strong>'
end
end
describe
'Fenced Code Blocks'
do
it
'parses fenced code blocks'
do
expect
(
@
doc
).
to
have_selector
(
'pre.code.highlight.white.c'
)
expect
(
@
doc
).
to
have_selector
(
'pre.code.highlight.white.python'
)
expect
(
doc
).
to
have_selector
(
'pre.code.highlight.white.c'
)
expect
(
doc
).
to
have_selector
(
'pre.code.highlight.white.python'
)
end
end
describe
'Strikethrough'
do
it
'parses strikethroughs'
do
expect
(
@
doc
).
to
have_selector
(
%{del:contains("and this text doesn't")}
)
expect
(
doc
).
to
have_selector
(
%{del:contains("and this text doesn't")}
)
end
end
...
...
@@ -125,28 +117,28 @@ describe 'GitLab Markdown', feature: true do
describe
'HTML::Pipeline'
do
describe
'SanitizationFilter'
do
it
'uses a permissive whitelist'
do
expect
(
@
doc
).
to
have_selector
(
'b:contains("b tag")'
)
expect
(
@
doc
).
to
have_selector
(
'em:contains("em tag")'
)
expect
(
@
doc
).
to
have_selector
(
'code:contains("code tag")'
)
expect
(
@
doc
).
to
have_selector
(
'kbd:contains("s")'
)
expect
(
@
doc
).
to
have_selector
(
'strike:contains(Emoji)'
)
expect
(
@
doc
).
to
have_selector
(
'img[src*="smile.png"]'
)
expect
(
@
doc
).
to
have_selector
(
'br'
)
expect
(
@
doc
).
to
have_selector
(
'hr'
)
expect
(
doc
).
to
have_selector
(
'b:contains("b tag")'
)
expect
(
doc
).
to
have_selector
(
'em:contains("em tag")'
)
expect
(
doc
).
to
have_selector
(
'code:contains("code tag")'
)
expect
(
doc
).
to
have_selector
(
'kbd:contains("s")'
)
expect
(
doc
).
to
have_selector
(
'strike:contains(Emoji)'
)
expect
(
doc
).
to
have_selector
(
'img[src*="smile.png"]'
)
expect
(
doc
).
to
have_selector
(
'br'
)
expect
(
doc
).
to
have_selector
(
'hr'
)
end
it
'permits span elements'
do
expect
(
@
doc
).
to
have_selector
(
'span:contains("span tag")'
)
expect
(
doc
).
to
have_selector
(
'span:contains("span tag")'
)
end
it
'permits table alignment'
do
expect
(
@
doc
.
at_css
(
'th:contains("Header")'
)[
'style'
]).
to
eq
'text-align: center'
expect
(
@
doc
.
at_css
(
'th:contains("Row")'
)[
'style'
]).
to
eq
'text-align: right'
expect
(
@
doc
.
at_css
(
'th:contains("Example")'
)[
'style'
]).
to
eq
'text-align: left'
expect
(
doc
.
at_css
(
'th:contains("Header")'
)[
'style'
]).
to
eq
'text-align: center'
expect
(
doc
.
at_css
(
'th:contains("Row")'
)[
'style'
]).
to
eq
'text-align: right'
expect
(
doc
.
at_css
(
'th:contains("Example")'
)[
'style'
]).
to
eq
'text-align: left'
expect
(
@
doc
.
at_css
(
'td:contains("Foo")'
)[
'style'
]).
to
eq
'text-align: center'
expect
(
@
doc
.
at_css
(
'td:contains("Bar")'
)[
'style'
]).
to
eq
'text-align: right'
expect
(
@
doc
.
at_css
(
'td:contains("Baz")'
)[
'style'
]).
to
eq
'text-align: left'
expect
(
doc
.
at_css
(
'td:contains("Foo")'
)[
'style'
]).
to
eq
'text-align: center'
expect
(
doc
.
at_css
(
'td:contains("Bar")'
)[
'style'
]).
to
eq
'text-align: right'
expect
(
doc
.
at_css
(
'td:contains("Baz")'
)[
'style'
]).
to
eq
'text-align: left'
end
it
'removes `rel` attribute from links'
do
...
...
@@ -155,12 +147,12 @@ describe 'GitLab Markdown', feature: true do
end
it
"removes `href` from `a` elements if it's fishy"
do
expect
(
@
doc
).
not_to
have_selector
(
'a[href*="javascript"]'
)
expect
(
doc
).
not_to
have_selector
(
'a[href*="javascript"]'
)
end
end
describe
'Escaping'
do
let
(
:table
)
{
@
doc
.
css
(
'table'
).
last
.
at_css
(
'tbody'
)
}
let
(
:table
)
{
doc
.
css
(
'table'
).
last
.
at_css
(
'tbody'
)
}
it
'escapes non-tag angle brackets'
do
expect
(
table
.
at_xpath
(
'.//tr[1]/td[3]'
).
inner_html
).
to
eq
'1 < 3 & 5'
...
...
@@ -169,28 +161,28 @@ describe 'GitLab Markdown', feature: true do
describe
'Edge Cases'
do
it
'allows markup inside link elements'
do
expect
(
@
doc
.
at_css
(
'a[href="#link-emphasis"]'
).
to_html
).
expect
(
doc
.
at_css
(
'a[href="#link-emphasis"]'
).
to_html
).
to
eq
%{<a href="#link-emphasis"><em>text</em></a>}
expect
(
@
doc
.
at_css
(
'a[href="#link-strong"]'
).
to_html
).
expect
(
doc
.
at_css
(
'a[href="#link-strong"]'
).
to_html
).
to
eq
%{<a href="#link-strong"><strong>text</strong></a>}
expect
(
@
doc
.
at_css
(
'a[href="#link-code"]'
).
to_html
).
expect
(
doc
.
at_css
(
'a[href="#link-code"]'
).
to_html
).
to
eq
%{<a href="#link-code"><code>text</code></a>}
end
end
describe
'EmojiFilter'
do
it
'parses Emoji'
do
expect
(
@
doc
).
to
have_selector
(
'img.emoji'
,
count:
10
)
expect
(
doc
).
to
have_selector
(
'img.emoji'
,
count:
10
)
end
end
describe
'TableOfContentsFilter'
do
it
'creates anchors inside header elements'
do
expect
(
@
doc
).
to
have_selector
(
'h1 a#gitlab-markdown'
)
expect
(
@
doc
).
to
have_selector
(
'h2 a#markdown'
)
expect
(
@
doc
).
to
have_selector
(
'h3 a#autolinkfilter'
)
expect
(
doc
).
to
have_selector
(
'h1 a#gitlab-markdown'
)
expect
(
doc
).
to
have_selector
(
'h2 a#markdown'
)
expect
(
doc
).
to
have_selector
(
'h3 a#autolinkfilter'
)
end
end
...
...
@@ -249,7 +241,7 @@ describe 'GitLab Markdown', feature: true do
describe
'ReferenceFilter'
do
it
'handles references in headers'
do
header
=
@
doc
.
at_css
(
'#reference-filters-eg-1'
).
parent
header
=
doc
.
at_css
(
'#reference-filters-eg-1'
).
parent
expect
(
header
.
css
(
'a'
).
size
).
to
eq
2
end
...
...
@@ -304,6 +296,15 @@ describe 'GitLab Markdown', feature: true do
end
end
end
# `markdown` calls these two methods
def
current_user
@feat
.
user
end
def
user_color_scheme_class
:white
end
end
# This is a helper class used by the GitLab Markdown feature spec
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment