matflores-jekyll 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/helper.rb CHANGED
@@ -2,13 +2,23 @@ require File.join(File.dirname(__FILE__), *%w[.. lib jekyll])
2
2
 
3
3
  require 'test/unit'
4
4
  require 'redgreen'
5
+ require 'shoulda'
6
+ require 'rr'
5
7
 
6
8
  include Jekyll
7
9
 
8
- def dest_dir
9
- File.join(File.dirname(__FILE__), *%w[dest])
10
- end
10
+ class Test::Unit::TestCase
11
+ include RR::Adapters::TestUnit
12
+
13
+ def dest_dir(*subdirs)
14
+ File.join(File.dirname(__FILE__), 'dest', *subdirs)
15
+ end
16
+
17
+ def source_dir(*subdirs)
18
+ File.join(File.dirname(__FILE__), 'source', *subdirs)
19
+ end
11
20
 
12
- def clear_dest
13
- FileUtils.rm_rf(dest_dir)
21
+ def clear_dest
22
+ FileUtils.rm_rf(dest_dir)
23
+ end
14
24
  end
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: default
3
+ title: Not published!
4
+ published: false
5
+ category: publish_test
6
+ ---
7
+
8
+ This should *not* be published!
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: default
3
+ title: Publish
4
+ category: publish_test
5
+ ---
6
+
7
+ This should be published.
8
+
@@ -0,0 +1,10 @@
1
+ ---
2
+ layout: default
3
+ title: Array categories in YAML
4
+ categories:
5
+ - foo
6
+ - bar
7
+ - baz
8
+ ---
9
+
10
+ Best *post* ever
@@ -0,0 +1,7 @@
1
+ ---
2
+ layout: default
3
+ title: Categories in YAML
4
+ categories: foo bar baz
5
+ ---
6
+
7
+ Best *post* ever
@@ -0,0 +1,7 @@
1
+ ---
2
+ layout: default
3
+ title: Category in YAML
4
+ category: foo
5
+ ---
6
+
7
+ Best *post* ever
data/test/test_filters.rb CHANGED
@@ -1,41 +1,41 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestFilters < Test::Unit::TestCase
4
-
5
4
  class JekyllFilter
6
5
  include Jekyll::Filters
7
6
  end
8
-
9
- def setup
10
- @filter = JekyllFilter.new
11
- end
12
7
 
13
- def test_textilize_with_simple_string
14
- assert_equal "<p>something <strong>really</strong> simple</p>", @filter.textilize("something *really* simple")
15
- end
8
+ context "filters" do
9
+ setup do
10
+ @filter = JekyllFilter.new
11
+ end
16
12
 
17
- def test_array_to_sentence_string_with_no_args
18
- assert_equal "", @filter.array_to_sentence_string([])
19
- end
13
+ should "textilize with simple string" do
14
+ assert_equal "<p>something <strong>really</strong> simple</p>", @filter.textilize("something *really* simple")
15
+ end
20
16
 
21
- def test_array_to_sentence_string_with_one_arg
22
- assert_equal "1", @filter.array_to_sentence_string([1])
23
- assert_equal "chunky", @filter.array_to_sentence_string(["chunky"])
24
- end
25
-
26
- def test_array_to_sentence_string_with_two_args
27
- assert_equal "1 and 2", @filter.array_to_sentence_string([1, 2])
28
- assert_equal "chunky and bacon", @filter.array_to_sentence_string(["chunky", "bacon"])
29
- end
30
-
31
- def test_array_to_sentence_string_with_multiple_args
32
- assert_equal "1, 2, 3, and 4", @filter.array_to_sentence_string([1, 2, 3, 4])
33
- assert_equal "chunky, bacon, bits, and pieces", @filter.array_to_sentence_string(["chunky", "bacon", "bits", "pieces"])
34
- end
35
-
36
- def test_xml_escape_with_ampersands
37
- assert_equal "AT&amp;T", @filter.xml_escape("AT&T")
38
- assert_equal "&lt;code&gt;command &amp;lt;filename&amp;gt;&lt;/code&gt;", @filter.xml_escape("<code>command &lt;filename&gt;</code>")
17
+ should "convert array to sentence string with no args" do
18
+ assert_equal "", @filter.array_to_sentence_string([])
19
+ end
20
+
21
+ should "convert array to sentence string with one arg" do
22
+ assert_equal "1", @filter.array_to_sentence_string([1])
23
+ assert_equal "chunky", @filter.array_to_sentence_string(["chunky"])
24
+ end
25
+
26
+ should "convert array to sentence string with two args" do
27
+ assert_equal "1 and 2", @filter.array_to_sentence_string([1, 2])
28
+ assert_equal "chunky and bacon", @filter.array_to_sentence_string(["chunky", "bacon"])
29
+ end
30
+
31
+ should "convert array to sentence string with multiple args" do
32
+ assert_equal "1, 2, 3, and 4", @filter.array_to_sentence_string([1, 2, 3, 4])
33
+ assert_equal "chunky, bacon, bits, and pieces", @filter.array_to_sentence_string(["chunky", "bacon", "bits", "pieces"])
34
+ end
35
+
36
+ should "escape xml with ampersands" do
37
+ assert_equal "AT&amp;T", @filter.xml_escape("AT&T")
38
+ assert_equal "&lt;code&gt;command &amp;lt;filename&amp;gt;&lt;/code&gt;", @filter.xml_escape("<code>command &lt;filename&gt;</code>")
39
+ end
39
40
  end
40
-
41
41
  end
@@ -1,60 +1,63 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestGeneratedSite < Test::Unit::TestCase
4
- def setup
5
- clear_dest
6
- @source = File.join(File.dirname(__FILE__), *%w[source])
7
- @s = Site.new(@source, dest_dir)
8
- @s.process
9
- @index = File.read(File.join(dest_dir, 'index.html'))
10
- end
11
-
12
- def test_site_posts_in_index
13
- # confirm that {{ site.posts }} is working
14
- assert @index.include?("#{@s.posts.size} Posts")
15
- end
16
-
17
- def test_post_content_in_index
18
- # confirm that the {{ post.content }} is rendered OK
19
- latest_post = Dir[File.join(@source, '_posts/*')].last
20
- post = Post.new(@source, '', File.basename(latest_post))
21
- Jekyll.content_type = post.determine_content_type
22
- post.transform
23
- assert @index.include?(post.content)
24
- end
25
-
26
- def test_unpublished_posts_are_hidden
27
- published = Dir[File.join(dest_dir, 'publish_test/2008/02/02/*.html')].map {|f| File.basename(f)}
28
-
29
- assert_equal 1, published.size
30
- assert_equal "published.html", published.first
31
- end
32
-
33
- def test_posts_directory_not_copied
34
- assert !File.exist?(File.join(dest_dir, '_posts'))
35
- end
36
-
37
- def test_yearly_archive_creation
38
- filename = File.join(dest_dir, '2008', 'index.html')
39
- assert File.exists?(filename)
40
- assert File.read(filename).include?("<h1>2008</h1>")
41
- end
42
-
43
- def test_monthly_archive_creation
44
- filename = File.join(dest_dir, '2008', '02', 'index.html')
45
- assert File.exists?(filename)
46
- assert File.read(filename).include?("<h1>February 2008</h1>")
47
- end
48
-
49
- def test_daily_archive_creation
50
- filename = File.join(dest_dir, '2008', '02', '02', 'index.html')
51
- assert File.exists?(filename)
52
- assert File.read(filename).include?("<h1>February 2, 2008</h1>")
53
- end
54
-
55
- def test_category_index_creation
56
- filename = File.join(dest_dir, 'category', 'foo', 'index.html')
57
- assert File.exists?(filename)
58
- assert File.read(filename).include?("<h1>Category: foo (#{@s.categories['foo'].size} posts)</h1>")
4
+ context "generated sites" do
5
+ setup do
6
+ clear_dest
7
+ stub(Jekyll).configuration do
8
+ Jekyll::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
9
+ end
10
+
11
+ @site = Site.new(Jekyll.configuration)
12
+ @site.process
13
+ @index = File.read(dest_dir('index.html'))
14
+ end
15
+
16
+ should "insert site.posts into the index" do
17
+ assert @index.include?("#{@site.posts.size} Posts")
18
+ end
19
+
20
+ should "render post.content" do
21
+ latest_post = Dir[source_dir('_posts', '*')].last
22
+ post = Post.new(@site, source_dir, '', File.basename(latest_post))
23
+ post.transform
24
+ assert @index.include?(post.content)
25
+ end
26
+
27
+ should "hide unpublished posts" do
28
+ published = Dir[dest_dir('2008/02/02/*.html')].map {|f| File.basename(f)}
29
+ published.delete('index.html')
30
+
31
+ assert_equal 1, published.size
32
+ assert_equal "published.html", published.first
33
+ end
34
+
35
+ should "not copy _posts directory" do
36
+ assert !File.exist?(dest_dir('_posts'))
37
+ end
38
+
39
+ should "have an yearly archive" do
40
+ filename = File.join(dest_dir, '2008', 'index.html')
41
+ assert File.exists?(filename)
42
+ assert File.read(filename).include?("<h1>2008</h1>")
43
+ end
44
+
45
+ should "have a monthly archive" do
46
+ filename = File.join(dest_dir, '2008', '02', 'index.html')
47
+ assert File.exists?(filename)
48
+ assert File.read(filename).include?("<h1>February 2008</h1>")
49
+ end
50
+
51
+ should "have a daily archive" do
52
+ filename = File.join(dest_dir, '2008', '02', '02', 'index.html')
53
+ assert File.exists?(filename)
54
+ assert File.read(filename).include?("<h1>February 2, 2008</h1>")
55
+ end
56
+
57
+ should "have a category index" do
58
+ filename = File.join(dest_dir, 'category', 'foo', 'index.html')
59
+ assert File.exists?(filename)
60
+ assert File.read(filename).include?("<h1>Category: foo (#{@site.categories['foo'].size} posts)</h1>")
61
+ end
59
62
  end
60
63
  end
data/test/test_post.rb CHANGED
@@ -1,141 +1,145 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestPost < Test::Unit::TestCase
4
- def setup
5
-
4
+ def setup_post(file)
5
+ Post.new(@site, source_dir, '', file)
6
6
  end
7
-
8
- def test_valid
9
- assert Post.valid?("2008-10-19-foo-bar.textile")
10
- assert Post.valid?("foo/bar/2008-10-19-foo-bar.textile")
11
-
12
- assert !Post.valid?("lol2008-10-19-foo-bar.textile")
13
- assert !Post.valid?("blah")
14
- end
15
-
16
- def test_process
17
- p = Post.allocate
18
- p.process("2008-10-19-foo-bar.textile")
19
-
20
- assert_equal Time.parse("2008-10-19"), p.date
21
- assert_equal "foo-bar", p.slug
22
- assert_equal ".textile", p.ext
23
- end
24
-
25
- def test_url
26
- p = Post.allocate
27
- p.categories = []
28
- p.process("2008-10-19-foo-bar.textile")
29
-
30
- assert_equal "/2008/10/19/foo-bar.html", p.url
31
- end
32
-
33
- def test_permalink
34
- p = Post.allocate
35
- p.process("2008-12-03-permalinked-post.textile")
36
- p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-12-03-permalinked-post.textile")
37
7
 
38
- assert_equal "my_category/permalinked-post", p.permalink
8
+ def do_render(post)
9
+ layouts = { "default" => Layout.new(@site, source_dir('_layouts'), "simple.html")}
10
+ post.render(layouts, {"site" => {"posts" => []}})
39
11
  end
40
12
 
41
- def test_dir_respects_permalink
42
- p = Post.allocate
43
- p.process("2008-12-03-permalinked-post.textile")
44
- p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-12-03-permalinked-post.textile")
13
+ context "A Post" do
14
+ setup do
15
+ clear_dest
16
+ stub(Jekyll).configuration { Jekyll::DEFAULTS }
17
+ @site = Site.new(Jekyll.configuration)
18
+ end
45
19
 
46
- assert_equal "my_category/", p.dir
47
- end
48
-
49
- def test_url_respects_permalink
50
- p = Post.allocate
51
- p.process("2008-12-03-permalinked-post.textile")
52
- p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-12-03-permalinked-post.textile")
20
+ should "ensure valid posts are valid" do
21
+ assert Post.valid?("2008-10-19-foo-bar.textile")
22
+ assert Post.valid?("foo/bar/2008-10-19-foo-bar.textile")
53
23
 
54
- assert_equal "my_category/permalinked-post", p.url
55
- end
24
+ assert !Post.valid?("lol2008-10-19-foo-bar.textile")
25
+ assert !Post.valid?("blah")
26
+ end
56
27
 
57
- def test_read_yaml
58
- p = Post.allocate
59
- p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-10-18-foo-bar.textile")
60
-
61
- assert_equal({"title" => "Foo Bar", "layout" => "default"}, p.data)
62
- assert_equal "\nh1. {{ page.title }}\n\nBest *post* ever", p.content
63
- end
64
-
65
- def test_transform
66
- p = Post.allocate
67
- p.process("2008-10-18-foo-bar.textile")
68
- p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-10-18-foo-bar.textile")
69
- p.transform
70
-
71
- assert_equal "<h1>{{ page.title }}</h1>\n<p>Best <strong>post</strong> ever</p>", p.content
72
- end
28
+ context "processing posts" do
29
+ setup do
30
+ @post = Post.allocate
31
+ @post.site = @site
73
32
 
74
- def test_published
75
- p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-02-02-published.textile")
76
- assert_equal true, p.published
77
- end
33
+ @real_file = "2008-10-18-foo-bar.textile"
34
+ @fake_file = "2008-10-19-foo-bar.textile"
35
+ @source = source_dir('_posts')
36
+ end
78
37
 
79
- def test_not_published
80
- p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-02-02-not-published.textile")
81
- assert_equal false, p.published
82
- end
38
+ should "keep date, title, and markup type" do
39
+ @post.process(@fake_file)
83
40
 
84
- def test_yaml_category
85
- p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2009-01-27-category.textile")
86
- assert p.categories.include?('foo')
87
- end
41
+ assert_equal Time.parse("2008-10-19"), @post.date
42
+ assert_equal "foo-bar", @post.slug
43
+ assert_equal ".textile", @post.ext
44
+ end
45
+
46
+ should "create url based on date and title" do
47
+ @post.categories = []
48
+ @post.process(@fake_file)
49
+ assert_equal "/2008/10/19/foo-bar.html", @post.url
50
+ end
51
+
52
+ should "respect permalink" do
53
+ file = "2008-12-03-permalinked-post.textile"
54
+ @post.process(file)
55
+ @post.read_yaml(@source, file)
56
+
57
+ assert_equal "my_category/permalinked-post", @post.permalink
58
+ assert_equal "my_category/", @post.dir
59
+ assert_equal "my_category/permalinked-post", @post.url
60
+ end
88
61
 
89
- def test_yaml_categories
90
- p1 = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '',
91
- "2009-01-27-categories.textile")
92
- p2 = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '',
93
- "2009-01-27-array-categories.textile")
94
-
95
- [p1, p2].each do |p|
96
- assert p.categories.include?('foo')
97
- assert p.categories.include?('bar')
98
- assert p.categories.include?('baz')
62
+ should "read yaml front-matter" do
63
+ @post.read_yaml(@source, @real_file)
64
+
65
+ assert_equal({"title" => "Foo Bar", "layout" => "default"}, @post.data)
66
+ assert_equal "\nh1. {{ page.title }}\n\nBest *post* ever", @post.content
67
+ end
68
+
69
+ should "transform textile" do
70
+ @post.process(@real_file)
71
+ @post.read_yaml(@source, @real_file)
72
+ @post.transform
73
+
74
+ assert_equal "<h1>{{ page.title }}</h1>\n<p>Best <strong>post</strong> ever</p>", @post.content
75
+ end
99
76
  end
100
- end
101
-
102
- def test_render
103
- p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-10-18-foo-bar.textile")
104
- layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}
105
- p.render(layouts, {"site" => {"posts" => []}})
106
-
107
- assert_equal "<<< <h1>Foo Bar</h1>\n<p>Best <strong>post</strong> ever</p> >>>", p.output
108
- end
109
-
110
- def test_write
111
- clear_dest
112
-
113
- p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-10-18-foo-bar.textile")
114
- layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}
115
- p.render(layouts, {"site" => {"posts" => []}})
116
- p.write(dest_dir)
117
- end
118
-
119
- def test_data
120
- p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-11-21-complex.textile")
121
- layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}
122
- p.render(layouts, {"site" => {"posts" => []}})
123
-
124
- assert_equal "<<< <p>url: /2008/11/21/complex.html<br />\ndate: #{Time.parse("2008-11-21")}<br />\nid: /2008/11/21/complex</p> >>>", p.output
125
- end
126
-
127
- def test_categories_and_topics
128
- p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), 'foo', 'bar/2008-12-12-topical-post.textile')
129
- assert_equal ['foo'], p.categories
130
- assert_equal ['bar'], p.topics
131
- end
132
-
133
- def test_include
134
- Jekyll.source = File.join(File.dirname(__FILE__), *%w[source])
135
- p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-12-13-include.markdown")
136
- layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}
137
- p.render(layouts, {"site" => {"posts" => []}})
138
-
139
- assert_equal "<<< <hr />\n<p>Tom Preston-Werner github.com/mojombo</p>\n\n<p>This <em>is</em> cool</p> >>>", p.output
77
+
78
+ context "initializing posts" do
79
+ should "publish when published yaml is no specified" do
80
+ post = setup_post("2008-02-02-published.textile")
81
+ assert_equal true, post.published
82
+ end
83
+
84
+ should "not published when published yaml is false" do
85
+ post = setup_post("2008-02-02-not-published.textile")
86
+ assert_equal false, post.published
87
+ end
88
+
89
+ should "recognize category in yaml" do
90
+ post = setup_post("2009-01-27-category.textile")
91
+ assert post.categories.include?('foo')
92
+ end
93
+
94
+ should "recognize several categories in yaml" do
95
+ post = setup_post("2009-01-27-categories.textile")
96
+ assert post.categories.include?('foo')
97
+ assert post.categories.include?('bar')
98
+ assert post.categories.include?('baz')
99
+ end
100
+
101
+ context "rendering" do
102
+ setup do
103
+ clear_dest
104
+ end
105
+
106
+ should "render properly" do
107
+ post = setup_post("2008-10-18-foo-bar.textile")
108
+ do_render(post)
109
+ assert_equal "<<< <h1>Foo Bar</h1>\n<p>Best <strong>post</strong> ever</p> >>>", post.output
110
+ end
111
+
112
+ should "write properly" do
113
+ post = setup_post("2008-10-18-foo-bar.textile")
114
+ do_render(post)
115
+ post.write(dest_dir)
116
+
117
+ assert File.directory?(dest_dir)
118
+ assert File.exists?(File.join(dest_dir, '2008', '10', '18', 'foo-bar.html'))
119
+ end
120
+
121
+ should "insert data" do
122
+ post = setup_post("2008-11-21-complex.textile")
123
+ do_render(post)
124
+
125
+ assert_equal "<<< <p>url: /2008/11/21/complex.html<br />\ndate: #{Time.parse("2008-11-21")}<br />\nid: /2008/11/21/complex</p> >>>", post.output
126
+ end
127
+
128
+ should "include templates" do
129
+ post = setup_post("2008-12-13-include.markdown")
130
+ post.site.source = File.join(File.dirname(__FILE__), 'source')
131
+ do_render(post)
132
+
133
+ assert_equal "<<< <hr />\n<p>Tom Preston-Werner github.com/mojombo</p>\n\n<p>This <em>is</em> cool</p> >>>", post.output
134
+ end
135
+ end
136
+ end
137
+
138
+ should "generate categories and topics" do
139
+ post = Post.new(@site, File.join(File.dirname(__FILE__), *%w[source]), 'foo', 'bar/2008-12-12-topical-post.textile')
140
+ assert_equal ['foo'], post.categories
141
+ assert_equal ['bar'], post.topics
142
+ end
143
+
140
144
  end
141
145
  end