aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/test_language_python.rb
blob: 5e91c73b02b3e2564eb3951aad5385994b79be01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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