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  }