func TestHomebrew(t *testing.T) {
	if err := homebrew.Tap("orchestra-pit/fake"); err != nil {
		t.Errorf("Tap: %v", err)
	}

	if err := homebrew.Install("orchestra-pit/fake/stub", nil); err != nil {
		t.Errorf("Install: %v", err)
	}

	if err := homebrew.IsInstalled("orchestra-pit/fake/stub", "", nil); err != nil {
		t.Errorf("IsInstalled: %v", err)
	}

	if err := homebrew.IsInstalled("orchestra-pit/fake/stub", "0.3", nil); err != nil {
		t.Errorf("IsInstalled: %v", err)
	}

	if err := homebrew.Uninstall("orchestra-pit/fake/stub"); err != nil {
		t.Errorf("Uninstall: %v", err)
	}

	if err := homebrew.IsNotInstalled("orchestra-pit/fake/stub"); err != nil {
		t.Errorf("IsNotInstalled: %v", err)
	}

	if err := homebrew.Install("orchestra-pit/fake/stub", []string{"--with-something-awesome"}); err != nil {
		t.Errorf("Install: %v", err)
	}

	if err := homebrew.IsInstalled("orchestra-pit/fake/stub", "0.3", []string{"--with-something-awesome"}); err != nil {
		t.Errorf("IsInstalled: %v", err)
	}

	if err := homebrew.Uninstall("orchestra-pit/fake/stub"); err != nil {
		t.Errorf("Uninstall: %v", err)
	}

	if err := homebrew.Untap("orchestra-pit/fake"); err != nil {
		t.Errorf("Untap: %v", err)
	}
}
func (s *Installed) apply() error {
	if s.Update {
		if err := update.do(); err != nil {
			return err
		}
	}

	// if the package name contains the slash, tap the repository.
	if i := strings.LastIndex(s.Name, "/"); i > 0 {
		if err := homebrew.Tap(s.Name[0:i]); err != nil {
			return err
		}
	}

	// try to uninstall the named package if the different version is installed.
	if err := homebrew.IsInstalled(s.Name, s.Version, s.Options); err == nil {
		err := homebrew.Uninstall(s.Name)
		if err != nil {
			return err
		}
	}

	return homebrew.Install(s.Name, s.Options)
}
func (s *Removed) apply() error {
	return homebrew.Uninstall(s.Name)
}