From 9e0c0a8b3aff2b273f0e9fc94ac72f0309fc5834 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sat, 18 Feb 2017 05:30:13 +0100 Subject: Convert Language::Python test to spec. --- Library/Homebrew/test/language/python_spec.rb | 106 ++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Library/Homebrew/test/language/python_spec.rb (limited to 'Library/Homebrew/test/language/python_spec.rb') diff --git a/Library/Homebrew/test/language/python_spec.rb b/Library/Homebrew/test/language/python_spec.rb new file mode 100644 index 000000000..c78520897 --- /dev/null +++ b/Library/Homebrew/test/language/python_spec.rb @@ -0,0 +1,106 @@ +require "language/python" +require "resource" + +describe Language::Python::Virtualenv::Virtualenv do + subject { described_class.new(formula, dir, "python") } + + let(:dir) { @dir = Pathname.new(Dir.mktmpdir) } + + let(:resource) { double("resource", stage: true) } + let(:formula_bin) { dir/"formula_bin" } + let(:formula) { double("formula", resource: resource, bin: formula_bin) } + + after(:each) { dir.rmtree unless @dir.nil? } + + describe "#create" do + it "creates a virtual environment" do + expect(formula).to receive(:resource).with("homebrew-virtualenv").and_return(resource) + subject.create + end + + specify "virtual environment creation is idempotent" do + expect(formula).to receive(:resource).with("homebrew-virtualenv").and_return(resource) + subject.create + FileUtils.mkdir_p dir/"bin" + FileUtils.touch dir/"bin/python" + subject.create + FileUtils.rm dir/"bin/python" + end + end + + describe "#pip_install" do + it "accepts a string" do + expect(formula).to receive(:system) + .with(dir/"bin/pip", "install", "-v", "--no-deps", + "--no-binary", ":all:", "--ignore-installed", "foo") + .and_return(true) + subject.pip_install "foo" + end + + it "accepts a multi-line strings" do + expect(formula).to receive(:system) + .with(dir/"bin/pip", "install", "-v", "--no-deps", + "--no-binary", ":all:", "--ignore-installed", "foo", "bar") + .and_return(true) + + subject.pip_install <<-EOS.undent + foo + bar + EOS + end + + it "accepts an array" do + expect(formula).to receive(:system) + .with(dir/"bin/pip", "install", "-v", "--no-deps", + "--no-binary", ":all:", "--ignore-installed", "foo") + .and_return(true) + + expect(formula).to receive(:system) + .with(dir/"bin/pip", "install", "-v", "--no-deps", + "--no-binary", ":all:", "--ignore-installed", "bar") + .and_return(true) + + subject.pip_install ["foo", "bar"] + end + + it "accepts a Resource" do + res = Resource.new("test") + + expect(res).to receive(:stage).and_yield + expect(formula).to receive(:system) + .with(dir/"bin/pip", "install", "-v", "--no-deps", + "--no-binary", ":all:", "--ignore-installed", Pathname.pwd) + .and_return(true) + + subject.pip_install res + end + end + + describe "#pip_install_and_link" do + let(:src_bin) { dir/"bin" } + let(:dest_bin) { formula.bin } + + it "can link scripts" do + src_bin.mkpath + + expect(src_bin/"kilroy").not_to exist + expect(dest_bin/"kilroy").not_to exist + + FileUtils.touch src_bin/"irrelevant" + bin_before = Dir.glob(src_bin/"*") + FileUtils.touch src_bin/"kilroy" + bin_after = Dir.glob(src_bin/"*") + + expect(subject).to receive(:pip_install).with("foo") + expect(Dir).to receive(:[]).with(src_bin/"*").twice.and_return(bin_before, bin_after) + + subject.pip_install_and_link "foo" + + expect(src_bin/"kilroy").to exist + expect(dest_bin/"kilroy").to exist + expect(dest_bin/"kilroy").to be_a_symlink + expect((src_bin/"kilroy").realpath).to eq((dest_bin/"kilroy").realpath) + expect(dest_bin/"irrelevant").not_to exist + end + end +end -- cgit v1.2.3