Compare commits
72 commits
Author | SHA1 | Date | |
---|---|---|---|
f6c1f7fa35 | |||
86deef4ded | |||
81f5161390 | |||
e9ca099379 | |||
0a2b2f4601 | |||
8a328a37bd | |||
63f70f3c33 | |||
|
27c07dddb4 | ||
|
76a527a66b | ||
|
a79a412f3a | ||
|
837b81de92 | ||
|
6e5a54c5b5 | ||
|
43dbc4eb56 | ||
|
055a5fa8ae | ||
|
d41c04f778 | ||
|
0e4ed6b3c5 | ||
|
452eee9454 | ||
|
4eb63b7c1f | ||
|
8d61376a95 | ||
|
a663a08bca | ||
|
f405233080 | ||
|
2c0059707f | ||
|
f4766d6981 | ||
|
f4afef6fa9 | ||
|
22b2c61ed1 | ||
|
9b6bc124f0 | ||
|
dad1e61c71 | ||
|
993f5de86e | ||
|
00951ac085 | ||
|
5a50536e59 | ||
|
71e8da986f | ||
|
9a9f8f21bb | ||
|
8418a6e3b2 | ||
|
1f64cb6544 | ||
|
b15ae822e6 | ||
|
5060c0757f | ||
|
30c3c60939 | ||
|
86849ede2a | ||
|
fb38802d33 | ||
|
f8cd00f2b6 | ||
|
47a0b1727f | ||
|
68fed1af8b | ||
|
8ab1d0d8d2 | ||
|
67df6534c0 | ||
|
2b46020293 | ||
|
cbd4e2bcac | ||
|
a77777987d | ||
|
8aa4c42932 | ||
|
0b7a039689 | ||
|
7f7027034c | ||
|
5c39901fc7 | ||
|
4668a7fbd4 | ||
|
c029e8e4c1 | ||
|
83b7646472 | ||
|
bada173f10 | ||
|
73da2d107e | ||
|
4a9e4b8e03 | ||
|
2292476f93 | ||
|
bad7321d4a | ||
|
d039eea61b | ||
|
7721d45abe | ||
|
aed7176e73 | ||
|
eaf5936f1e | ||
|
87d1e9bd0c | ||
|
9596b87899 | ||
|
831c0b0b00 | ||
|
cac8315195 | ||
|
7b6d59479a | ||
|
e25849a979 | ||
|
61a838cbcc | ||
|
1eb37d2a99 | ||
|
8b0ae499a7 |
9 changed files with 367 additions and 66 deletions
|
@ -6,7 +6,7 @@ test: &test
|
|||
- checkout
|
||||
- run:
|
||||
name: Install Dependencies
|
||||
command: apt-get update && apt-get install -y curl git ncurses-bin
|
||||
command: apt-get update && apt-get install -y curl git ncurses-bin libnotify-bin
|
||||
- run:
|
||||
name: Download requirements
|
||||
command: |
|
||||
|
@ -25,7 +25,7 @@ test: &test
|
|||
jobs:
|
||||
lint:
|
||||
docker:
|
||||
- image: "python:3.7-stretch"
|
||||
- image: "python:3.11"
|
||||
steps:
|
||||
- checkout
|
||||
- run:
|
||||
|
|
39
CHANGELOG.md
39
CHANGELOG.md
|
@ -1,6 +1,45 @@
|
|||
Changelog for zsh-auto-notify
|
||||
=============================
|
||||
|
||||
0.10.2
|
||||
------
|
||||
* Use preferable array argument expansion for flexible parameters
|
||||
|
||||
0.10.1
|
||||
------
|
||||
* Fix regression where not setting icon on Linux would cause issues (#59 #58)
|
||||
|
||||
0.10.0
|
||||
-----
|
||||
* Allow specifying an icon with notify-send backends
|
||||
|
||||
0.8.0
|
||||
-----
|
||||
* Change notify-send application title to `zsh`
|
||||
|
||||
0.7.0
|
||||
-----
|
||||
* Allow alternate `AUTO_NOTIFY_WHITELIST` for specifying commands to allow
|
||||
|
||||
0.6.0
|
||||
-----
|
||||
* Display warning and disable auto-notify if notify-send is not installed (Linux only)
|
||||
|
||||
0.5.1
|
||||
-----
|
||||
* Improved handling of MacOS notifications via #16 (Thanks @dmitmel!)
|
||||
|
||||
0.5.0
|
||||
-----
|
||||
* Support changing notification title and body using AUTO_NOTIFY_TITLE and AUTO_NOTIFY_BODY
|
||||
|
||||
0.4.0
|
||||
-----
|
||||
* Add `AUTO_NOTIFY_EXPIRE_TIME` configuration option
|
||||
* Improvements to notification formatting
|
||||
* Exit code is now displayed in notifications
|
||||
* Notifications on linux now show as critical if long command exits with non-zero exit code
|
||||
|
||||
0.3.0
|
||||
-----
|
||||
* Add support for environments where standard history is disabled. Fixed in #10
|
||||
|
|
20
ISSUE_TEMPLATE.md
Normal file
20
ISSUE_TEMPLATE.md
Normal file
|
@ -0,0 +1,20 @@
|
|||
# Issue Details
|
||||
|
||||
Please provide the following details when opening an issue:
|
||||
|
||||
## Operating System (uname -a)
|
||||
|
||||
## zsh version (zsh --version)
|
||||
|
||||
## auto-notify version (echo "$AUTO_NOTIFY_VERSION")
|
||||
|
||||
## How is auto-notify installed?
|
||||
|
||||
- [ ] zplug
|
||||
- [ ] oh-my-zsh
|
||||
- [ ] Antigen
|
||||
- [ ] Other (please specify)
|
||||
|
||||
## Steps to reproduce the issue
|
||||
|
||||
## gist link to your zshrc
|
67
README.rst
67
README.rst
|
@ -64,6 +64,14 @@ Zgen_
|
|||
|
||||
zgen load "MichaelAquilina/zsh-auto-notify"
|
||||
|
||||
Fig_
|
||||
|
||||
Install ``zsh-auto-notify`` with Fig in just one click.
|
||||
|
||||
.. image:: https://fig.io/badges/install-with-fig.svg
|
||||
:target: https://fig.io/plugins/other/zsh-auto-notify_MichaelAquilina
|
||||
:alt: Install with Fig
|
||||
|
||||
oh-my-zsh_
|
||||
|
||||
Copy this repository to ``$ZSH_CUSTOM/custom/plugins``, where ``$ZSH_CUSTOM``
|
||||
|
@ -93,6 +101,34 @@ can configure this value by setting the environment variable ``AUTO_NOTIFY_THRES
|
|||
# Set threshold to 20seconds
|
||||
export AUTO_NOTIFY_THRESHOLD=20
|
||||
|
||||
**Notification Formatting**
|
||||
|
||||
You can change the formatting of notifications by setting the values for ``AUTO_NOTIFY_TITLE`` and
|
||||
``AUTO_NOTIFY_BODY``. When writing these values, the following variables will be replaced according to
|
||||
the data that ``auto-notify`` has detected:
|
||||
|
||||
* ``%command`` - the command that the user executed
|
||||
* ``%elapsed`` - number of seconds that elapsed
|
||||
* ``%exit_code`` - the exit code of the command that was executed
|
||||
|
||||
An example of how these values can be set is shown below:
|
||||
|
||||
::
|
||||
|
||||
export AUTO_NOTIFY_TITLE="Hey! %command has just finished"
|
||||
export AUTO_NOTIFY_BODY="It completed in %elapsed seconds with exit code %exit_code"
|
||||
|
||||
**Notification Expiration Time**
|
||||
|
||||
You can set how long a notification sent by ``auto-notify`` will remain showing by setting the environment
|
||||
variable ``AUTO_NOTIFY_EXPIRE_TIME`` to a custom value in milliseconds. The default value is set to 8 seconds.
|
||||
NOTE: This configuration option currently only works for Linux.
|
||||
|
||||
::
|
||||
|
||||
# Set notification expiry to 10 seconds
|
||||
export AUTO_NOTIFY_EXPIRE_TIME=10000
|
||||
|
||||
|
||||
**Ignored Commands**
|
||||
|
||||
|
@ -115,6 +151,28 @@ a new array.
|
|||
# redefine what is ignored by auto-notify
|
||||
export AUTO_NOTIFY_IGNORE=("docker" "man" "sleep")
|
||||
|
||||
**Using a Whitelist to ignore commands**
|
||||
|
||||
If you wish to use a whitelist approach instead of the default blacklist approach used by ``AUTO_NOTIFY_IGNORE``,
|
||||
you can do so by defining the environment variable ``AUTO_NOTIFY_WHITELIST`` with the elements you wish to
|
||||
allow ``auto-notify`` to track and send notifications for. NOTE: If ``AUTO_NOTIFY_WHITELIST`` is defined,
|
||||
then all the values in ``AUTO_NOTIFY_IGNORE`` are not used.
|
||||
|
||||
::
|
||||
|
||||
export AUTO_NOTIFY_WHITELIST=("apt-get" "docker")
|
||||
|
||||
**Adding an icon - Linux**
|
||||
|
||||
If you wish to have an icon displayed on command success and/or failure, you can do so by defining the environmental variables ``AUTO_NOTIFY_ICON_SUCCESS`` and ``AUTO_NOTIFY_ICON_FAILURE`` respectively.
|
||||
|
||||
::
|
||||
|
||||
export AUTO_NOTIFY_ICON_SUCCESS=/path/to/success/icon.png
|
||||
export AUTO_NOTIFY_ICON_FAILURE=/path/to/failure/icon.png
|
||||
|
||||
|
||||
|
||||
Temporarily Disabling Notifications
|
||||
-----------------------------------
|
||||
|
||||
|
@ -157,19 +215,14 @@ directory of the repo.
|
|||
|
||||
NOTE: It is required that you use a minimum zunit version of 0.8.2
|
||||
|
||||
NOTE: The tests that run move your git configuration to a temporary
|
||||
location during the test process so that your user configuration does
|
||||
not interfere with tests. This will be restored at the end of each test
|
||||
so there is no risk in losing your settings. If for some strange reason
|
||||
zunit crashes or does not restore your git configuration automatically,
|
||||
all you need to do is run ``mv ~/.gitconfig.bak ~/.gitconfig``
|
||||
|
||||
.. _Zplug: https://github.com/zplug/zplug
|
||||
|
||||
.. _Antigen: https://github.com/zsh-users/antigen
|
||||
|
||||
.. _ZGen: https://github.com/tarjoilija/zgen
|
||||
|
||||
.. _Fig: https://fig.io
|
||||
|
||||
.. _oh-my-zsh: https://github.com/robbyrussell/oh-my-zsh
|
||||
|
||||
.. |GPLv3| image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg
|
||||
|
|
|
@ -1,29 +1,73 @@
|
|||
export AUTO_NOTIFY_VERSION="0.3.0"
|
||||
export AUTO_NOTIFY_VERSION="0.10.2"
|
||||
|
||||
# Time it takes for a notification to expire
|
||||
[[ -z "$AUTO_NOTIFY_EXPIRE_TIME" ]] &&
|
||||
export AUTO_NOTIFY_EXPIRE_TIME=8000
|
||||
# Threshold in seconds for when to automatically show a notification
|
||||
export AUTO_NOTIFY_THRESHOLD=10
|
||||
[[ -z "$AUTO_NOTIFY_THRESHOLD" ]] &&
|
||||
export AUTO_NOTIFY_THRESHOLD=10
|
||||
|
||||
[[ -z "$AUTO_NOTIFY_PUBLISH" ]] &&
|
||||
export AUTO_NOTIFY_PUBLISH="zsh_events"
|
||||
|
||||
# List of commands/programs to ignore sending notifications for
|
||||
export AUTO_NOTIFY_IGNORE=(
|
||||
"vim" "nvim" "less" "more" "man" "tig" "watch" "git commit" "top" "htop" "ssh" "nano"
|
||||
)
|
||||
[[ -z "$AUTO_NOTIFY_IGNORE" ]] &&
|
||||
export AUTO_NOTIFY_IGNORE=(
|
||||
'vim'
|
||||
'nvim'
|
||||
'less'
|
||||
'more'
|
||||
'man'
|
||||
'tig'
|
||||
'watch'
|
||||
'git commit'
|
||||
'top'
|
||||
'htop'
|
||||
'ssh'
|
||||
'nano'
|
||||
)
|
||||
|
||||
function _auto_notify_format() {
|
||||
local MESSAGE="$1"
|
||||
local command="$2"
|
||||
local elapsed="$3"
|
||||
local exit_code="$4"
|
||||
MESSAGE="${MESSAGE//\%command/$command}"
|
||||
MESSAGE="${MESSAGE//\%elapsed/$elapsed}"
|
||||
MESSAGE="${MESSAGE//\%exit_code/$exit_code}"
|
||||
printf "%s" "$MESSAGE"
|
||||
}
|
||||
|
||||
function _auto_notify_message() {
|
||||
local command="$1"
|
||||
local elapsed="$2"
|
||||
local exit_code="$3"
|
||||
local platform="$(uname)"
|
||||
# Run using echo -e in order to make sure notify-send picks up new line
|
||||
local text="$(echo -e "\"$command\" has completed\n(Total time: $elapsed seconds)")"
|
||||
local DEFAULT_TITLE="ZSH: '%command' finished"
|
||||
local DEFAULT_BODY="$(echo -e "Time: %elapsed seconds elapsed\nExit code: %exit_code")"
|
||||
local DEFAULT_PUBLISH="zsh_events"
|
||||
|
||||
if [[ "$platform" == "Linux" ]]; then
|
||||
notify-send "$text"
|
||||
elif [[ "$platform" == "Darwin" ]]; then
|
||||
# We need to escape quotes since we are passing a script into a command
|
||||
text="${text//\"/\\\"}"
|
||||
osascript -e "display notification \"$text\" with title \"Command Completed\""
|
||||
else
|
||||
printf "Unknown platform for sending notifications: $platform\n"
|
||||
printf "Please post an issue on gitub.com/MichaelAquilina/zsh-auto-notify/issues/\n"
|
||||
local title="${AUTO_NOTIFY_TITLE:-$DEFAULT_TITLE}"
|
||||
local text="${AUTO_NOTIFY_BODY:-$DEFAULT_BODY}"
|
||||
local publish="${AUTO_NOTIFY_PUBLISH:-$DEFAULT_PUBLISH}"
|
||||
|
||||
title="$(_auto_notify_format "$title" "$command" "$elapsed" "$exit_code")"
|
||||
body="$(_auto_notify_format "$text" "$command" "$elapsed" "$exit_code")"
|
||||
|
||||
local urgency="3"
|
||||
local icon=${AUTO_NOTIFY_ICON_SUCCESS:-""}
|
||||
# Exit code 130 is returned when a process is terminated with SIGINT.
|
||||
# Since the user is already interacting with the program, there is no
|
||||
# need to make the notification persistent.
|
||||
if [[ "$exit_code" != "0" ]] && [[ "$exit_code" != "130" ]]; then
|
||||
urgency="4"
|
||||
icon=${AUTO_NOTIFY_ICON_FAILURE:-""}
|
||||
fi
|
||||
|
||||
local arguments=("--title='$title'" "--priority=$urgency" $publish "$body")
|
||||
|
||||
ntfy publish -q ${arguments[@]}
|
||||
}
|
||||
|
||||
function _is_auto_notify_ignored() {
|
||||
|
@ -32,8 +76,33 @@ function _is_auto_notify_ignored() {
|
|||
local command_list=("${(@s/|/)command}")
|
||||
local target_command="${command_list[-1]}"
|
||||
# Remove leading whitespace
|
||||
target_command="$(echo "$target_command" | sed -e 's/^ *//')}"
|
||||
target_command="$(echo "$target_command" | sed -e 's/^ *//')"
|
||||
|
||||
# If the command is being run over SSH, then ignore it
|
||||
if [[ -n ${SSH_CLIENT-} || -n ${SSH_TTY-} || -n ${SSH_CONNECTION-} ]]; then
|
||||
print "yes"
|
||||
return
|
||||
fi
|
||||
|
||||
# Remove sudo prefix from command if detected
|
||||
if [[ "$target_command" == "sudo "* ]]; then
|
||||
target_command="${target_command/sudo /}"
|
||||
fi
|
||||
|
||||
# If AUTO_NOTIFY_WHITELIST is defined, then auto-notify will ignore
|
||||
# any item not defined in the white list
|
||||
# Otherwise - the alternative (default) approach is used where the
|
||||
# AUTO_NOTIFY_IGNORE blacklist is used to ignore commands
|
||||
|
||||
if [[ -n "$AUTO_NOTIFY_WHITELIST" ]]; then
|
||||
for allowed in $AUTO_NOTIFY_WHITELIST; do
|
||||
if [[ "$target_command" == "$allowed"* ]]; then
|
||||
print "no"
|
||||
return
|
||||
fi
|
||||
done
|
||||
print "yes"
|
||||
else
|
||||
for ignore in $AUTO_NOTIFY_IGNORE; do
|
||||
if [[ "$target_command" == "$ignore"* ]]; then
|
||||
print "yes"
|
||||
|
@ -41,9 +110,13 @@ function _is_auto_notify_ignored() {
|
|||
fi
|
||||
done
|
||||
print "no"
|
||||
fi
|
||||
}
|
||||
|
||||
function _auto_notify_send() {
|
||||
# Immediately store the exit code before it goes away
|
||||
local exit_code="$?"
|
||||
|
||||
if [[ -z "$AUTO_COMMAND" && -z "$AUTO_COMMAND_START" ]]; then
|
||||
return
|
||||
fi
|
||||
|
@ -53,7 +126,7 @@ function _auto_notify_send() {
|
|||
let "elapsed = current - AUTO_COMMAND_START"
|
||||
|
||||
if [[ $elapsed -gt $AUTO_NOTIFY_THRESHOLD ]]; then
|
||||
_auto_notify_message "$AUTO_COMMAND" "$elapsed"
|
||||
_auto_notify_message "$AUTO_COMMAND" "$elapsed" "$exit_code"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -86,11 +159,11 @@ function disable_auto_notify() {
|
|||
}
|
||||
|
||||
function enable_auto_notify() {
|
||||
autoload -Uz add-zsh-hook
|
||||
add-zsh-hook preexec _auto_notify_track
|
||||
add-zsh-hook precmd _auto_notify_send
|
||||
}
|
||||
|
||||
autoload -Uz add-zsh-hook
|
||||
|
||||
_auto_notify_reset_tracking
|
||||
|
||||
enable_auto_notify
|
26
tests/test_auto_notify_format.zunit
Normal file
26
tests/test_auto_notify_format.zunit
Normal file
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env zunit
|
||||
|
||||
@setup {
|
||||
load "../auto-notify.plugin.zsh"
|
||||
}
|
||||
|
||||
@test 'auto-notify-format no parameters' {
|
||||
run _auto_notify_format "Hello World" "foo" "bar" "baz"
|
||||
|
||||
assert $state equals 0
|
||||
assert "$output" same_as "Hello World"
|
||||
}
|
||||
|
||||
@test 'auto-notify-format correct formatting 1' {
|
||||
run _auto_notify_format "Command run is - %command (%elapsed seconds)" "zypper up" "10" "0"
|
||||
|
||||
assert $state equals 0
|
||||
assert "$output" same_as "Command run is - zypper up (10 seconds)"
|
||||
}
|
||||
|
||||
@test 'auto-notify-format correct formatting 2' {
|
||||
run _auto_notify_format "Exit code is %exit_code!" "zypper up" "10" "-101"
|
||||
|
||||
assert $state equals 0
|
||||
assert "$output" same_as "Exit code is -101!"
|
||||
}
|
|
@ -4,7 +4,9 @@
|
|||
load "../auto-notify.plugin.zsh"
|
||||
|
||||
function notify-send {
|
||||
echo - "Notification: $@"
|
||||
echo - "Notification Title: $1"
|
||||
echo - "Notification Body: $2"
|
||||
echo - "${@:3}"
|
||||
}
|
||||
|
||||
function uname {
|
||||
|
@ -21,29 +23,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
@test 'version exported' {
|
||||
git_version="$(git tag --list | sort -V | tail -1)"
|
||||
git tag --list
|
||||
|
||||
assert "$AUTO_NOTIFY_VERSION" is_not_empty
|
||||
assert "$AUTO_NOTIFY_VERSION" same_as "$git_version"
|
||||
}
|
||||
|
||||
@test 'hook functions are loaded by default' {
|
||||
assert '_auto_notify_track' in $preexec_functions
|
||||
assert '_auto_notify_send' in $precmd_functions
|
||||
}
|
||||
|
||||
@test 'enable/disable auto-notify' {
|
||||
disable_auto_notify
|
||||
assert '_auto_notify_track' not_in $preexec_functions
|
||||
assert '_auto_notify_send' not_in $precmd_functions
|
||||
|
||||
enable_auto_notify
|
||||
assert '_auto_notify_track' in $preexec_functions
|
||||
assert '_auto_notify_send' in $precmd_functions
|
||||
}
|
||||
|
||||
@test 'auto-notify-send does not send notification if tracking not set' {
|
||||
unset AUTO_COMMAND
|
||||
unset AUTO_COMMAND_FULL
|
||||
|
@ -103,14 +82,32 @@
|
|||
AUTO_COMMAND="f bar -r"
|
||||
AUTO_COMMAND_FULL="foo bar -r"
|
||||
AUTO_COMMAND_START=11080
|
||||
AUTO_NOTIFY_EXPIRE_TIME=15000
|
||||
run _auto_notify_send
|
||||
|
||||
assert $state equals 0
|
||||
assert "$lines[1]" same_as 'Notification: "f bar -r" has completed'
|
||||
assert "$lines[2]" same_as "(Total time: 20 seconds)"
|
||||
assert "$lines[1]" same_as 'Notification Title: "f bar -r" Completed'
|
||||
assert "$lines[2]" same_as "Notification Body: Total time: 20 seconds"
|
||||
assert "$lines[3]" same_as "Exit code: 0"
|
||||
assert "$lines[4]" same_as "--app-name=zsh --hint=int:transient:1 --urgency=normal --expire-time=15000"
|
||||
}
|
||||
|
||||
@test 'auto-notify-send sends notification on MacOSX' {
|
||||
@test 'auto-notify-send sends notification and icon on Linux on success' {
|
||||
AUTO_COMMAND="f bar -r"
|
||||
AUTO_COMMAND_FULL="foo bar -r"
|
||||
AUTO_COMMAND_START=11080
|
||||
AUTO_NOTIFY_EXPIRE_TIME=15000
|
||||
AUTO_NOTIFY_ICON_SUCCESS=/path/to/success/icon.png
|
||||
run _auto_notify_send
|
||||
|
||||
assert $state equals 0
|
||||
assert "$lines[1]" same_as 'Notification Title: "f bar -r" Completed'
|
||||
assert "$lines[2]" same_as "Notification Body: Total time: 20 seconds"
|
||||
assert "$lines[3]" same_as "Exit code: 0"
|
||||
assert "$lines[4]" same_as "--app-name=zsh --hint=int:transient:1 --urgency=normal --expire-time=15000 --icon=/path/to/success/icon.png"
|
||||
}
|
||||
|
||||
@test 'auto-notify-send sends notification on macOS' {
|
||||
AUTO_COMMAND="f bar -r"
|
||||
AUTO_COMMAND_FULL="foo bar -r"
|
||||
AUTO_COMMAND_START=11080
|
||||
|
@ -120,14 +117,14 @@
|
|||
}
|
||||
|
||||
function osascript {
|
||||
echo - $@
|
||||
echo - "${@}"
|
||||
}
|
||||
|
||||
run _auto_notify_send
|
||||
|
||||
assert $state equals 0
|
||||
assert "$lines[1]" same_as '-e display notification "\"f bar -r\" has completed'
|
||||
assert "$lines[2]" same_as '(Total time: 20 seconds)" with title "Command Completed"'
|
||||
assert "$lines[1]" same_as '-e on run argv -e display notification (item 1 of argv) with title (item 2 of argv) -e end run Total time: 20 seconds'
|
||||
assert "$lines[2]" same_as 'Exit code: 0 "f bar -r" Completed'
|
||||
}
|
||||
|
||||
@test 'auto-notify-send sends warning on unsupported platform' {
|
||||
|
@ -144,3 +141,17 @@
|
|||
assert "$lines[1]" same_as "Unknown platform for sending notifications: Hal9000"
|
||||
assert "$lines[2]" same_as "Please post an issue on gitub.com/MichaelAquilina/zsh-auto-notify/issues/"
|
||||
}
|
||||
|
||||
@test 'auto-notify-send sends custom message' {
|
||||
AUTO_COMMAND="doom -i"
|
||||
AUTO_COMMAND_FULL="doom -i"
|
||||
AUTO_COMMAND_START=11055
|
||||
AUTO_NOTIFY_TITLE="%command has completed in %elapseds yo"
|
||||
AUTO_NOTIFY_BODY="%command exited with code %exit_code"
|
||||
|
||||
run _auto_notify_send
|
||||
|
||||
assert $state equals 0
|
||||
assert "$lines[1]" same_as 'Notification Title: doom -i has completed in 45s yo'
|
||||
assert "$lines[2]" same_as "Notification Body: doom -i exited with code 0"
|
||||
}
|
|
@ -33,3 +33,30 @@
|
|||
assert $state equals 0
|
||||
assert "$output" same_as "yes"
|
||||
}
|
||||
|
||||
@test 'is_auto_notify_ignored - AUTO_NOTIFY_WHITELIST disallowed' {
|
||||
AUTO_NOTIFY_WHITELIST="foobar"
|
||||
|
||||
run _is_auto_notify_ignored "boom baz"
|
||||
|
||||
assert $state equals 0
|
||||
assert "$output" same_as "yes"
|
||||
}
|
||||
|
||||
@test 'is_auto_notify_ignored - AUTO_NOTIFY_WHITELIST allowed' {
|
||||
AUTO_NOTIFY_WHITELIST="foobar"
|
||||
|
||||
run _is_auto_notify_ignored "foobar baz"
|
||||
|
||||
assert $state equals 0
|
||||
assert "$output" same_as "no"
|
||||
}
|
||||
|
||||
@test 'is_auto_notify_ignored - AUTO_NOTIFY_WHITELIST allowed with sudo' {
|
||||
AUTO_NOTIFY_WHITELIST="foobar"
|
||||
|
||||
run _is_auto_notify_ignored "sudo foobar baz"
|
||||
|
||||
assert $state equals 0
|
||||
assert "$output" same_as "no"
|
||||
}
|
||||
|
|
52
tests/test_plugin.zunit
Normal file
52
tests/test_plugin.zunit
Normal file
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env zunit
|
||||
|
||||
@setup {
|
||||
function uname {
|
||||
printf "Linux"
|
||||
}
|
||||
# Mock function for passing builds where we don't
|
||||
# really need notify-send to be installed (e.g. Mac OSX)
|
||||
function notify-send {
|
||||
}
|
||||
}
|
||||
|
||||
@test 'print warning if notify-send is not installed' {
|
||||
function type {
|
||||
return 1
|
||||
}
|
||||
|
||||
run load "../auto-notify.plugin.zsh"
|
||||
|
||||
assert "$lines[1]" same_as "'notify-send' must be installed for zsh-auto-notify to work"
|
||||
assert "$lines[2]" same_as "Please install it with your relevant package manager"
|
||||
|
||||
@test 'dont load auto-notify if notify-send is not installed' {
|
||||
function type {
|
||||
return 1
|
||||
}
|
||||
|
||||
load "../auto-notify.plugin.zsh"
|
||||
|
||||
assert "_auto_notify_track" not_in $preexec_functions
|
||||
assert "_auto_notify_send" not_in $precmd_functions
|
||||
}
|
||||
|
||||
|
||||
@test 'hook functions are loaded by default' {
|
||||
load "../auto-notify.plugin.zsh"
|
||||
|
||||
assert '_auto_notify_track' in $preexec_functions
|
||||
assert '_auto_notify_send' in $precmd_functions
|
||||
}
|
||||
|
||||
@test 'enable/disable auto-notify' {
|
||||
load "../auto-notify.plugin.zsh"
|
||||
|
||||
disable_auto_notify
|
||||
assert '_auto_notify_track' not_in $preexec_functions
|
||||
assert '_auto_notify_send' not_in $precmd_functions
|
||||
|
||||
enable_auto_notify
|
||||
assert '_auto_notify_track' in $preexec_functions
|
||||
assert '_auto_notify_send' in $precmd_functions
|
||||
}
|
Loading…
Add table
Reference in a new issue