Skip to content

Commit

Permalink
tests! fixes #1
Browse files Browse the repository at this point in the history
  • Loading branch information
akerl committed Mar 16, 2014
1 parent b41d42a commit f3e0a27
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 51 deletions.
2 changes: 1 addition & 1 deletion jekyll_prism.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Gem::Specification.new do |s|
s.files = `git ls-files`.split
s.test_files = `git ls-files spec/*`.split

s.add_dependency 'jekyll', '~> 1.4.3'
s.add_dependency 'liquid', '~> 2.6.1'

s.add_development_dependency 'rubocop', '~> 0.19.0'
s.add_development_dependency 'travis-lint', '~> 1.8.0'
Expand Down
18 changes: 10 additions & 8 deletions lib/jekyll_prism.rb
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
require 'jekyll'
require 'liquid'

##
# Extend Jekyll to provide Prism helper blocks and tags
module Jekyll
##
# Block object for Prism hilighting
class CodeBlock < Liquid::Block
include Liquid::StandardFilters

def initialize(a, args, b)
super
options = args.split
@lang, @linenos = options.shift 2
true
end

def render(_)
code = h(super).strip

linenos = @linenos == 'all' ? "1-#{code.lines.count}" : @linenos
linestring = linenos.nil? ? '' : %Q( data-line="#{@linenos}")
langstring = lang.nil? ? '' : %Q( class="language-#{@lang}")
linestring = linenos.nil? ? '' : %Q( data-line="#{linenos}")
langstring = @lang.nil? ? '' : %Q( class="language-#{@lang}")

<<-OUTPUT
<pre#{linestring}><code#{langstring}>
Expand All @@ -33,18 +36,17 @@ class CodeTag < Liquid::Tag
def initialize(_, args, _)
super
options = args.split
@lang, @file, @linenos = options.shift 3
@file, @lang, @linenos = options.shift 3
end

def render(_)
linenos = @linenos == 'all' ? "1-#{code.lines.count}" : @linenos
linestring = linenos.nil? ? '' : %Q( data-line="#{@linenos}")
langstring = lang.nil? ? '' : %Q( class="language-#{@lang}")
linestring = @linenos.nil? ? '' : %Q( data-line="#{@linenos}")
langstring = @lang.nil? ? '' : %Q( class="language-#{@lang}")

%Q(<pre data-src="#{@file}"#{langstring}#{linestring}></pre>)
end
end
end

Liquid::Template.register_tag('code', Jekyll::CodeBlock)
Liquid::Template.register_tag('code', Jekyll::CodeTag)
Liquid::Template.register_tag('ext_code', Jekyll::CodeTag)
58 changes: 53 additions & 5 deletions spec/jekyll_prism_spec.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,63 @@
require 'spec_helper'

##
# Helper to save keystrokes
def test_template(input, output)
expect(Liquid::Template.parse(input).render).to eql output
end

describe Jekyll::CodeBlock do
it 'renders code blocks' do
code = 'foobar'
block = Jekyll::CodeBlock.new('code', 'ruby', []).render(code)
result = '<pre><code class="language-ruby">
code = '{% code %}foobar{% endcode %}'
result = "<pre><code>\nfoobar\n</code></pre>\n"
test_template code, result
end

it 'accepts a language parameter' do
code = '{% code ruby %}foobar{% endcode %}'
result = "<pre><code class=\"language-ruby\">\nfoobar\n</code></pre>\n"
test_template code, result
end

describe 'accepts a linenos parameter' do
it 'as line numbers' do
code = '{% code ruby 1,3-5,10 %}foobar{% endcode %}'
result = "<pre data-line=\"1,3-5,10\"><code class=\"language-ruby\">
foobar
</code></pre>'
expect(block).to eql result
</code></pre>\n"
test_template code, result
end
it 'as an "all" parameter' do
code = "{% code ruby all %}foo\nbar\nbaz{% endcode %}"
result = "<pre data-line=\"1-3\"><code class=\"language-ruby\">
foo
bar
baz
</code></pre>\n"
test_template code, result
end
end
end

describe Jekyll::CodeTag do
it 'renders external code objects' do
code = '{% ext_code sekrit.rb %}'
result = '<pre data-src="sekrit.rb"></pre>'
test_template code, result
end

it 'accepts a language parameter' do
code = '{% ext_code sekrit.rb ruby %}'
result = '<pre data-src="sekrit.rb" class="language-ruby"></pre>'
test_template code, result
end

describe 'accepts a linenos parameter' do
it 'as line numbers' do
code = '{% ext_code sekrit.rb ruby 1,3-5,10 %}'
result = '<pre data-src="sekrit.rb" ' \
'class="language-ruby" data-line="1,3-5,10"></pre>'
test_template code, result
end
end
end
38 changes: 1 addition & 37 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,4 @@

require 'rspec'
require 'jekyll_prism'

require 'jekyll'

module Jekyll
module AssetsPlugin
##
# Add helper stuffs for tests
module RSpecHelpers
def fixtures_path
@fixtures_path ||= Pathname.new(__FILE__).parent.parent.join 'fixtures'
end

module_function :fixtures_path
end
end
end

RSpec.configure do |config|
config.include Jekyll::AssetsPlugin::RSpecHelpers

config.before(:all) do
Jekyll.logger.log_level = Jekyll::Stevenson::WARN

@dest = fixtures_path.join('_site')
@site = Jekyll::Site.new(Jekyll.configuration(
'source' => fixtures_path.to_s,
'destination' => @dest.to_s
))

@dest.rmtree if @dest.exist?
@site.process
end

config.after(:all) do
@dest.rmtree if @dest.exist?
end
end
require 'liquid'

0 comments on commit f3e0a27

Please sign in to comment.