github.com/ChicK00o/awgo@v0.29.4/alfred_test.go (about) 1 // Copyright (c) 2018 Dean Jackson <deanishe@deanishe.net> 2 // MIT Licence - http://opensource.org/licenses/MIT 3 4 package aw 5 6 import ( 7 "fmt" 8 "os" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 // TestAlfred verifies scripts generated for Alfred's JXA API. 16 func TestAlfred(t *testing.T) { 17 a := NewAlfred() 18 defer func() { 19 if err := os.Setenv("alfred_version", ""); err != nil { 20 panic(fmt.Sprintf("setenv failed: %v", err)) 21 } 22 }() 23 24 t.Run("setup", func(t *testing.T) { 25 require.Nil(t, os.Setenv("alfred_version", ""), "setenv failed") 26 a.noRunScripts = true 27 }) 28 29 t.Run("empty action", func(t *testing.T) { 30 // run this first because a.lastScript won't be set 31 assert.Nil(t, a.Action(), "call empty action failed") 32 assert.Equal(t, "", a.lastScript, "run empty action failed") 33 }) 34 35 t.Run("empty search", func(t *testing.T) { 36 x := `Application("com.runningwithcrayons.Alfred").search("");` 37 assert.Nil(t, a.Search(""), "call empty search failed") 38 assert.Equal(t, x, a.lastScript, "empty search failed") 39 }) 40 41 t.Run("search", func(t *testing.T) { 42 x := `Application("com.runningwithcrayons.Alfred").search("awgo alfred");` 43 assert.Nil(t, a.Search("awgo alfred"), "call search failed") 44 assert.Equal(t, x, a.lastScript, "search failed") 45 }) 46 47 t.Run("action", func(t *testing.T) { 48 x := `Application("com.runningwithcrayons.Alfred").action(["/","/Volumes"]);` 49 assert.Nil(t, a.Action("/", "/Volumes"), "call action failed") 50 assert.Equal(t, x, a.lastScript, "action failed") 51 }) 52 53 t.Run("action as file", func(t *testing.T) { 54 x := `Application("com.runningwithcrayons.Alfred").action(["/","/Volumes"], {"asType":"file"});` 55 assert.Nil(t, a.ActionAsType(TypeFile, "/", "/Volumes"), "call action on files failed") 56 assert.Equal(t, x, a.lastScript, "action failed") 57 }) 58 59 t.Run("action as URL", func(t *testing.T) { 60 x := `Application("com.runningwithcrayons.Alfred").action(["https://example.com/","https://alfredapp.com/"], {"asType":"url"});` 61 assert.Nil(t, a.ActionAsType(TypeURL, "https://example.com/", "https://alfredapp.com/"), "call action on URLs failed") 62 assert.Equal(t, x, a.lastScript, "action failed") 63 }) 64 65 t.Run("browse", func(t *testing.T) { 66 x := `Application("com.runningwithcrayons.Alfred").browse("/Users");` 67 assert.Nil(t, a.Browse("/Users"), "call browse failed") 68 assert.Equal(t, x, a.lastScript, "browse failed") 69 }) 70 71 t.Run("run trigger", func(t *testing.T) { 72 x := `Application("com.runningwithcrayons.Alfred").runTrigger("test", {"inWorkflow":"net.deanishe.awgo","withArgument":"AwGo, yo!"});` 73 assert.Nil(t, a.RunTrigger("test", "AwGo, yo!"), "call trigger failed") 74 assert.Equal(t, x, a.lastScript, "run trigger failed") 75 }) 76 t.Run("run 3rd-party trigger", func(t *testing.T) { 77 x := `Application("com.runningwithcrayons.Alfred").runTrigger("test", {"inWorkflow":"com.example.workflow","withArgument":"AwGo, yo!"});` 78 assert.Nil(t, a.RunTrigger("test", "AwGo, yo!", "com.example.workflow"), "call 3rd-party trigger failed") 79 assert.Equal(t, x, a.lastScript, "run trigger in other workflow failed") 80 }) 81 82 t.Run("set theme", func(t *testing.T) { 83 x := `Application("com.runningwithcrayons.Alfred").setTheme("Alfred Notepad");` 84 assert.Nil(t, a.SetTheme("Alfred Notepad"), "call set theme failed") 85 assert.Equal(t, x, a.lastScript, "set theme failed") 86 }) 87 88 t.Run("reload workflow", func(t *testing.T) { 89 x := `Application("com.runningwithcrayons.Alfred").reloadWorkflow("net.deanishe.awgo");` 90 assert.Nil(t, a.ReloadWorkflow(), "call reload workflow failed") 91 assert.Equal(t, x, a.lastScript, "reload workflow failed") 92 }) 93 94 t.Run("reload 3rd-party workflow", func(t *testing.T) { 95 x := `Application("com.runningwithcrayons.Alfred").reloadWorkflow("com.example.workflow");` 96 assert.Nil(t, a.ReloadWorkflow("com.example.workflow"), "call reload workflow failed") 97 assert.Equal(t, x, a.lastScript, "reload workflow failed") 98 }) 99 100 // run a do-nothing script 101 t.Run("do-nothing script", func(t *testing.T) { 102 a.noRunScripts = false 103 js := `function run(argv) { return %s }` 104 assert.Nil(t, a.runScript(js), "run script failed") 105 }) 106 } 107 108 // TestAlfred3 verifies scripts generated for Alfred 3's JXA API. 109 func TestAlfred3(t *testing.T) { 110 a := NewAlfred() 111 112 defer func() { 113 if err := os.Setenv("alfred_version", ""); err != nil { 114 panic(fmt.Sprintf("setenv failed: %v", err)) 115 } 116 }() 117 a.noRunScripts = true 118 119 t.Run("set env", func(t *testing.T) { 120 require.Nil(t, os.Setenv("alfred_version", "3.8.1"), "setenv failed") 121 }) 122 123 t.Run("empty search", func(t *testing.T) { 124 x := `Application("Alfred 3").search("");` 125 assert.Nil(t, a.Search(""), "Alfred call failed") 126 assert.Equal(t, x, a.lastScript, "search failed") 127 }) 128 129 t.Run("search", func(t *testing.T) { 130 x := `Application("Alfred 3").search("awgo alfred");` 131 assert.Nil(t, a.Search("awgo alfred"), "Alfred call failed") 132 assert.Equal(t, x, a.lastScript, "search failed") 133 }) 134 135 t.Run("action", func(t *testing.T) { 136 x := `Application("Alfred 3").action(["/","/Volumes"]);` 137 assert.Nil(t, a.Action("/", "/Volumes"), "Alfred call failed") 138 assert.Equal(t, x, a.lastScript, "action failed") 139 }) 140 141 t.Run("browser", func(t *testing.T) { 142 x := `Application("Alfred 3").browse("/Users");` 143 assert.Nil(t, a.Browse("/Users"), "Alfred call failed") 144 assert.Equal(t, x, a.lastScript, "browse failed") 145 }) 146 147 t.Run("run trigger", func(t *testing.T) { 148 x := `Application("Alfred 3").runTrigger("test", {"inWorkflow":"net.deanishe.awgo","withArgument":"AwGo, yo!"});` 149 assert.Nil(t, a.RunTrigger("test", "AwGo, yo!"), "Alfred call failed") 150 assert.Equal(t, x, a.lastScript, "run trigger failed") 151 }) 152 153 t.Run("set theme", func(t *testing.T) { 154 x := `Application("Alfred 3").setTheme("Alfred Notepad");` 155 assert.Nil(t, a.SetTheme("Alfred Notepad"), "Alfred call failed") 156 assert.Equal(t, x, a.lastScript, "run trigger failed") 157 }) 158 }