require File.dirname(__FILE__) + "/../../spec_helper.rb" describe "The ReportManager" do before(:each) do @reports_dir = REPORTS_DIR ENV.delete 'MAX_FILENAME_SIZE' end after(:each) do FileUtils.rm_rf @reports_dir ENV["CI_REPORTS"] = nil end it "should create the report directory according to the given prefix" do CI::Reporter::ReportManager.new("spec") File.directory?(@reports_dir).should be true end it "should create the report directory based on CI_REPORTS environment variable if set" do @reports_dir = "#{Dir.getwd}/dummy" ENV["CI_REPORTS"] = @reports_dir CI::Reporter::ReportManager.new("spec") File.directory?(@reports_dir).should be true end it "should write reports based on name and xml content of a test suite" do reporter = CI::Reporter::ReportManager.new("spec") suite = double("test suite") suite.should_receive(:name).and_return("some test suite name") suite.should_receive(:to_xml).and_return("") reporter.write_report(suite) filename = "#{REPORTS_DIR}/SPEC-some-test-suite-name.xml" File.exist?(filename).should be true File.open(filename) {|f| f.read.should == ""} end it "should shorten extremely long report filenames" do reporter = CI::Reporter::ReportManager.new("spec") suite = double("test suite") very_long_name = "some test suite name that goes on and on and on and on and on and on and does not look like it will end any time soon and just when you think it is almost over it just continues to go on and on and on and on and on until it is almost over but wait there is more and then el fin" suite.should_receive(:name).and_return(very_long_name) suite.should_receive(:to_xml).and_return("") reporter.write_report(suite) filename = "#{REPORTS_DIR}/SPEC-#{very_long_name}"[0..CI::Reporter::ReportManager::MAX_FILENAME_SIZE].gsub(/\s/, '-') + ".xml" filename.length.should be <= 255 File.exist?(filename).should be true File.open(filename) {|f| f.read.should == ""} end it "should shorten extremely long report filenames to custom length" do reporter = CI::Reporter::ReportManager.new("spec") suite = double("test suite") very_long_name = "some test suite name that goes on and on and on and on and on and on and does not look like it will end any time soon and just when you think it is almost over it just continues to go on and on and on and on and on until it is almost over but wait there is more and then el fin" suite.should_receive(:name).and_return(very_long_name) suite.should_receive(:to_xml).and_return("") ENV['MAX_FILENAME_SIZE'] = '170' reporter.write_report(suite) filename = "#{REPORTS_DIR}/SPEC-#{very_long_name}"[0..170].gsub(/\s/, '-') + ".xml" filename.length.should be <= 188 File.exist?(filename).should be true File.open(filename) {|f| f.read.should == ""} end it "sidesteps existing files by adding an incrementing number" do filename = "#{REPORTS_DIR}/SPEC-colliding-test-suite-name.xml" FileUtils.mkdir_p(File.dirname(filename)) FileUtils.touch filename reporter = CI::Reporter::ReportManager.new("spec") suite = double("test suite") suite.should_receive(:name).and_return("colliding test suite name") suite.should_receive(:to_xml).and_return("") reporter.write_report(suite) File.exist?(filename.sub('.xml', '.0.xml')).should be true end end