require "testing_env" require "language/python" require "resource" class LanguagePythonTests < Homebrew::TestCase def setup @dir = Pathname.new(mktmpdir) resource = stub("resource", :stage => true) @formula = mock("formula") do stubs(:resource).returns(resource) end @venv = Language::Python::Virtualenv::Virtualenv.new(@formula, @dir, "python") end def teardown FileUtils.rm_rf @dir end def test_virtualenv_creation @formula.expects(:resource).with("homebrew-virtualenv").returns( mock("resource", :stage => true) ) @venv.create end # or at least doesn't crash the second time def test_virtualenv_creation_is_idempotent @formula.expects(:resource).with("homebrew-virtualenv").returns( mock("resource", :stage => true) ) @venv.create FileUtils.mkdir_p @dir/"bin" FileUtils.touch @dir/"bin/python" @venv.create FileUtils.rm @dir/"bin/python" end def test_pip_install_accepts_string @formula.expects(:system).returns(true).with do |*params| params.first == @dir/"bin/pip" && params.last == "foo" end @venv.pip_install "foo" end def test_pip_install_accepts_multiline_string @formula.expects(:system).returns(true).with do |*params| params.first == @dir/"bin/pip" && params[-2..-1] == ["foo", "bar"] end @venv.pip_install <<-EOS.undent foo bar EOS end def test_pip_install_accepts_array @formula.expects(:system).returns(true).with do |*params| params.first == @dir/"bin/pip" && params.last == "foo" end @formula.expects(:system).returns(true).with do |*params| params.first == @dir/"bin/pip" && params.last == "bar" end @venv.pip_install ["foo", "bar"] end def test_pip_install_accepts_resource res = Resource.new "test" res.expects(:stage).yields(nil) @formula.expects(:system).returns(true).with do |*params| params.first == @dir/"bin/pip" && params.last == Pathname.pwd end @venv.pip_install res end def test_link_scripts_links_scripts bin = (@dir/"bin") dest = (@dir/"dest") bin.mkpath refute((bin/"kilroy").exist?) refute((dest/"kilroy").exist?) FileUtils.touch bin/"irrelevant" @venv.link_scripts(dest) { FileUtils.touch bin/"kilroy" } assert((bin/"kilroy").exist?) assert((dest/"kilroy").exist?) assert((dest/"kilroy").symlink?) assert_equal((bin/"kilroy").realpath, (dest/"kilroy").realpath) refute((dest/"irrelevant").exist?) end end