# -*- 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 } File.open('spec/project-name/src/templates/main.html', "w") do |out| out.puts main end $stdout.should_receive(:puts).with(/Incomplete } File.open('spec/project-name/src/pages/index.html', "w") do |out| out.puts index end $stdout.should_receive(:puts).with(/Incomplete } File.open('spec/project-name/src/templates/main.html', "w") do |out| out.puts main end rx = /No such file } File.open('spec/project-name/src/pages/index.html', "w") do |out| out.puts index end rx = /No such file } File.open('spec/project-name/src/templates/main.html', "w") do |out| out.puts main end $stdout.should_receive(:puts).with(/here without what/i) Compiler.new(test_project_path).compile end end end context "with bad 'config' syntax" do it "should exit" do # replace config main = %q{--- :address: http://www.example.com :rss: true :rss_title: RSS TITLE :rss_description: RSS DESCRIPTION } File.open('spec/project-name/config', "w") {|out| out.puts main } $stdout.should_receive(:puts).with(/in config file/i) lambda do Compiler.new(test_project_path).compile end.should raise_error(SystemExit) end end describe "BUGS" do it "should compile to valid HTML5" do @compiler.compile file = File.open("spec/project-name/index.html", "r") contents = file.read expected = '' contents.start_with?(expected).should be_true end it "should allow template to include a fragment (Bug#37)" do # add a fragment File.open('spec/project-name/src/fragments/footer.html', "w") do |out| out.puts '

footer

' end # replace main.html main = %q{ Genit - Static web site framework } File.open('spec/project-name/src/templates/main.html', "w") do |out| out.puts main end lambda {@compiler.compile}.should_not raise_error end end end