diff --git a/.travis.yml b/.travis.yml index 648499ab..136b661e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,3 +30,4 @@ script: - test/segments/vcs.spec - test/segments/kubecontext.spec - test/segments/laravel_version.spec + - test/segments/status.spec diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index c1ea754f..ab56d234 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -1779,10 +1779,16 @@ powerlevel9k_preexec() { set_default POWERLEVEL9K_PROMPT_ADD_NEWLINE false powerlevel9k_prepare_prompts() { - local RETVAL RPROMPT_PREFIX RPROMPT_SUFFIX + # Return values. These need to be global, because + # they are used in prompt_status. Also, we need + # to get the return value of the last command at + # very first in this function. Do not move the + # lines down, otherwise the last command is not + # what you expected it to be. RETVAL=$? RETVALS=( "$pipestatus[@]" ) + local RPROMPT_SUFFIX RPROMPT_PREFIX _P9K_COMMAND_DURATION=$((EPOCHREALTIME - _P9K_TIMER_START)) # Reset start time diff --git a/test/segments/status.spec b/test/segments/status.spec new file mode 100755 index 00000000..21bd65bb --- /dev/null +++ b/test/segments/status.spec @@ -0,0 +1,85 @@ +#!/usr/bin/env zsh +#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 + +# Required for shunit2 to run correctly +setopt shwordsplit +SHUNIT_PARENT=$0 + +function setUp() { + export TERM="xterm-256color" + # Load Powerlevel9k + source powerlevel9k.zsh-theme + + ### Test specific + # Resets if someone has set these in his/hers env + unset POWERLEVEL9K_STATUS_VERBOSE + unset POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE +} + +function testStatusPrintsNothingIfReturnCodeIsZeroAndVerboseIsUnset() { + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status custom_world) + local POWERLEVEL9K_STATUS_VERBOSE=false + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + + assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" +} + +function testStatusWorksAsExpectedIfReturnCodeIsZeroAndVerboseIsSet() { + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + local POWERLEVEL9K_STATUS_HIDE_SIGNAME=true + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + + assertEquals "%K{black} %F{green%}✔%f %k%F{black}%f " "$(build_left_prompt)" +} + +function testStatusInGeneralErrorCase() { + local RETVAL=1 + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + + assertEquals "%K{red} %F{yellow1%}↵ %f%F{yellow1}1 %k%F{red}%f " "$(build_left_prompt)" +} + +function testPipestatusInErrorCase() { + local -a RETVALS + RETVALS=(0 0 1 0) + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=true + + assertEquals "%K{red} %F{yellow1%}↵ %f%F{yellow1}0|0|1|0 %k%F{red}%f " "$(build_left_prompt)" +} + +function testStatusCrossWinsOverVerbose() { + local RETVAL=1 + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_CROSS=true + + assertEquals "%K{black} %F{red%}✘%f %k%F{black}%f " "$(build_left_prompt)" +} + +function testStatusShowsSignalNameInErrorCase() { + local RETVAL=132 + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false + local POWERLEVEL9K_STATUS_VERBOSE=true + local POWERLEVEL9K_STATUS_HIDE_SIGNAME=false + + assertEquals "%K{red} %F{yellow1%}↵ %f%F{yellow1}SIGILL(4) %k%F{red}%f " "$(build_left_prompt)" +} + +function testStatusSegmentIntegrated() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status) + local POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=() + + false; powerlevel9k_prepare_prompts + + assertEquals "%f%b%k%K{black} %F{red%}✘%f %k%F{black}%f " "${(e)PROMPT}" +} + +source shunit2/source/2.1/src/shunit2 \ No newline at end of file