Add the github.com/skratchdot/open-golang/open package as a dependency.

pull/6/head
Brendan Burns 2014-09-26 15:09:49 -07:00
parent b3292e947f
commit 6daeb8a05c
7 changed files with 197 additions and 0 deletions

4
Godeps/Godeps.json generated
View File

@ -89,6 +89,10 @@
"ImportPath": "github.com/mitchellh/goamz/ec2",
"Rev": "9cad7da945e699385c1a3e115aa255211921c9bb"
},
{
"ImportPath": "github.com/skratchdot/open-golang/open",
"Rev": "ba570a111973b539baf23c918213059543b5bb6e"
},
{
"ImportPath": "github.com/stretchr/objx",
"Rev": "d40df0cc104c06eae2dfe03d7dddb83802d52f9a"

View File

@ -0,0 +1,22 @@
Copyright (c) 2013 skratchdot
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,15 @@
// +build !windows,!darwin
package open
import (
"os/exec"
)
func open(input string) *exec.Cmd {
return exec.Command("xdg-open", input)
}
func openWith(input string, appName string) *exec.Cmd {
return exec.Command(appName, input)
}

View File

@ -0,0 +1,15 @@
// +build darwin
package open
import (
"os/exec"
)
func open(input string) *exec.Cmd {
return exec.Command("open", input)
}
func openWith(input string, appName string) *exec.Cmd {
return exec.Command("open", "-a", appName, input)
}

View File

@ -0,0 +1,21 @@
// +build windows
package open
import (
"os/exec"
"strings"
)
func cleaninput(input string) string {
r := strings.NewReplacer("&", "^&")
return r.Replace(input)
}
func open(input string) *exec.Cmd {
return exec.Command("cmd", "/C", "start", "", cleaninput(input))
}
func openWith(input string, appName string) *exec.Cmd {
return exec.Command("cmd", "/C", "start", "", appName, cleaninput(input))
}

View File

@ -0,0 +1,50 @@
/*
Open a file, directory, or URI using the OS's default
application for that object type. Optionally, you can
specify an application to use.
This is a proxy for the following commands:
OSX: "open"
Windows: "start"
Linux/Other: "xdg-open"
This is a golang port of the node.js module: https://github.com/pwnall/node-open
*/
package open
/*
Open a file, directory, or URI using the OS's default
application for that object type. Wait for the open
command to complete.
*/
func Run(input string) error {
return open(input).Run()
}
/*
Open a file, directory, or URI using the OS's default
application for that object type. Don't wait for the
open command to complete.
*/
func Start(input string) error {
return open(input).Start()
}
/*
Open a file, directory, or URI using the specified application.
Wait for the open command to complete.
*/
func RunWith(input string, appName string) error {
return openWith(input, appName).Run()
}
/*
Open a file, directory, or URI using the specified application.
Don't wait for the open command to complete.
*/
func StartWith(input string, appName string) error {
return openWith(input, appName).Start()
}

View File

@ -0,0 +1,70 @@
package open
import "testing"
func TestRun(t *testing.T) {
// shouldn't error
input := "https://google.com/"
err := Run(input)
if err != nil {
t.Errorf("open.Run(\"%s\") threw an error: %s", input, err)
}
// should error
input = "xxxxxxxxxxxxxxx"
err = Run(input)
if err == nil {
t.Errorf("Run(\"%s\") did not throw an error as expected", input)
}
}
func TestStart(t *testing.T) {
// shouldn't error
input := "https://google.com/"
err := Start(input)
if err != nil {
t.Errorf("open.Start(\"%s\") threw an error: %s", input, err)
}
// shouldn't error
input = "xxxxxxxxxxxxxxx"
err = Start(input)
if err != nil {
t.Errorf("open.Start(\"%s\") shouldn't even fail on invalid input: %s", input, err)
}
}
func TestRunWith(t *testing.T) {
// shouldn't error
input := "https://google.com/"
app := "firefox"
err := RunWith(input, app)
if err != nil {
t.Errorf("open.RunWith(\"%s\", \"%s\") threw an error: %s", input, app, err)
}
// should error
app = "xxxxxxxxxxxxxxx"
err = RunWith(input, app)
if err == nil {
t.Errorf("RunWith(\"%s\", \"%s\") did not throw an error as expected", input, app)
}
}
func TestStartWith(t *testing.T) {
// shouldn't error
input := "https://google.com/"
app := "firefox"
err := StartWith(input, app)
if err != nil {
t.Errorf("open.StartWith(\"%s\", \"%s\") threw an error: %s", input, app, err)
}
// shouldn't error
input = "[<Invalid URL>]"
err = StartWith(input, app)
if err != nil {
t.Errorf("StartWith(\"%s\", \"%s\") shouldn't even fail on invalid input: %s", input, app, err)
}
}