252 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			252 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "extend/string"
 | |
| require "tempfile"
 | |
| require "utils/inreplace"
 | |
| 
 | |
| describe StringInreplaceExtension do
 | |
|   subject { string.extend(described_class) }
 | |
| 
 | |
|   describe "#change_make_var!" do
 | |
|     context "flag" do
 | |
|       context "with spaces" do
 | |
|         let(:string) do
 | |
|           <<-EOS.undent
 | |
|             OTHER=def
 | |
|             FLAG = abc
 | |
|             FLAG2=abc
 | |
|           EOS
 | |
|         end
 | |
| 
 | |
|         it "is successfully replaced" do
 | |
|           subject.change_make_var! "FLAG", "def"
 | |
|           expect(subject).to eq <<-EOS.undent
 | |
|             OTHER=def
 | |
|             FLAG=def
 | |
|             FLAG2=abc
 | |
|           EOS
 | |
|         end
 | |
| 
 | |
|         it "is successfully appended" do
 | |
|           subject.change_make_var! "FLAG", "\\1 def"
 | |
|           expect(subject).to eq <<-EOS.undent
 | |
|             OTHER=def
 | |
|             FLAG=abc def
 | |
|             FLAG2=abc
 | |
|           EOS
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       context "with tabs" do
 | |
|         let(:string) do
 | |
|           <<-EOS.undent
 | |
|             CFLAGS\t=\t-Wall -O2
 | |
|             LDFLAGS\t=\t-lcrypto -lssl
 | |
|           EOS
 | |
|         end
 | |
| 
 | |
|         it "is successfully replaced" do
 | |
|           subject.change_make_var! "CFLAGS", "-O3"
 | |
|           expect(subject).to eq <<-EOS.undent
 | |
|             CFLAGS=-O3
 | |
|             LDFLAGS\t=\t-lcrypto -lssl
 | |
|           EOS
 | |
|         end
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context "empty flag between other flags" do
 | |
|       let(:string) do
 | |
|         <<-EOS.undent
 | |
|           OTHER=def
 | |
|           FLAG =
 | |
|           FLAG2=abc
 | |
|         EOS
 | |
|       end
 | |
| 
 | |
|       it "is successfully replaced" do
 | |
|         subject.change_make_var! "FLAG", "def"
 | |
|         expect(subject).to eq <<-EOS.undent
 | |
|           OTHER=def
 | |
|           FLAG=def
 | |
|           FLAG2=abc
 | |
|         EOS
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context "empty flag" do
 | |
|       let(:string) do
 | |
|         <<-EOS.undent
 | |
|           FLAG =
 | |
|           mv file_a file_b
 | |
|         EOS
 | |
|       end
 | |
| 
 | |
|       it "is successfully replaced" do
 | |
|         subject.change_make_var! "FLAG", "def"
 | |
|         expect(subject).to eq <<-EOS.undent
 | |
|           FLAG=def
 | |
|           mv file_a file_b
 | |
|         EOS
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context "shell-style variable" do
 | |
|       let(:string) do
 | |
|         <<-EOS.undent
 | |
|           OTHER=def
 | |
|           FLAG=abc
 | |
|           FLAG2=abc
 | |
|         EOS
 | |
|       end
 | |
| 
 | |
|       it "is successfully replaced" do
 | |
|         subject.change_make_var! "FLAG", "def"
 | |
|         expect(subject).to eq <<-EOS.undent
 | |
|           OTHER=def
 | |
|           FLAG=def
 | |
|           FLAG2=abc
 | |
|         EOS
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "#remove_make_var!" do
 | |
|     context "flag" do
 | |
|       context "with spaces" do
 | |
|         let(:string) do
 | |
|           <<-EOS.undent
 | |
|             OTHER=def
 | |
|             FLAG = abc
 | |
|             FLAG2 = def
 | |
|           EOS
 | |
|         end
 | |
| 
 | |
|         it "is successfully removed" do
 | |
|           subject.remove_make_var! "FLAG"
 | |
|           expect(subject).to eq <<-EOS.undent
 | |
|             OTHER=def
 | |
|             FLAG2 = def
 | |
|           EOS
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       context "with tabs" do
 | |
|         let(:string) do
 | |
|           <<-EOS.undent
 | |
|             CFLAGS\t=\t-Wall -O2
 | |
|             LDFLAGS\t=\t-lcrypto -lssl
 | |
|           EOS
 | |
|         end
 | |
| 
 | |
|         it "is successfully removed" do
 | |
|           subject.remove_make_var! "LDFLAGS"
 | |
|           expect(subject).to eq <<-EOS.undent
 | |
|             CFLAGS\t=\t-Wall -O2
 | |
|           EOS
 | |
|         end
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context "multiple flags" do
 | |
|       let(:string) do
 | |
|         <<-EOS.undent
 | |
|           OTHER=def
 | |
|           FLAG = abc
 | |
|           FLAG2 = def
 | |
|           OTHER2=def
 | |
|         EOS
 | |
|       end
 | |
| 
 | |
|       specify "are be successfully removed" do
 | |
|         subject.remove_make_var! ["FLAG", "FLAG2"]
 | |
|         expect(subject).to eq <<-EOS.undent
 | |
|           OTHER=def
 | |
|           OTHER2=def
 | |
|         EOS
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "#get_make_var" do
 | |
|     context "with spaces" do
 | |
|       let(:string) do
 | |
|         <<-EOS.undent
 | |
|           CFLAGS = -Wall -O2
 | |
|           LDFLAGS = -lcrypto -lssl
 | |
|         EOS
 | |
|       end
 | |
| 
 | |
|       it "extracts the value for a given variable" do
 | |
|         expect(subject.get_make_var("CFLAGS")).to eq("-Wall -O2")
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context "with tabs" do
 | |
|       let(:string) do
 | |
|         <<-EOS.undent
 | |
|           CFLAGS\t=\t-Wall -O2
 | |
|           LDFLAGS\t=\t-lcrypto -lssl
 | |
|         EOS
 | |
|       end
 | |
| 
 | |
|       it "extracts the value for a given variable" do
 | |
|         expect(subject.get_make_var("CFLAGS")).to eq("-Wall -O2")
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "#sub!" do
 | |
|     let(:string) { "foo" }
 | |
| 
 | |
|     it "replaces the first occurence" do
 | |
|       subject.sub!("o", "e")
 | |
|       expect(subject).to eq("feo")
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe "#gsub!" do
 | |
|     let(:string) { "foo" }
 | |
| 
 | |
|     it "replaces the all occurences" do
 | |
|       subject.gsub!("o", "e") # rubocop:disable Performance/StringReplacement
 | |
|       expect(subject).to eq("fee")
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| describe Utils::Inreplace do
 | |
|   let(:file) { Tempfile.new("test") }
 | |
| 
 | |
|   before(:each) do
 | |
|     file.write <<-EOS.undent
 | |
|       a
 | |
|       b
 | |
|       c
 | |
|     EOS
 | |
|   end
 | |
| 
 | |
|   after(:each) { file.unlink }
 | |
| 
 | |
|   it "raises error if there is nothing to replace" do
 | |
|     expect {
 | |
|       described_class.inreplace file.path, "d", "f"
 | |
|     }.to raise_error(Utils::InreplaceError)
 | |
|   end
 | |
| 
 | |
|   it "raises error if there is nothing to replace" do
 | |
|     expect {
 | |
|       described_class.inreplace(file.path) do |s|
 | |
|         s.gsub!("d", "f") # rubocop:disable Performance/StringReplacement
 | |
|       end
 | |
|     }.to raise_error(Utils::InreplaceError)
 | |
|   end
 | |
| 
 | |
|   it "raises error if there is nothing to replace" do
 | |
|     expect {
 | |
|       described_class.inreplace(file.path) do |s|
 | |
|         s.change_make_var! "VAR", "value"
 | |
|         s.remove_make_var! "VAR2"
 | |
|       end
 | |
|     }.to raise_error(Utils::InreplaceError)
 | |
|   end
 | |
| end
 | 
