# -*- encoding: utf-8 -*-
require './spec/helper'
describe Compiler do
before :each do
@project = ProjectCreator.new('spec/project-name', false, false)
@project.create
@compiler = Compiler.new test_project_path
end
after :each do
clean_test_repository
end
def write_file name, content
File.open(File.join('spec/project-name', name), "w") do |file|
file.puts content
end
end
context "after compilation" do
before :each do
@compiler.compile
end
it "should build an index.html page" do
File.exist?('spec/project-name/index.html').should be_true
end
it "should set the menu in index page" do
doc = Nokogiri::HTML(File.open("spec/project-name/index.html"))
doc.at_css("ul#menu a#selected")['href'].should == 'index.html'
end
describe "RSS feed" do
it "should build the rss.xml file" do
File.exist?('spec/project-name/rss.xml').should be_true
end
end
end
it "should build two pages" do
write_file 'src/pages/doc.html', '
documentation
'
@compiler.compile
File.exist?('spec/project-name/index.html').should be_true
File.exist?('spec/project-name/doc.html').should be_true
end
context "with no '.genit' file" do
it "should exit" do
$stdout.should_receive(:puts).with(/Not a genit project folder/i)
lambda{Compiler.new File.expand_path('.')}.should raise_error(SystemExit)
end
end
context "with no 'config' file" do
it "should exit" do
$stdout.should_receive(:puts).with(/Missing config file/i)
FileUtils.rm 'spec/project-name/config'
lambda{Compiler.new test_project_path}.should raise_error(SystemExit)
end
end
describe "Sitemap XML" do
it "should build the 'sitemap.xml'" do
a_news = %q{title
}
File.open('spec/project-name/src/news/2011-10-01.html', "w") do |out|
out.puts a_news
end
@compiler.compile
File.exist?('spec/project-name/sitemap.xml').should be_true
end
end
context "with sass as stylesheet" do
before :each do
# remove screen.css
FileUtils.rm "spec/project-name/styles/screen.css"
# create screen.sass
file = %q{
.content-navigation
border-color: blue
}
File.open('spec/project-name/styles/screen.sass', "w") do |out|
out.puts file
end
@compiler.compile
end
it "should produce css file" do
File.exists?("spec/project-name/styles/screen.css").should be_true
end
it "should not remove sass file" do
File.exists?("spec/project-name/styles/screen.sass").should be_true
end
end
context "with scss as stylesheet" do
before :each do
# remove screen.css
FileUtils.rm "spec/project-name/styles/screen.css"
# create screen.scss
file = "
.content-navigation {
border-color: blue;
color: darken(blue, 9%); }"
File.open('spec/project-name/styles/screen.scss', "w") do |out|
out.puts file
end
@compiler.compile
end
it "should produce css file" do
File.exists?("spec/project-name/styles/screen.css").should be_true
end
it "should not remove scss file" do
File.exists?("spec/project-name/styles/screen.scss").should be_true
end
end
context "with bad tag syntax" do
context "with unknown class into template" do
it "should exit" do
# replace main.html
main = %q{
}
File.open('spec/project-name/src/templates/main.html', "w") do |out|
out.puts main
end
$stdout.should_receive(:puts).with(/Unknown tag }
File.open('spec/project-name/src/pages/index.html', "w") do |out|
out.puts index
end
$stdout.should_receive(:puts).with(/Unknown tag