From db45548b49e75a4f90ced07acaf97f1c600c28a1 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 30 Jun 2013 09:59:12 -0400 Subject: [PATCH] chdir and remove test dir in after call if test fails --- spec/build_tests_spec.rb | 106 +++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 54 deletions(-) diff --git a/spec/build_tests_spec.rb b/spec/build_tests_spec.rb index 77d40f7..d151ac0 100644 --- a/spec/build_tests_spec.rb +++ b/spec/build_tests_spec.rb @@ -3,16 +3,12 @@ require 'fileutils' describe Rscons do FileUtils.rm_rf('build_test') - def setup_testdir(files, &blk) - FileUtils.mkdir_p('build_test') + def setup_testdir(files) files.each do |fname| - src = "spec/build_items/#{fname}" - dst = "build_test/#{fname}" - FileUtils.mkdir_p(File.dirname(dst)) - FileUtils.cp_r(src, dst) + src = "#{@owd}/spec/build_items/#{fname}" + FileUtils.mkdir_p(File.dirname(fname)) + FileUtils.cp_r(src, fname) end - Dir.chdir('build_test', &blk) - FileUtils.rm_rf('build_test') end def clear_cache @@ -22,6 +18,14 @@ describe Rscons do before do $stdout.stub(:puts) { nil } clear_cache + @owd = Dir.pwd + FileUtils.mkdir_p('build_test') + Dir.chdir('build_test') + end + + after do + Dir.chdir(@owd) + FileUtils.rm_rf('build_test') end ########################################################################### @@ -29,72 +33,66 @@ describe Rscons do ########################################################################### it 'builds a C program with one source file' do - setup_testdir(['simple.c']) do - env = Rscons::Environment.new - env.Program('simple', 'simple.c') - File.exist?('simple.o').should be_true - `./simple`.should =~ /This is a simple C program/ - end + setup_testdir(['simple.c']) + env = Rscons::Environment.new + env.Program('simple', 'simple.c') + File.exist?('simple.o').should be_true + `./simple`.should =~ /This is a simple C program/ end it 'supports short echo mode' do $stdout.should_receive(:puts).once.with('CC simple.o') $stdout.should_receive(:puts).once.with('LD simple') - setup_testdir(['simple.c']) do - env = Rscons::Environment.new(echo: :short) - env.Program('simple', 'simple.c') - File.exist?('simple.o').should be_true - `./simple`.should =~ /This is a simple C program/ - end + setup_testdir(['simple.c']) + env = Rscons::Environment.new(echo: :short) + env.Program('simple', 'simple.c') + File.exist?('simple.o').should be_true + `./simple`.should =~ /This is a simple C program/ end it 'does not rebuild the program if no sources changed' do $stdout.should_receive(:puts).once.with("gcc -c -o simple.o -MMD -MF simple.mf simple.c") $stdout.should_receive(:puts).once.with('gcc -o simple simple.o') - setup_testdir(['simple.c']) do - env = Rscons::Environment.new - env.Program('simple', 'simple.c') - env.Program('simple', 'simple.c') - end + setup_testdir(['simple.c']) + env = Rscons::Environment.new + env.Program('simple', 'simple.c') + env.Program('simple', 'simple.c') end it 'rebuilds the application when the source file changes' do - setup_testdir(['simple.c']) do - env = Rscons::Environment.new - env.Program('simple', 'simple.c') - `./simple`.should =~ /This is a simple C program/ - c = File.read('simple.c') - File.open('simple.c', 'w') do |fh| - fh.puts c.sub('simple', 'modified') - end - clear_cache - env.Program('simple', 'simple.c') - `./simple`.should =~ /This is a modified C program/ + setup_testdir(['simple.c']) + env = Rscons::Environment.new + env.Program('simple', 'simple.c') + `./simple`.should =~ /This is a simple C program/ + c = File.read('simple.c') + File.open('simple.c', 'w') do |fh| + fh.puts c.sub('simple', 'modified') end + clear_cache + env.Program('simple', 'simple.c') + `./simple`.should =~ /This is a modified C program/ end it 'builds a C program with a header file' do - setup_testdir(['header.c', 'header.h']) do - env = Rscons::Environment.new - env.Program('header', 'header.c') - File.exist?('header.o').should be_true - `./header`.should =~ /The value is 33/ - end + setup_testdir(['header.c', 'header.h']) + env = Rscons::Environment.new + env.Program('header', 'header.c') + File.exist?('header.o').should be_true + `./header`.should =~ /The value is 33/ end it 'rebuilds a C source when a header it uses changes' do - setup_testdir(['header.c', 'header.h']) do - env = Rscons::Environment.new - env.Program('header', 'header.c') - File.exist?('header.o').should be_true - `./header`.should =~ /The value is 33/ - h = File.read('header.h') - File.open('header.h', 'w') do |fh| - fh.puts h.sub('33', '42') - end - clear_cache - env.Program('header', 'header.c') - `./header`.should =~ /The value is 42/ + setup_testdir(['header.c', 'header.h']) + env = Rscons::Environment.new + env.Program('header', 'header.c') + File.exist?('header.o').should be_true + `./header`.should =~ /The value is 33/ + h = File.read('header.h') + File.open('header.h', 'w') do |fh| + fh.puts h.sub('33', '42') end + clear_cache + env.Program('header', 'header.c') + `./header`.should =~ /The value is 42/ end end