require "testing_env" require "tab" require "formula" class TabTests < Homebrew::TestCase def setup @used = Options.create(%w(--with-foo --without-bar)) @unused = Options.create(%w(--with-baz --without-qux)) @tab = Tab.new({ :used_options => @used.as_flags, :unused_options => @unused.as_flags, :built_as_bottle => false, :poured_from_bottle => true, :tapped_from => "Homebrew/homebrew", :time => nil, :HEAD => TEST_SHA1, :compiler => "clang", :stdlib => "libcxx", }) end def test_defaults tab = Tab.dummy_tab assert_empty tab.unused_options assert_empty tab.used_options refute_predicate tab, :built_as_bottle refute_predicate tab, :poured_from_bottle assert_empty tab.tapped_from assert_nil tab.time assert_nil tab.HEAD assert_equal MacOS.default_compiler, tab.cxxstdlib.compiler assert_nil tab.cxxstdlib.type end def test_include? assert_includes @tab, "with-foo" assert_includes @tab, "without-bar" end def test_with? assert @tab.with?("foo") assert @tab.with?("qux") refute @tab.with?("bar") refute @tab.with?("baz") end def test_universal? tab = Tab.new(:used_options => %w[--universal]) assert_predicate tab, :universal? end def test_cxxstdlib assert_equal :clang, @tab.cxxstdlib.compiler assert_equal :libcxx, @tab.cxxstdlib.type end def test_other_attributes assert_equal TEST_SHA1, @tab.HEAD assert_equal "Homebrew/homebrew", @tab.tapped_from assert_nil @tab.time refute_predicate @tab, :built_as_bottle assert_predicate @tab, :poured_from_bottle end def test_from_file path = Pathname.new(TEST_DIRECTORY).join("fixtures", "receipt.json") tab = Tab.from_file(path) assert_equal @used.sort, tab.used_options.sort assert_equal @unused.sort, tab.unused_options.sort refute_predicate tab, :built_as_bottle assert_predicate tab, :poured_from_bottle assert_equal "Homebrew/homebrew", tab.tapped_from refute_nil tab.time assert_equal TEST_SHA1, tab.HEAD assert_equal :clang, tab.cxxstdlib.compiler assert_equal :libcxx, tab.cxxstdlib.type end def test_to_json tab = Tab.new(Utils::JSON.load(@tab.to_json)) assert_equal @tab.used_options.sort, tab.used_options.sort assert_equal @tab.unused_options.sort, tab.unused_options.sort assert_equal @tab.built_as_bottle, tab.built_as_bottle assert_equal @tab.poured_from_bottle, tab.poured_from_bottle assert_equal @tab.tapped_from, tab.tapped_from assert_equal @tab.time, tab.time assert_equal @tab.HEAD, tab.HEAD assert_equal @tab.compiler, tab.compiler assert_equal @tab.stdlib, tab.stdlib end end class TabLoadingTests < Homebrew::TestCase def setup @f = formula { url "foo-1.0" } @f.prefix.mkpath @path = @f.prefix.join(Tab::FILENAME) @path.write Pathname.new(TEST_DIRECTORY).join("fixtures", "receipt.json").read end def teardown @f.rack.rmtree end def test_for_keg tab = Tab.for_keg(@f.prefix) assert_equal @path, tab.tabfile end def test_for_keg_nonexistent_path @path.unlink tab = Tab.for_keg(@f.prefix) assert_nil tab.tabfile end def test_for_formula tab = Tab.for_formula(@f) assert_equal @path, tab.tabfile end def test_for_formula_nonexistent_path @path.unlink tab = Tab.for_formula(@f) assert_nil tab.tabfile end def test_for_formula_multiple_kegs f2 = formula { url "foo-2.0" } f2.prefix.mkpath assert_equal @f.rack, f2.rack assert_equal 2, @f.rack.subdirs.length tab = Tab.for_formula(@f) assert_equal @path, tab.tabfile end def test_for_formula_outdated_keg f2 = formula { url "foo-2.0" } assert_equal @f.rack, f2.rack assert_equal 1, @f.rack.subdirs.length tab = Tab.for_formula(f2) assert_equal @path, tab.tabfile end end