Files
Unity/test/spec/generate_module_existing_file_spec.rb
Matt Chernosky 7b51355e5a Module generator finishes for partially existing files
This resolves #219. When generating a new module, if all the files to
generate already exist then it fails as before. If some of the files
already exist, then the files that need to be created are created. Any
existing files are not changed.

Also added a bunch of tests for this feature via rspec. Run them from
the test folder with `rake spec`.
2016-12-02 13:49:07 -07:00

159 lines
4.3 KiB
Ruby

require '../auto/generate_module.rb'
require 'fileutils'
def touch_src(file)
FileUtils.touch "sandbox/src/#{file}"
end
def touch_test(file)
FileUtils.touch "sandbox/test/#{file}"
end
def create_src_with_known_content(file)
File.open("sandbox/src/#{file}", "w") {|f| f.write("the original #{file}")}
end
def create_test_with_known_content(file)
File.open("sandbox/test/#{file}", "w") {|f| f.write("the original #{file}")}
end
def expect_src_content_didnt_change(file)
expect(File.read("sandbox/src/#{file}")).to eq("the original #{file}")
end
def expect_test_content_didnt_change(file)
expect(File.read("sandbox/test/#{file}")).to eq("the original #{file}")
end
def expect_src_file_to_exist(file)
expect(File.exist?("sandbox/src/#{file}")).to be true
end
def expect_test_file_to_exist(file)
expect(File.exist?("sandbox/test/#{file}")).to be true
end
describe "UnityModuleGenerator" do
before do
# clean sandbox and setup our "project" folders
FileUtils.rm_rf "sandbox"
FileUtils.mkdir_p "sandbox"
FileUtils.mkdir_p "sandbox/src"
FileUtils.mkdir_p "sandbox/test"
@options = {
:path_src => "sandbox/src",
:path_tst => "sandbox/test",
}
end
context "with src pattern" do
before do
@options[:pattern] = "src"
end
it "fails when all files already exist" do
# create an existing triad of files
touch_src "meh.c"
touch_src "meh.h"
touch_test "Testmeh.c"
expect {
UnityModuleGenerator.new(@options).generate("meh")
}.to raise_error("ERROR: File meh already exists. Exiting.")
end
it "creates the test file if the source and header files exist" do
# Create the existing files.
touch_src "meh.c"
touch_src "meh.h"
UnityModuleGenerator.new(@options).generate("meh")
expect_test_file_to_exist "Testmeh.c"
end
it "does not alter existing files" do
# Create some files with known content.
create_src_with_known_content "meh.c"
create_src_with_known_content "meh.h"
UnityModuleGenerator.new(@options).generate("meh")
expect_src_content_didnt_change "meh.c"
expect_src_content_didnt_change "meh.c"
end
it "does not alter existing test files" do
# Create some files with known content.
create_test_with_known_content "Testmeh.c"
UnityModuleGenerator.new(@options).generate("meh")
expect_test_content_didnt_change "Testmeh.c"
end
end
context "with mch pattern" do
before do
@options[:pattern] = "mch"
end
it "fails when all files exist" do
touch_src "meh_model.c"
touch_src "meh_conductor.c"
touch_src "meh_hardware.c"
touch_src "meh_model.h"
touch_src "meh_conductor.h"
touch_src "meh_hardware.h"
touch_test "Testmeh_model.c"
touch_test "Testmeh_conductor.c"
touch_test "Testmeh_hardware.c"
expect {
UnityModuleGenerator.new(@options).generate("meh")
}.to raise_error("ERROR: File meh_model already exists. Exiting.")
end
it "creates files that don't exist" do
touch_src "meh_model.c"
touch_src "meh_conductor.c"
touch_src "meh_hardware.c"
touch_src "meh_model.h"
touch_src "meh_conductor.h"
UnityModuleGenerator.new(@options).generate("meh")
expect_src_file_to_exist "meh_hardware.h"
expect_test_file_to_exist "Testmeh_model.c"
expect_test_file_to_exist "Testmeh_conductor.c"
expect_test_file_to_exist "Testmeh_hardware.c"
end
it "does not alter existing source files" do
create_src_with_known_content "meh_model.c"
create_src_with_known_content "meh_model.c"
create_src_with_known_content "meh_model.c"
create_src_with_known_content "meh_model.h"
create_src_with_known_content "meh_model.c"
UnityModuleGenerator.new(@options).generate("meh")
expect_src_content_didnt_change "meh_model.c"
expect_src_content_didnt_change "meh_model.c"
expect_src_content_didnt_change "meh_model.c"
expect_src_content_didnt_change "meh_model.c"
end
it "does not alter existing test files" do
create_test_with_known_content "Testmeh_model.c"
UnityModuleGenerator.new(@options).generate("meh")
expect_test_content_didnt_change "Testmeh_model.c"
end
end
end