summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rwxr-xr-xtest/core/color_overriding.spec62
-rwxr-xr-xtest/core/joining_segments.spec187
-rwxr-xr-xtest/core/prompt.spec104
-rwxr-xr-xtest/core/visual_identifier.spec50
-rwxr-xr-xtest/functions/colors.spec2
-rwxr-xr-xtest/functions/icons.spec145
-rwxr-xr-xtest/functions/utilities.spec2
-rwxr-xr-xtest/powerlevel9k.spec57
-rwxr-xr-xtest/segments/anaconda.spec69
-rwxr-xr-xtest/segments/aws_eb_env.spec61
-rwxr-xr-xtest/segments/background_jobs.spec78
-rwxr-xr-xtest/segments/battery.spec177
-rwxr-xr-xtest/segments/command_execution_time.spec94
-rwxr-xr-xtest/segments/context.spec113
-rwxr-xr-xtest/segments/custom.spec86
-rwxr-xr-xtest/segments/detect_virt.spec83
-rwxr-xr-xtest/segments/dir.spec480
-rwxr-xr-xtest/segments/disk_usage.spec131
-rwxr-xr-xtest/segments/go_version.spec48
-rwxr-xr-xtest/segments/ip.spec231
-rwxr-xr-xtest/segments/kubecontext.spec28
-rwxr-xr-xtest/segments/laravel_version.spec49
-rwxr-xr-xtest/segments/load.spec149
-rwxr-xr-xtest/segments/node_version.spec41
-rwxr-xr-xtest/segments/nodeenv.spec99
-rwxr-xr-xtest/segments/nvm.spec72
-rwxr-xr-xtest/segments/php_version.spec42
-rwxr-xr-xtest/segments/public_ip.spec222
-rwxr-xr-xtest/segments/ram.spec66
-rwxr-xr-xtest/segments/rust_version.spec21
-rwxr-xr-xtest/segments/ssh.spec80
-rwxr-xr-xtest/segments/status.spec60
-rwxr-xr-xtest/segments/swap.spec58
-rwxr-xr-xtest/segments/swift_version.spec57
-rwxr-xr-xtest/segments/symfony_version.spec117
-rwxr-xr-xtest/segments/todo.spec58
-rwxr-xr-xtest/segments/vcs-git.spec378
-rwxr-xr-xtest/segments/vcs-hg.spec207
-rwxr-xr-xtest/segments/vcs.spec161
-rwxr-xr-xtest/segments/vi_mode.spec48
-rwxr-xr-xtest/suite.spec17
41 files changed, 3771 insertions, 519 deletions
diff --git a/test/core/color_overriding.spec b/test/core/color_overriding.spec
new file mode 100755
index 00000000..6b7c3d35
--- /dev/null
+++ b/test/core/color_overriding.spec
@@ -0,0 +1,62 @@
+#!/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
+}
+
+function testDynamicColoringOfSegmentsWork() {
+ local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(date)
+ local POWERLEVEL9K_DATE_ICON="date-icon"
+ local POWERLEVEL9K_DATE_BACKGROUND='red'
+
+ assertEquals "%K{009} %F{000%}date-icon %f%F{000}%D{%d.%m.%y} %k%F{009}%f " "$(build_left_prompt)"
+}
+
+function testDynamicColoringOfVisualIdentifiersWork() {
+ local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(date)
+ local POWERLEVEL9K_DATE_ICON="date-icon"
+ local POWERLEVEL9K_DATE_VISUAL_IDENTIFIER_COLOR='green'
+
+ assertEquals "%K{015} %F{green%}date-icon %f%F{000}%D{%d.%m.%y} %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testColoringOfVisualIdentifiersDoesNotOverwriteColoringOfSegment() {
+ local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(date)
+ local POWERLEVEL9K_DATE_ICON="date-icon"
+ local POWERLEVEL9K_DATE_VISUAL_IDENTIFIER_COLOR='green'
+ local POWERLEVEL9K_DATE_FOREGROUND='red'
+ local POWERLEVEL9K_DATE_BACKGROUND='yellow'
+
+ assertEquals "%K{011} %F{green%}date-icon %f%F{009}%D{%d.%m.%y} %k%F{011}%f " "$(build_left_prompt)"
+}
+
+function testColorOverridingOfStatefulSegment() {
+ local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(host)
+ local POWERLEVEL9K_SSH_ICON="ssh-icon"
+ local POWERLEVEL9K_HOST_REMOTE_BACKGROUND='red'
+ local POWERLEVEL9K_HOST_REMOTE_FOREGROUND='green'
+ # Provoke state
+ local SSH_CLIENT="x"
+
+ assertEquals "%K{009} %F{002%}ssh-icon %f%F{002}%m %k%F{009}%f " "$(build_left_prompt)"
+}
+
+function testColorOverridingOfCustomSegment() {
+ local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local POWERLEVEL9K_CUSTOM_WORLD_ICON='CW'
+ local POWERLEVEL9K_CUSTOM_WORLD_VISUAL_IDENTIFIER_COLOR='green'
+ local POWERLEVEL9K_CUSTOM_WORLD_FOREGROUND='red'
+ local POWERLEVEL9K_CUSTOM_WORLD_BACKGROUND='red'
+
+ assertEquals "%K{009} %F{green%}CW %f%F{009}world %k%F{009}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/core/joining_segments.spec b/test/core/joining_segments.spec
new file mode 100755
index 00000000..42bf84dd
--- /dev/null
+++ b/test/core/joining_segments.spec
@@ -0,0 +1,187 @@
+#!/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
+}
+
+function testLeftNormalSegmentsShouldNotBeJoined() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3 custom_world4_joined custom_world5 custom_world6)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo world2"
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD4="echo world4"
+ local POWERLEVEL9K_CUSTOM_WORLD5="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD6="echo world6"
+
+ assertEquals "%K{015} %F{000}world1 %K{015}%F{000} %F{000}world2 %K{015}%F{000} %F{000}world4 %K{015}%F{000} %F{000}world6 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testLeftJoinedSegments() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo world2"
+
+ assertEquals "%K{015} %F{000}world1 %K{015}%F{000}%F{000}world2 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testLeftTransitiveJoinedSegments() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined custom_world3_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo world2"
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo world3"
+
+ assertEquals "%K{015} %F{000}world1 %K{015}%F{000}%F{000}world2 %K{015}%F{000}%F{000}world3 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testLeftTransitiveJoiningWithConditionalJoinedSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined custom_world3_joined custom_world4_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo world2"
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD4="echo world4"
+
+ assertEquals "%K{015} %F{000}world1 %K{015}%F{000}%F{000}world2 %K{015}%F{000}%F{000}world4 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testLeftPromotingSegmentWithConditionalPredecessor() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo world3"
+
+ assertEquals "%K{015} %F{000}world1 %K{015}%F{000} %F{000}world3 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testLeftPromotingSegmentWithJoinedConditionalPredecessor() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined custom_world4_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD4="echo world4"
+
+ assertEquals "%K{015} %F{000}world1 %K{015}%F{000} %F{000}world4 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testLeftPromotingSegmentWithDeepJoinedConditionalPredecessor() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined custom_world4_joined custom_world5_joined custom_world6_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD4="echo world4"
+ local POWERLEVEL9K_CUSTOM_WORLD5="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD6="echo world6"
+
+ assertEquals "%K{015} %F{000}world1 %K{015}%F{000} %F{000}world4 %K{015}%F{000}%F{000}world6 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testLeftJoiningBuiltinSegmentWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(php_version php_version_joined)
+ alias php="echo PHP 1.2.3"
+
+ assertEquals "%K{013} %F{255}PHP 1.2.3 %K{013}%F{255}%F{255}PHP 1.2.3 %k%F{013}%f " "$(build_left_prompt)"
+
+ unalias php
+}
+
+function testRightNormalSegmentsShouldNotBeJoined() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3 custom_world4 custom_world5_joined custom_world6)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo world2"
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD4="echo world4"
+ local POWERLEVEL9K_CUSTOM_WORLD5="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD6="echo world6"
+
+ assertEquals "%F{015}%f%K{015}%F{000} world1 %f%F{000}%f%K{015}%F{000} world2 %f%F{000}%f%K{015}%F{000} world4 %f%F{000}%f%K{015}%F{000} world6%E" "$(build_right_prompt)"
+}
+
+function testRightJoinedSegments() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo world2"
+
+ assertEquals "%F{015}%f%K{015}%F{000} world1 %f%K{015}%F{000}world2%E" "$(build_right_prompt)"
+}
+
+function testRightTransitiveJoinedSegments() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined custom_world3_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo world2"
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo world3"
+
+ assertEquals "%F{015}%f%K{015}%F{000} world1 %f%K{015}%F{000}world2 %f%K{015}%F{000}world3%E" "$(build_right_prompt)"
+}
+
+function testRightTransitiveJoiningWithConditionalJoinedSegment() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2_joined custom_world3_joined custom_world4_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo world2"
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD4="echo world4"
+
+ assertEquals "%F{015}%f%K{015}%F{000} world1 %f%K{015}%F{000}world2 %f%K{015}%F{000}world4%E" "$(build_right_prompt)"
+}
+
+function testRightPromotingSegmentWithConditionalPredecessor() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo world3"
+
+ assertEquals "%F{015}%f%K{015}%F{000} world1 %f%F{000}%f%K{015}%F{000} world3%E" "$(build_right_prompt)"
+}
+
+function testRightPromotingSegmentWithJoinedConditionalPredecessor() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined custom_world4_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD4="echo world4"
+
+ assertEquals "%F{015}%f%K{015}%F{000} world1 %f%F{000}%f%K{015}%F{000} world4%E" "$(build_right_prompt)"
+}
+
+function testRightPromotingSegmentWithDeepJoinedConditionalPredecessor() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2 custom_world3_joined custom_world4_joined custom_world5_joined custom_world6_joined)
+ local POWERLEVEL9K_CUSTOM_WORLD1="echo world1"
+ local POWERLEVEL9K_CUSTOM_WORLD2="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD3="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD4="echo world4"
+ local POWERLEVEL9K_CUSTOM_WORLD5="echo " # Print nothing to simulate unmet conditions
+ local POWERLEVEL9K_CUSTOM_WORLD6="echo world6"
+
+ assertEquals "%F{015}%f%K{015}%F{000} world1 %f%F{000}%f%K{015}%F{000} world4 %f%K{015}%F{000}world6%E" "$(build_right_prompt)"
+}
+
+function testRightJoiningBuiltinSegmentWorks() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(php_version php_version_joined)
+ alias php="echo PHP 1.2.3"
+
+ assertEquals "%F{013}%f%K{013}%F{255} PHP 1.2.3 %f%K{013}%F{255}PHP 1.2.3%E" "$(build_right_prompt)"
+
+ unalias php
+}
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/core/prompt.spec b/test/core/prompt.spec
new file mode 100755
index 00000000..b0d63cbb
--- /dev/null
+++ b/test/core/prompt.spec
@@ -0,0 +1,104 @@
+#!/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
+}
+
+function testSegmentOnRightSide() {
+ # Reset RPROMPT, so a running P9K does not interfere with the test
+ local RPROMPT=
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+ local POWERLEVEL9K_CUSTOM_WORLD2='echo world2'
+
+ powerlevel9k_prepare_prompts
+
+ local reset_attributes=$'\e[00m'
+ assertEquals "%f%b%k%F{015}%f%K{015}%F{000} world1 %f%F{000}%f%K{015}%F{000} world2%E%{${reset_attributes}%}" "${(e)RPROMPT}"
+}
+
+function testDisablingRightPrompt() {
+ # Reset RPROMPT, so a running P9K does not interfere with the test
+ local RPROMPT=
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1 custom_world2)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+ local POWERLEVEL9K_CUSTOM_WORLD2='echo world2'
+ local POWERLEVEL9K_DISABLE_RPROMPT=true
+
+ powerlevel9k_prepare_prompts
+
+ assertEquals "" "${(e)RPROMPT}"
+}
+
+function testLeftMultilinePrompt() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+ local POWERLEVEL9K_PROMPT_ON_NEWLINE=true
+
+ powerlevel9k_prepare_prompts
+
+ local nl=$'\n'
+ assertEquals "╭─%f%b%k%K{015} %F{000}world1 %k%F{015}%f ${nl}╰─ " "${(e)PROMPT}"
+}
+
+function testRightPromptOnSameLine() {
+ # Reset RPROMPT, so a running P9K does not interfere with the test
+ local RPROMPT=
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+
+ local POWERLEVEL9K_PROMPT_ON_NEWLINE=true
+ local POWERLEVEL9K_RPROMPT_ON_NEWLINE=false # We want the RPROMPT on the same line as our left prompt
+
+ # Skip test, as this cannot be tested properly.
+ # The "go one line up" instruction does not get
+ # printed as real characters in RPROMPT.
+ # On command line the assert statement produces
+ # a visually identical output as we expect, but
+ # it fails anyway. :(
+ startSkipping
+
+ powerlevel9k_prepare_prompts
+ assertEquals "%{\e[1A%}%F{015}%f%K{015}%F{000} world1 %f%{\e[1B%}" "${(e)RPROMPT}"
+}
+
+function testPrefixingFirstLineOnLeftPrompt() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+
+ local POWERLEVEL9K_PROMPT_ON_NEWLINE=true
+ local POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='XXX'
+
+ powerlevel9k_prepare_prompts
+
+ local nl=$'\n'
+ assertEquals "XXX%f%b%k%K{015} %F{000}world1 %k%F{015}%f ${nl}╰─ " "${(e)PROMPT}"
+}
+
+function testPrefixingSecondLineOnLeftPrompt() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+
+ local POWERLEVEL9K_PROMPT_ON_NEWLINE=true
+ local POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='XXX'
+
+ powerlevel9k_prepare_prompts
+
+ local nl=$'\n'
+ assertEquals "╭─%f%b%k%K{015} %F{000}world1 %k%F{015}%f ${nl}XXX" "${(e)PROMPT}"
+}
+
+source shunit2/shunit2
diff --git a/test/core/visual_identifier.spec b/test/core/visual_identifier.spec
new file mode 100755
index 00000000..8c8e3177
--- /dev/null
+++ b/test/core/visual_identifier.spec
@@ -0,0 +1,50 @@
+#!/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
+ source functions/*
+}
+
+function testOverwritingIconsWork() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+ local POWERLEVEL9K_CUSTOM_WORLD1_ICON='icon-here'
+
+ assertEquals "%K{015} %F{000%}icon-here %f%F{000}world1 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testVisualIdentifierAppearsBeforeSegmentContentOnLeftSegments() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+ local POWERLEVEL9K_CUSTOM_WORLD1_ICON='icon-here'
+
+ assertEquals "%K{015} %F{000%}icon-here %f%F{000}world1 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testVisualIdentifierAppearsAfterSegmentContentOnRightSegments() {
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_world1)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+ local POWERLEVEL9K_CUSTOM_WORLD1_ICON='icon-here'
+
+ assertEquals "%F{015}%f%K{015}%F{000} world1%F{000%} icon-here%f%E" "$(build_right_prompt)"
+}
+
+function testVisualIdentifierPrintsNothingIfNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world1)
+ local POWERLEVEL9K_CUSTOM_WORLD1='echo world1'
+
+ assertEquals "%K{015} %F{000}world1 %k%F{015}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/functions/colors.spec b/test/functions/colors.spec
index b8fa3ad5..d61923f5 100755
--- a/test/functions/colors.spec
+++ b/test/functions/colors.spec
@@ -39,4 +39,4 @@ function testIsSameColorDoesNotYieldNotEqualColorsTruthy() {
}
-source shunit2/source/2.1/src/shunit2
+source shunit2/shunit2
diff --git a/test/functions/icons.spec b/test/functions/icons.spec
index c8d88644..ec0cb1fa 100755
--- a/test/functions/icons.spec
+++ b/test/functions/icons.spec
@@ -10,21 +10,15 @@ function setUp() {
_OLD_LC_CTYPE="${LC_CTYPE}"
# Reset actual LC_CTYPE
unset LC_CTYPE
-
- # Store old P9K mode
- _OLD_P9K_MODE="${POWERLEVEL9K_MODE}"
}
function tearDown() {
# Restore LC_CTYPE
LC_CTYPE="${_OLD_LC_CTYPE}"
-
- # Restore old P9K mode
- POWERLEVEL9K_MODE="${_OLD_P9K_MODE}"
}
function testLcCtypeIsSetCorrectlyInDefaultMode() {
- POWERLEVEL9K_MODE="default"
+ local POWERLEVEL9K_MODE="default"
# Load Powerlevel9k
source functions/icons.zsh
@@ -32,7 +26,7 @@ function testLcCtypeIsSetCorrectlyInDefaultMode() {
}
function testLcCtypeIsSetCorrectlyInAwesomePatchedMode() {
- POWERLEVEL9K_MODE="awesome-patched"
+ local POWERLEVEL9K_MODE="awesome-patched"
# Load Powerlevel9k
source functions/icons.zsh
@@ -40,7 +34,7 @@ function testLcCtypeIsSetCorrectlyInAwesomePatchedMode() {
}
function testLcCtypeIsSetCorrectlyInAwesomeFontconfigMode() {
- POWERLEVEL9K_MODE="awesome-fontconfig"
+ local POWERLEVEL9K_MODE="awesome-fontconfig"
# Load Powerlevel9k
source functions/icons.zsh
@@ -48,7 +42,7 @@ function testLcCtypeIsSetCorrectlyInAwesomeFontconfigMode() {
}
function testLcCtypeIsSetCorrectlyInNerdfontFontconfigMode() {
- POWERLEVEL9K_MODE="nerdfont-fontconfig"
+ local POWERLEVEL9K_MODE="nerdfont-fontconfig"
# Load Powerlevel9k
source functions/icons.zsh
@@ -56,7 +50,7 @@ function testLcCtypeIsSetCorrectlyInNerdfontFontconfigMode() {
}
function testLcCtypeIsSetCorrectlyInFlatMode() {
- POWERLEVEL9K_MODE="flat"
+ local POWERLEVEL9K_MODE="flat"
# Load Powerlevel9k
source functions/icons.zsh
@@ -64,7 +58,7 @@ function testLcCtypeIsSetCorrectlyInFlatMode() {
}
function testLcCtypeIsSetCorrectlyInCompatibleMode() {
- POWERLEVEL9K_MODE="compatible"
+ local POWERLEVEL9K_MODE="compatible"
# Load Powerlevel9k
source functions/icons.zsh
@@ -76,7 +70,7 @@ function testLcCtypeIsSetCorrectlyInCompatibleMode() {
function testAllIconsAreDefinedLikeInDefaultMode() {
# Always compare against this mode
local _P9K_TEST_MODE="default"
- POWERLEVEL9K_MODE="${_P9K_TEST_MODE}"
+ local POWERLEVEL9K_MODE="${_P9K_TEST_MODE}"
source functions/icons.zsh
# _ICONS_UNDER_TEST is an array of just the keys of $icons.
# We later check via (r) "subscript" flag that our key
@@ -121,6 +115,15 @@ function testAllIconsAreDefinedLikeInDefaultMode() {
assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
done
+ # Switch to "nerdfont-complete" mode
+ POWERLEVEL9K_MODE="nerdfont-complete"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
# Switch to "flat" mode
POWERLEVEL9K_MODE="flat"
source functions/icons.zsh
@@ -148,7 +151,7 @@ function testAllIconsAreDefinedLikeInDefaultMode() {
function testAllIconsAreDefinedLikeInAwesomePatchedMode() {
# Always compare against this mode
local _P9K_TEST_MODE="awesome-patched"
- POWERLEVEL9K_MODE="$_P9K_TEST_MODE"
+ local POWERLEVEL9K_MODE="$_P9K_TEST_MODE"
source functions/icons.zsh
# _ICONS_UNDER_TEST is an array of just the keys of $icons.
# We later check via (r) "subscript" flag that our key
@@ -193,6 +196,15 @@ function testAllIconsAreDefinedLikeInAwesomePatchedMode() {
assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
done
+ # Switch to "nerdfont-complete" mode
+ POWERLEVEL9K_MODE="nerdfont-complete"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
# Switch to "flat" mode
POWERLEVEL9K_MODE="flat"
source functions/icons.zsh
@@ -220,7 +232,7 @@ function testAllIconsAreDefinedLikeInAwesomePatchedMode() {
function testAllIconsAreDefinedLikeInAwesomeFontconfigMode() {
# Always compare against this mode
local _P9K_TEST_MODE="awesome-fontconfig"
- POWERLEVEL9K_MODE="$_P9K_TEST_MODE"
+ local POWERLEVEL9K_MODE="$_P9K_TEST_MODE"
source functions/icons.zsh
# _ICONS_UNDER_TEST is an array of just the keys of $icons.
# We later check via (r) "subscript" flag that our key
@@ -265,6 +277,15 @@ function testAllIconsAreDefinedLikeInAwesomeFontconfigMode() {
assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
done
+ # Switch to "nerdfont-complete" mode
+ POWERLEVEL9K_MODE="nerdfont-complete"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
# Switch to "flat" mode
POWERLEVEL9K_MODE="flat"
source functions/icons.zsh
@@ -292,7 +313,7 @@ function testAllIconsAreDefinedLikeInAwesomeFontconfigMode() {
function testAllIconsAreDefinedLikeInNerdfontFontconfigMode() {
# Always compare against this mode
local _P9K_TEST_MODE="nerdfont-fontconfig"
- POWERLEVEL9K_MODE="$_P9K_TEST_MODE"
+ local POWERLEVEL9K_MODE="$_P9K_TEST_MODE"
source functions/icons.zsh
# _ICONS_UNDER_TEST is an array of just the keys of $icons.
# We later check via (r) "subscript" flag that our key
@@ -337,6 +358,96 @@ function testAllIconsAreDefinedLikeInNerdfontFontconfigMode() {
assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
done
+ # Switch to "nerdfont-complete" mode
+ POWERLEVEL9K_MODE="nerdfont-complete"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
+ # Switch to "flat" mode
+ POWERLEVEL9K_MODE="flat"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
+ # Switch to "compatible" mode
+ POWERLEVEL9K_MODE="compatible"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
+ unset current_icons
+ unset _ICONS_UNDER_TEST
+}
+
+# Go through all icons defined in nerdfont-complete mode, and
+# check if all of them are defined in the other modes.
+function testAllIconsAreDefinedLikeInNerdfontCompleteMode() {
+ # Always compare against this mode
+ local _P9K_TEST_MODE="nerdfont-complete"
+ local POWERLEVEL9K_MODE="$_P9K_TEST_MODE"
+ source functions/icons.zsh
+ # _ICONS_UNDER_TEST is an array of just the keys of $icons.
+ # We later check via (r) "subscript" flag that our key
+ # is in the values of our flat array.
+ typeset -ah _ICONS_UNDER_TEST
+ _ICONS_UNDER_TEST=(${(k)icons[@]})
+
+ # Switch to "default" mode
+ POWERLEVEL9K_MODE="default"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ # Iterate over all keys found in the _ICONS_UNDER_TEST
+ # array and compare it with the icons array of the
+ # current POWERLEVEL9K_MODE.
+ # Use parameter expansion, to directly check if the
+ # key exists in the flat current array of keys. That
+ # is quite complicated, but there seems no easy way
+ # to check the mere existance of a key in an array.
+ # The usual way would always return the value, so that
+ # would do the wrong thing as we have some (on purpose)
+ # empty values.
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
+ # Switch to "awesome-patched" mode
+ POWERLEVEL9K_MODE="awesome-patched"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
+ # Switch to "awesome-fontconfig" mode
+ POWERLEVEL9K_MODE="awesome-fontconfig"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
+ # Switch to "nerdfont-fontconfig" mode
+ POWERLEVEL9K_MODE="nerdfont-fontconfig"
+ source functions/icons.zsh
+ typeset -ah current_icons
+ current_icons=(${(k)icons[@]})
+ for key in ${_ICONS_UNDER_TEST}; do
+ assertTrue "The key ${key} does exist in ${_P9K_TEST_MODE} mode, but not in ${POWERLEVEL9K_MODE}!" "(( ${+current_icons[(r)$key]} ))"
+ done
+
# Switch to "flat" mode
POWERLEVEL9K_MODE="flat"
source functions/icons.zsh
@@ -359,4 +470,4 @@ function testAllIconsAreDefinedLikeInNerdfontFontconfigMode() {
unset _ICONS_UNDER_TEST
}
-source shunit2/source/2.1/src/shunit2 \ No newline at end of file
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/functions/utilities.spec b/test/functions/utilities.spec
index a9bd67e3..b727c1f6 100755
--- a/test/functions/utilities.spec
+++ b/test/functions/utilities.spec
@@ -106,4 +106,4 @@ function testSegmentShouldNotBeJoinedIfPredecessingSegmentIsNotJoinedButConditio
unset segments
}
-source shunit2/source/2.1/src/shunit2
+source shunit2/shunit2
diff --git a/test/powerlevel9k.spec b/test/powerlevel9k.spec
index 2206a9d0..5a7cd382 100755
--- a/test/powerlevel9k.spec
+++ b/test/powerlevel9k.spec
@@ -17,68 +17,66 @@ function setUp() {
}
function testJoinedSegments() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir dir_joined)
cd /tmp
assertEquals "%K{012} %F{000}/tmp %K{012}%F{000}%F{000}/tmp %k%F{012}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
cd -
}
function testTransitiveJoinedSegments() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir root_indicator_joined dir_joined)
cd /tmp
assertEquals "%K{012} %F{000}/tmp %K{012}%F{000}%F{000}/tmp %k%F{012}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
cd -
}
function testJoiningWithConditionalSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir background_jobs dir_joined)
cd /tmp
assertEquals "%K{012} %F{000}/tmp %K{012}%F{000} %F{000}/tmp %k%F{012}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
cd -
}
function testDynamicColoringOfSegmentsWork() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_DIR_DEFAULT_BACKGROUND='red'
+ local POWERLEVEL9K_DIR_DEFAULT_BACKGROUND='red'
cd /tmp
assertEquals "%K{009} %F{000}/tmp %k%F{009}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_DIR_DEFAULT_BACKGROUND
cd -
}
function testDynamicColoringOfVisualIdentifiersWork() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR='green'
- POWERLEVEL9K_FOLDER_ICON="icon-here"
+ local POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR='green'
+ local POWERLEVEL9K_FOLDER_ICON="icon-here"
cd /tmp
assertEquals "%K{012} %F{green%}icon-here %f%F{000}/tmp %k%F{012}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR
- unset POWERLEVEL9K_FOLDER_ICON
cd -
}
function testColoringOfVisualIdentifiersDoesNotOverwriteColoringOfSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR='green'
- POWERLEVEL9K_DIR_DEFAULT_FOREGROUND='red'
- POWERLEVEL9K_DIR_DEFAULT_BACKGROUND='yellow'
- POWERLEVEL9K_FOLDER_ICON="icon-here"
+ local POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR='green'
+ local POWERLEVEL9K_DIR_DEFAULT_FOREGROUND='red'
+ local POWERLEVEL9K_DIR_DEFAULT_BACKGROUND='yellow'
+ local POWERLEVEL9K_FOLDER_ICON="icon-here"
# Re-Source the icons, as the POWERLEVEL9K_MODE is directly
# evaluated there.
@@ -88,17 +86,13 @@ function testColoringOfVisualIdentifiersDoesNotOverwriteColoringOfSegment() {
assertEquals "%K{011} %F{green%}icon-here %f%F{009}/tmp %k%F{011}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_COLOR
- unset POWERLEVEL9K_DIR_DEFAULT_FOREGROUND
- unset POWERLEVEL9K_DIR_DEFAULT_BACKGROUND
- unset POWERLEVEL9K_FOLDER_ICON
cd -
}
function testOverwritingIconsWork() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_FOLDER_ICON='icon-here'
+ local POWERLEVEL9K_FOLDER_ICON='icon-here'
#local testFolder=$(mktemp -d -p p9k)
# Move testFolder under home folder
#mv testFolder ~
@@ -108,29 +102,22 @@ function testOverwritingIconsWork() {
cd /tmp
assertEquals "%K{012} %F{000%}icon-here %f%F{000}/tmp %k%F{012}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_DIR_FOLDER_ICON
cd -
# rm -fr ~/$testFolder
}
function testNewlineOnRpromptCanBeDisabled() {
- POWERLEVEL9K_PROMPT_ON_NEWLINE=true
- POWERLEVEL9K_RPROMPT_ON_NEWLINE=false
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
- POWERLEVEL9K_CUSTOM_RWORLD='echo rworld'
+ local POWERLEVEL9K_PROMPT_ON_NEWLINE=true
+ local POWERLEVEL9K_RPROMPT_ON_NEWLINE=false
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local POWERLEVEL9K_CUSTOM_RWORLD='echo rworld'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world)
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(custom_rworld)
powerlevel9k_prepare_prompts
assertEquals '$(print_icon MULTILINE_FIRST_PROMPT_PREFIX) world  $(print_icon MULTILINE_LAST_PROMPT_PREFIX) rworld' "$(print -P ${PROMPT}${RPROMPT})"
-
- unset POWERLEVEL9K_PROMPT_ON_NEWLINE
- unset POWERLEVEL9K_RPROMPT_ON_NEWLINE
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_CUSTOM_WORLD
- unset POWERLEVEL9K_CUSTOM_RWORLD
}
-source shunit2/source/2.1/src/shunit2
+source shunit2/shunit2
diff --git a/test/segments/anaconda.spec b/test/segments/anaconda.spec
new file mode 100755
index 00000000..9dc452e9
--- /dev/null
+++ b/test/segments/anaconda.spec
@@ -0,0 +1,69 @@
+#!/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"
+}
+
+function testAnacondaSegmentPrintsNothingIfNoAnacondaPathIsSet() {
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(anaconda custom_world)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ # Unset anacona variables
+ unset CONDA_ENV_PATH
+ unset CONDA_PREFIX
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testAnacondaSegmentWorksIfOnlyAnacondaPathIsSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(anaconda)
+ local POWERLEVEL9K_PYTHON_ICON="icon-here"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ CONDA_ENV_PATH=/tmp
+ unset CONDA_PREFIX
+
+ assertEquals "%K{012} %F{000%}icon-here %f%F{000}(tmp) %k%F{012}%f " "$(build_left_prompt)"
+}
+
+function testAnacondaSegmentWorksIfOnlyAnacondaPrefixIsSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(anaconda)
+ local POWERLEVEL9K_PYTHON_ICON="icon-here"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ unset CONDA_ENV_PATH
+ local CONDA_PREFIX="test"
+
+ assertEquals "%K{012} %F{000%}icon-here %f%F{000}(test) %k%F{012}%f " "$(build_left_prompt)"
+}
+
+function testAnacondaSegmentWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(anaconda)
+ local POWERLEVEL9K_PYTHON_ICON="icon-here"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ local CONDA_ENV_PATH=/tmp
+ local CONDA_PREFIX="test"
+
+ assertEquals "%K{012} %F{000%}icon-here %f%F{000}(tmptest) %k%F{012}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/aws_eb_env.spec b/test/segments/aws_eb_env.spec
new file mode 100755
index 00000000..8a3879b6
--- /dev/null
+++ b/test/segments/aws_eb_env.spec
@@ -0,0 +1,61 @@
+#!/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"
+}
+
+function testAwsEbEnvSegmentPrintsNothingIfNoElasticBeanstalkEnvironmentIsSet() {
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(aws_eb_env custom_world)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testAwsEbEnvSegmentWorksIfElasticBeanstalkEnvironmentIsSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(aws_eb_env)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ mkdir -p /tmp/powerlevel9k-test/.elasticbeanstalk
+ echo "test:\n environment: test" > /tmp/powerlevel9k-test/.elasticbeanstalk/config.yml
+ cd /tmp/powerlevel9k-test
+
+ assertEquals "%K{000} %F{002%}🌱 %f%F{002}test %k%F{000}%f " "$(build_left_prompt)"
+
+ rm -fr /tmp/powerlevel9k-test
+ cd -
+}
+
+function testAwsEbEnvSegmentWorksIfElasticBeanstalkEnvironmentIsSetInParentDirectory() {
+ # Skip test, because currently we cannot detect
+ # if the configuration is in a parent directory
+ startSkipping # Skip test
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(aws_eb_env)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ mkdir -p /tmp/powerlevel9k-test/.elasticbeanstalk
+ mkdir -p /tmp/powerlevel9k-test/1/12/123/1234/12345
+ echo "test:\n environment: test" > /tmp/powerlevel9k-test/.elasticbeanstalk/config.yml
+ cd /tmp/powerlevel9k-test/1/12/123/1234/12345
+
+ assertEquals "%K{000} %F{002%}🌱 %f%F{002}test %k%F{000}%f " "$(build_left_prompt)"
+
+ rm -fr /tmp/powerlevel9k-test
+ cd -
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/background_jobs.spec b/test/segments/background_jobs.spec
new file mode 100755
index 00000000..46c37aa2
--- /dev/null
+++ b/test/segments/background_jobs.spec
@@ -0,0 +1,78 @@
+#!/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"
+}
+
+function testBackgroundJobsSegmentPrintsNothingWithoutBackgroundJobs() {
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(background_jobs custom_world)
+ alias jobs="nojobs 2>/dev/null"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias jobs
+}
+
+function testBackgroundJobsSegmentWorksWithOneBackgroundJob() {
+ unset POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(background_jobs)
+ jobs() {
+ echo '[1] + 30444 suspended nvim xx'
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{014%}⚙%f %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction jobs
+}
+
+function testBackgroundJobsSegmentWorksWithMultipleBackgroundJobs() {
+ local POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(background_jobs)
+ jobs() {
+ echo "[1] 31190 suspended nvim xx"
+ echo "[2] - 31194 suspended nvim xx2"
+ echo "[3] + 31206 suspended nvim xx3"
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{014%}⚙%f %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction jobs
+}
+
+function testBackgroundJobsSegmentWithVerboseMode() {
+ local POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=true
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(background_jobs)
+ jobs() {
+ echo "[1] 31190 suspended nvim xx"
+ echo "[2] - 31194 suspended nvim xx2"
+ echo "[3] + 31206 suspended nvim xx3"
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{014%}⚙ %f%F{014}3 %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction jobs
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/battery.spec b/test/segments/battery.spec
new file mode 100755
index 00000000..4a75bfdf
--- /dev/null
+++ b/test/segments/battery.spec
@@ -0,0 +1,177 @@
+#!/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
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder
+ FOLDER=/tmp/powerlevel9k-test
+ mkdir -p "${FOLDER}"
+ cd $FOLDER
+
+ # Prepare folder for pmset (OSX)
+ PMSET_PATH=$FOLDER/usr/bin
+ mkdir -p $PMSET_PATH
+ # Prepare folder for $BATTERY (Linux)
+ BATTERY_PATH=$FOLDER/sys/class/power_supply
+ mkdir -p $BATTERY_PATH
+ mkdir -p $BATTERY_PATH/BAT0
+ mkdir -p $BATTERY_PATH/BAT1
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}" &>/dev/null
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test &>/dev/null
+ unset PMSET_PATH
+ unset BATTERY_PATH
+ unset FOLDER
+ unset P9K_HOME
+}
+
+# Mock Battery
+# For mocking pmset on OSX this function takes one argument (the
+# content that pmset should echo).
+# For mocking the battery on Linux this function takes two
+# arguments: $1 is the capacity; $2 the battery status.
+function makeBatterySay() {
+ if [[ -z "${FOLDER}" ]]; then
+ echo "Fake root path is not correctly set!"
+ exit 1
+ fi
+ # OSX
+ echo "#!/bin/sh" > $PMSET_PATH/pmset
+ echo "echo \"$1\"" >> $PMSET_PATH/pmset
+ chmod +x $PMSET_PATH/pmset
+
+ # Linux
+ local capacity="$1"
+ echo "$capacity" > $BATTERY_PATH/BAT0/capacity
+ echo "$capacity" > $BATTERY_PATH/BAT1/capacity
+ local battery_status="$2"
+ echo "$battery_status" > $BATTERY_PATH/BAT0/status
+ echo "$battery_status" > $BATTERY_PATH/BAT1/status
+}
+
+function testBatterySegmentIfBatteryIsLowWhileDischargingOnOSX() {
+ local OS='OSX' # Fake OSX
+ makeBatterySay "Now drawing from 'Battery Power'
+ -InternalBattery-0 (id=1234567) 4%; discharging; 0:05 remaining present: true"
+
+ assertEquals "%K{000} %F{009%}🔋 %f%F{009}4%% (0:05) " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsLowWhileChargingOnOSX() {
+ local OS='OSX' # Fake OSX
+ makeBatterySay "Now drawing from 'Battery Power'
+ -InternalBattery-0 (id=1234567) 4%; charging; 0:05 remaining present: true"
+
+ assertEquals "%K{000} %F{011%}🔋 %f%F{011}4%% (0:05) " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsAlmostFullWhileDischargingOnOSX() {
+ local OS='OSX' # Fake OSX
+ makeBatterySay "Now drawing from 'Battery Power'
+ -InternalBattery-0 (id=1234567) 98%; discharging; 3:57 remaining present: true"
+
+ assertEquals "%K{000} %F{015%}🔋 %f%F{015}98%% (3:57) " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsAlmostFullWhileChargingOnOSX() {
+ local OS='OSX' # Fake OSX
+ makeBatterySay "Now drawing from 'Battery Power'
+ -InternalBattery-0 (id=1234567) 98%; charging; 3:57 remaining present: true"
+
+ assertEquals "%K{000} %F{011%}🔋 %f%F{011}98%% (3:57) " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsFullOnOSX() {
+ local OS='OSX' # Fake OSX
+ makeBatterySay "Now drawing from 'AC Power'
+ -InternalBattery-0 (id=1234567) 99%; charged; 0:00 remaining present: true"
+
+ assertEquals "%K{000} %F{002%}🔋 %f%F{002}99%% " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsCalculatingOnOSX() {
+ local OS='OSX' # Fake OSX
+ makeBatterySay "Now drawing from 'Battery Power'
+ -InternalBattery-0 (id=1234567) 99%; discharging; (no estimate) present: true"
+
+ assertEquals "%K{000} %F{015%}🔋 %f%F{015}99%% (...) " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsLowWhileDischargingOnLinux() {
+ local OS='Linux' # Fake Linux
+ makeBatterySay "4" "Discharging"
+
+ assertEquals "%K{000} %F{009%}🔋 %f%F{009}4%% " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsLowWhileChargingOnLinux() {
+ local OS='Linux' # Fake Linux
+ makeBatterySay "4" "Charging"
+
+ assertEquals "%K{000} %F{011%}🔋 %f%F{011}4%% " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsNormalWhileDischargingOnLinux() {
+ local OS='Linux' # Fake Linux
+ makeBatterySay "10" "Discharging"
+
+ assertEquals "%K{000} %F{015%}🔋 %f%F{015}10%% " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsNormalWhileChargingOnLinux() {
+ local OS='Linux' # Fake Linux
+ makeBatterySay "10" "Charging"
+
+ assertEquals "%K{000} %F{011%}🔋 %f%F{011}10%% " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsFullOnLinux() {
+ local OS='Linux' # Fake Linux
+ makeBatterySay "100" "Full"
+
+ assertEquals "%K{000} %F{002%}🔋 %f%F{002}100%% " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+function testBatterySegmentIfBatteryIsNormalWithAcpiEnabledOnLinux() {
+ local OS='Linux' # Fake Linux
+ makeBatterySay "50" "Discharging"
+ echo "echo 'Batter 0: Discharging, 50%, 01:38:54 remaining'" > ${FOLDER}/usr/bin/acpi
+ chmod +x ${FOLDER}/usr/bin/acpi
+ # For running on Mac, we need to mock date :(
+ [[ -f /usr/local/bin/gdate ]] && alias date=gdate
+
+ assertEquals "%K{000} %F{015%}🔋 %f%F{015}50%% (1:38) " "$(prompt_battery left 1 false ${FOLDER})"
+
+ unalias date &>/dev/null
+ # unaliasing date fails where it was never aliased (e.g. on Linux).
+ # This causes the whole test to fail, because the return code is
+ # non-zero.
+ return 0
+}
+
+function testBatterySegmentIfBatteryIsCalculatingWithAcpiEnabledOnLinux() {
+ local OS='Linux' # Fake Linux
+ makeBatterySay "50" "Discharging"
+ # Todo: Include real acpi output!
+ echo "echo 'Batter 0: Discharging, 50%, rate remaining'" > ${FOLDER}/usr/bin/acpi
+ chmod +x ${FOLDER}/usr/bin/acpi
+
+ assertEquals "%K{000} %F{015%}🔋 %f%F{015}50%% (...) " "$(prompt_battery left 1 false ${FOLDER})"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/command_execution_time.spec b/test/segments/command_execution_time.spec
index 7e060be7..d0e8e919 100755
--- a/test/segments/command_execution_time.spec
+++ b/test/segments/command_execution_time.spec
@@ -7,90 +7,98 @@ SHUNIT_PARENT=$0
function setUp() {
export TERM="xterm-256color"
- # Load Powerlevel9k
- source powerlevel9k.zsh-theme
}
function testCommandExecutionTimeIsNotShownIfTimeIsBelowThreshold() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world command_execution_time)
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
- _P9K_COMMAND_DURATION=2
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
- assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_CUSTOM_WORLD
- unset _P9K_COMMAND_DURATION
+ # Override payload
+ local _P9K_COMMAND_DURATION=2
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
}
function testCommandExecutionTimeThresholdCouldBeChanged() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
- POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1
- _P9K_COMMAND_DURATION=2.03
+ local POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=1
- assertEquals "%K{009} %F{226%}Dur %f%F{226}2.03 %k%F{009}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ # Override payload
+ local _P9K_COMMAND_DURATION=2.03
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset _P9K_COMMAND_DURATION
- unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD
+ assertEquals "%K{009} %F{226%}Dur %f%F{226}2.03 %k%F{009}%f " "$(build_left_prompt)"
}
function testCommandExecutionTimeThresholdCouldBeSetToZero() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
- POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0
- _P9K_COMMAND_DURATION=0.03
+ local POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0
+ local _P9K_COMMAND_DURATION=0.03
assertEquals "%K{009} %F{226%}Dur %f%F{226}0.03 %k%F{009}%f " "$(build_left_prompt)"
-
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset _P9K_COMMAND_DURATION
- unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD
}
function testCommandExecutionTimePrecisionCouldBeChanged() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
- POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0
- POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=4
- _P9K_COMMAND_DURATION=0.0001
+ local POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0
+ local POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=4
- assertEquals "%K{009} %F{226%}Dur %f%F{226}0.0001 %k%F{009}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ # Override payload
+ local _P9K_COMMAND_DURATION=0.0001
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset _P9K_COMMAND_DURATION
- unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION
- unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD
+ assertEquals "%K{009} %F{226%}Dur %f%F{226}0.0001 %k%F{009}%f " "$(build_left_prompt)"
}
function testCommandExecutionTimePrecisionCouldBeSetToZero() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
- POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
- _P9K_COMMAND_DURATION=23.5001
+ local POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
- assertEquals "%K{009} %F{226%}Dur %f%F{226}23 %k%F{009}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset _P9K_COMMAND_DURATION
- unset POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION
+ # Override payload
+ local _P9K_COMMAND_DURATION=23.5001
+
+ assertEquals "%K{009} %F{226%}Dur %f%F{226}23 %k%F{009}%f " "$(build_left_prompt)"
}
function testCommandExecutionTimeIsFormattedHumandReadbleForMinuteLongCommand() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
- _P9K_COMMAND_DURATION=180
- assertEquals "%K{009} %F{226%}Dur %f%F{226}03:00 %k%F{009}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ # Override payload
+ local _P9K_COMMAND_DURATION=180
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset _P9K_COMMAND_DURATION
+ assertEquals "%K{009} %F{226%}Dur %f%F{226}03:00 %k%F{009}%f " "$(build_left_prompt)"
}
function testCommandExecutionTimeIsFormattedHumandReadbleForHourLongCommand() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(command_execution_time)
- _P9K_COMMAND_DURATION=7200
- assertEquals "%K{009} %F{226%}Dur %f%F{226}02:00:00 %k%F{009}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset _P9K_COMMAND_DURATION
+ # Override payload
+ local _P9K_COMMAND_DURATION=7200
+
+ assertEquals "%K{009} %F{226%}Dur %f%F{226}02:00:00 %k%F{009}%f " "$(build_left_prompt)"
}
-source shunit2/source/2.1/src/shunit2 \ No newline at end of file
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/context.spec b/test/segments/context.spec
new file mode 100755
index 00000000..23da0f2d
--- /dev/null
+++ b/test/segments/context.spec
@@ -0,0 +1,113 @@
+#!/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"
+
+ # Test specific settings
+ OLD_DEFAULT_USER=$DEFAULT_USER
+ unset DEFAULT_USER
+}
+
+function tearDown() {
+ # Restore old variables
+ [[ -n "$OLD_DEFAULT_USER" ]] && DEFAULT_USER=$OLD_DEFAULT_USER
+
+ return 0
+}
+
+function testContextSegmentDoesNotGetRenderedWithDefaultUser() {
+ local DEFAULT_USER=$(whoami)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context custom_world)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testContextSegmentDoesGetRenderedWhenSshConnectionIsOpen() {
+ function sudo() {
+ return 0
+ }
+ local SSH_CLIENT="putty"
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011}%n@%m %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction sudo
+}
+
+function testContextSegmentWithForeignUser() {
+ function sudo() {
+ return 0
+ }
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011}%n@%m %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction sudo
+}
+
+# TODO: How to test root?
+function testContextSegmentWithRootUser() {
+ startSkipping # Skip test
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011}%n@%m %k%F{000}%f " "$(build_left_prompt)"
+}
+
+function testOverridingContextTemplate() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context)
+ local POWERLEVEL9K_CONTEXT_TEMPLATE=xx
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011}xx %k%F{000}%f " "$(build_left_prompt)"
+}
+
+function testContextSegmentIsShownIfDefaultUserIsSetWhenForced() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context)
+ local POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true
+ local DEFAULT_USER=$(whoami)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011}%n@%m %k%F{000}%f " "$(build_left_prompt)"
+}
+
+function testContextSegmentIsShownIfForced() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context)
+ local POWERLEVEL9K_ALWAYS_SHOW_USER=true
+ local DEFAULT_USER=$(whoami)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011}$(whoami) %k%F{000}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/custom.spec b/test/segments/custom.spec
new file mode 100755
index 00000000..bba878d0
--- /dev/null
+++ b/test/segments/custom.spec
@@ -0,0 +1,86 @@
+#!/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"
+}
+
+function testCustomDirectOutputSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD="echo world"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testCustomClosureSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world)
+ function p9k_hello_world() {
+ echo "world"
+ }
+ local POWERLEVEL9K_CUSTOM_WORLD='p9k_hello_world'
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testSettingBackgroundForCustomSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD="echo world"
+ local POWERLEVEL9K_CUSTOM_WORLD_BACKGROUND="yellow"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{000}world %k%F{011}%f " "$(build_left_prompt)"
+}
+
+function testSettingForegroundForCustomSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD="echo world"
+ local POWERLEVEL9K_CUSTOM_WORLD_FOREGROUND="red"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{009}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testSettingVisualIdentifierForCustomSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD="echo world"
+ local POWERLEVEL9K_CUSTOM_WORLD_ICON="hw"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000%}hw %f%F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testSettingVisualIdentifierForegroundColorForCustomSegment() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD="echo world"
+ local POWERLEVEL9K_CUSTOM_WORLD_ICON="hw"
+ local POWERLEVEL9K_CUSTOM_WORLD_VISUAL_IDENTIFIER_COLOR="red"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{red%}hw %f%F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/detect_virt.spec b/test/segments/detect_virt.spec
new file mode 100755
index 00000000..e0ca80e7
--- /dev/null
+++ b/test/segments/detect_virt.spec
@@ -0,0 +1,83 @@
+#!/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
+}
+
+function testDetectVirtSegmentPrintsNothingIfSystemdIsNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(detect_virt custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias systemd-detect-virt="novirt"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias systemd-detect-virt
+}
+
+function testDetectVirtSegmentIfSystemdReturnsPlainName() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(detect_virt)
+ alias systemd-detect-virt="echo 'xxx'"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011}xxx %k%F{000}%f " "$(build_left_prompt)"
+
+ unalias systemd-detect-virt
+}
+
+function testDetectVirtSegmentIfRootFsIsOnExpectedInode() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(detect_virt)
+ # Well. This is a weak test, as it fixates the implementation,
+ # but it is necessary, as the implementation relys on the root
+ # directory having the inode number "2"..
+ alias systemd-detect-virt="echo 'none'"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ # The original command in the implementation is "ls -di / | grep -o 2",
+ # which translates to: Show the inode number of "/" and test if it is "2".
+ alias ls="echo '2'"
+
+ assertEquals "%K{000} %F{011}none %k%F{000}%f " "$(build_left_prompt)"
+
+ unalias ls
+ unalias systemd-detect-virt
+}
+
+function testDetectVirtSegmentIfRootFsIsNotOnExpectedInode() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(detect_virt)
+ # Well. This is a weak test, as it fixates the implementation,
+ # but it is necessary, as the implementation relys on the root
+ # directory having the inode number "2"..
+ alias systemd-detect-virt="echo 'none'"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ # The original command in the implementation is "ls -di / | grep -o 2",
+ # which translates to: Show the inode number of "/" and test if it is "2".
+ alias ls="echo '3'"
+
+ assertEquals "%K{000} %F{011}chroot %k%F{000}%f " "$(build_left_prompt)"
+
+ unalias ls
+ unalias systemd-detect-virt
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/dir.spec b/test/segments/dir.spec
index c16e32fc..976e80ef 100755
--- a/test/segments/dir.spec
+++ b/test/segments/dir.spec
@@ -7,32 +7,46 @@ SHUNIT_PARENT=$0
function setUp() {
export TERM="xterm-256color"
- # Load Powerlevel9k
- source powerlevel9k.zsh-theme
- # Every test should at least use the dir segment
- POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ P9K_HOME="${PWD}"
}
function tearDown() {
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ unset P9K_HOME
}
function testDirPathAbsoluteWorks() {
- POWERLEVEL9K_DIR_PATH_ABSOLUTE=true
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_ABSOLUTE=true
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
cd ~
- assertEquals "%K{012} %F{000}/home/travis %k%F{012}%f " "$(build_left_prompt)"
+
+ # Unfortunately, we cannot fake Linux or OSX here, because
+ # of /home or /Users path.. That is why we change the test
+ # according to the OS of the host.
+ if [[ "${OS}" == 'Linux' ]]; then
+ assertEquals "%K{012} %F{000}/home/${USER} %k%F{012}%f " "$(build_left_prompt)"
+ elif [[ "${OS}" == 'OSX' ]]; then
+ assertEquals "%K{012} %F{000}/Users/${USER} %k%F{012}%f " "$(build_left_prompt)"
+ fi
cd -
- unset POWERLEVEL9K_DIR_PATH_ABSOLUTE
}
function testTruncateFoldersWorks() {
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_folders'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_folders'
- FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
mkdir -p $FOLDER
cd $FOLDER
@@ -40,18 +54,19 @@ function testTruncateFoldersWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
-
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testTruncateFolderWithHomeDirWorks() {
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
- CURRENT_DIR=$(pwd)
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
+ local CURRENT_DIR=$(pwd)
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
cd ~
- FOLDER="powerlevel9k-test-${RANDOM}"
+ local FOLDER="powerlevel9k-test-${RANDOM}"
mkdir -p $FOLDER
cd $FOLDER
# Switch back to home folder as this causes the problem.
@@ -61,17 +76,18 @@ function testTruncateFolderWithHomeDirWorks() {
rmdir $FOLDER
cd ${CURRENT_DIR}
-
- unset CURRENT_DIR
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
}
function testTruncateMiddleWorks() {
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_middle'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_middle'
- FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
mkdir -p $FOLDER
cd $FOLDER
@@ -79,17 +95,18 @@ function testTruncateMiddleWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
-
- unset FOLDER
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testTruncationFromRightWorks() {
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right'
- FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
mkdir -p $FOLDER
cd $FOLDER
@@ -97,17 +114,18 @@ function testTruncationFromRightWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
-
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testTruncateToLastWorks() {
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY="truncate_to_last"
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_to_last"
- FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
mkdir -p $FOLDER
cd $FOLDER
@@ -115,17 +133,18 @@ function testTruncateToLastWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
-
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testTruncateToFirstAndLastWorks() {
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY="truncate_to_first_and_last"
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_to_first_and_last"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
- FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
mkdir -p $FOLDER
cd $FOLDER
@@ -133,17 +152,18 @@ function testTruncateToFirstAndLastWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
-
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testTruncateAbsoluteWorks() {
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY="truncate_absolute"
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_absolute"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
- FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
mkdir -p $FOLDER
cd $FOLDER
@@ -151,18 +171,19 @@ function testTruncateAbsoluteWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
-
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testTruncationFromRightWithEmptyDelimiter() {
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_DELIMITER=""
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_DELIMITER=""
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
- FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
+ local FOLDER=/tmp/powerlevel9k-test/1/12/123/1234/12345/123456/1234567/12345678/123456789
mkdir -p $FOLDER
cd $FOLDER
@@ -170,16 +191,15 @@ function testTruncationFromRightWithEmptyDelimiter() {
cd -
rm -fr /tmp/powerlevel9k-test
-
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_DELIMITER
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testTruncateWithFolderMarkerWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_folder_marker"
+ local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_folder_marker"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
local BASEFOLDER=/tmp/powerlevel9k-test
local FOLDER=$BASEFOLDER/1/12/123/1234/12345/123456/1234567
@@ -191,16 +211,16 @@ function testTruncateWithFolderMarkerWorks() {
cd -
rm -fr $BASEFOLDER
- unset BASEFOLDER
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_STRATEGY
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
}
function testTruncateWithFolderMarkerWithChangedFolderMarker() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_folder_marker"
- POWERLEVEL9K_SHORTEN_FOLDER_MARKER='.xxx'
+ local POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_folder_marker"
+ local POWERLEVEL9K_SHORTEN_FOLDER_MARKER='.xxx'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
local BASEFOLDER=/tmp/powerlevel9k-test
local FOLDER=$BASEFOLDER/1/12/123/1234/12345/123456/1234567
@@ -212,11 +232,6 @@ function testTruncateWithFolderMarkerWithChangedFolderMarker() {
cd -
rm -fr $BASEFOLDER
- unset BASEFOLDER
- unset FOLDER
- unset POWERLEVEL9K_SHORTEN_FOLDER_MARKER
- unset POWERLEVEL9K_SHORTEN_STRATEGY
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
}
function testTruncateWithPackageNameWorks() {
@@ -237,18 +252,19 @@ function testTruncateWithPackageNameWorks() {
# Go back to deeper folder
cd "${FOLDER}"
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
assertEquals "%K{012} %F{000}My_Package/1/12/123/12…/12…/12…/12…/12…/123456789 %k%F{012}%f " "$(build_left_prompt)"
# Go back
cd $p9kFolder
rm -fr $BASEFOLDER
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_SHORTEN_STRATEGY
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
}
function testTruncateWithPackageNameIfRepoIsSymlinkedInsideDeepFolder() {
@@ -276,18 +292,19 @@ function testTruncateWithPackageNameIfRepoIsSymlinkedInsideDeepFolder() {
# Go to deep folder inside linked repo
cd linked-repo/asdfasdf/qwerqwer
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
assertEquals "%K{012} %F{000}My_Package/as…/qwerqwer %k%F{012}%f " "$(build_left_prompt)"
# Go back
cd $p9kFolder
rm -fr $BASEFOLDER
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_SHORTEN_STRATEGY
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
}
function testTruncateWithPackageNameIfRepoIsSymlinkedInsideGitDir() {
@@ -311,60 +328,77 @@ function testTruncateWithPackageNameIfRepoIsSymlinkedInsideGitDir() {
cd linked-repo/.git/refs/heads
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_with_package_name'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
assertEquals "%K{012} %F{000}My_Package/.g…/re…/heads %k%F{012}%f " "$(build_left_prompt)"
# Go back
cd $p9kFolder
rm -fr $BASEFOLDER
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_SHORTEN_STRATEGY
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
}
function testHomeFolderDetectionWorks() {
- POWERLEVEL9K_HOME_ICON='home-icon'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_HOME_ICON='home-icon'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
cd ~
assertEquals "%K{012} %F{000%}home-icon %f%F{000}~ %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset POWERLEVEL9K_HOME_ICON
}
function testHomeSubfolderDetectionWorks() {
- POWERLEVEL9K_HOME_SUB_ICON='sub-icon'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_HOME_SUB_ICON='sub-icon'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
- FOLDER=~/powerlevel9k-test
+ local FOLDER=~/powerlevel9k-test
mkdir $FOLDER
cd $FOLDER
assertEquals "%K{012} %F{000%}sub-icon %f%F{000}~/powerlevel9k-test %k%F{012}%f " "$(build_left_prompt)"
cd -
rm -fr $FOLDER
- unset FOLDER
- unset POWERLEVEL9K_HOME_SUB_ICON
}
function testOtherFolderDetectionWorks() {
- POWERLEVEL9K_FOLDER_ICON='folder-icon'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_FOLDER_ICON='folder-icon'
- FOLDER=/tmp/powerlevel9k-test
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ local FOLDER=/tmp/powerlevel9k-test
mkdir $FOLDER
cd $FOLDER
assertEquals "%K{012} %F{000%}folder-icon %f%F{000}/tmp/powerlevel9k-test %k%F{012}%f " "$(build_left_prompt)"
cd -
rm -fr $FOLDER
- unset FOLDER
- unset POWERLEVEL9K_FOLDER_ICON
}
function testChangingDirPathSeparator() {
- POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
local FOLDER="/tmp/powerlevel9k-test/1/2"
mkdir -p $FOLDER
cd $FOLDER
@@ -372,52 +406,77 @@ function testChangingDirPathSeparator() {
assertEquals "%K{012} %F{000}xXxtmpxXxpowerlevel9k-testxXx1xXx2 %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset FOLDER
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_SEPARATOR
}
function testHomeFolderAbbreviation() {
- local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
local dir=$PWD
cd ~/
# default
- POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='~'
+ local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='~'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
assertEquals "%K{012} %F{000}~ %k%F{012}%f " "$(build_left_prompt)"
# substituted
- POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='qQq'
+ local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='qQq'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
assertEquals "%K{012} %F{000}qQq %k%F{012}%f " "$(build_left_prompt)"
cd /tmp
# default
- POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='~'
+ local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='~'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
assertEquals "%K{012} %F{000}/tmp %k%F{012}%f " "$(build_left_prompt)"
# substituted
- POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='qQq'
+ local POWERLEVEL9K_HOME_FOLDER_ABBREVIATION='qQq'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
assertEquals "%K{012} %F{000}/tmp %k%F{012}%f " "$(build_left_prompt)"
cd "$dir"
}
function testOmittingFirstCharacterWorks() {
- POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
- POWERLEVEL9K_FOLDER_ICON='folder-icon'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
+ local POWERLEVEL9K_FOLDER_ICON='folder-icon'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
cd /tmp
assertEquals "%K{012} %F{000%}folder-icon %f%F{000}tmp %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset POWERLEVEL9K_FOLDER_ICON
- unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER
}
function testOmittingFirstCharacterWorksWithChangingPathSeparator() {
- POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
- POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
- POWERLEVEL9K_FOLDER_ICON='folder-icon'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
+ local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
+ local POWERLEVEL9K_FOLDER_ICON='folder-icon'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p /tmp/powerlevel9k-test/1/2
cd /tmp/powerlevel9k-test/1/2
@@ -425,9 +484,6 @@ function testOmittingFirstCharacterWorksWithChangingPathSeparator() {
cd -
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_FOLDER_ICON
- unset POWERLEVEL9K_DIR_PATH_SEPARATOR
- unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER
}
# This test makes it obvious that combining a truncation strategy
@@ -438,10 +494,16 @@ function testOmittingFirstCharacterWorksWithChangingPathSeparator() {
# But it does more sense in combination with other truncation
# strategies.
function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndDefaultTruncation() {
- POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
- POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_folders'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
+ local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_folders'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p /tmp/powerlevel9k-test/1/2
cd /tmp/powerlevel9k-test/1/2
@@ -449,17 +511,19 @@ function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndDefaultTrunc
cd -
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_SEPARATOR
- unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndMiddleTruncation() {
- POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
- POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_middle'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
+ local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_middle'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p /tmp/powerlevel9k-test/1/2
cd /tmp/powerlevel9k-test/1/2
@@ -467,17 +531,19 @@ function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndMiddleTrunca
cd -
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_SEPARATOR
- unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndRightTruncation() {
- POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
- POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
+ local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p /tmp/powerlevel9k-test/1/2
cd /tmp/powerlevel9k-test/1/2
@@ -485,17 +551,19 @@ function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndRightTruncat
cd -
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_SEPARATOR
- unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testTruncateToUniqueWorks() {
- POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
- POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
- POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
- POWERLEVEL9K_SHORTEN_STRATEGY='truncate_to_unique'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
+ local POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
+ local POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
+ local POWERLEVEL9K_SHORTEN_STRATEGY='truncate_to_unique'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p /tmp/powerlevel9k-test/adam/devl
mkdir -p /tmp/powerlevel9k-test/alice/devl
mkdir -p /tmp/powerlevel9k-test/alice/docs
@@ -506,24 +574,31 @@ function testTruncateToUniqueWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_SEPARATOR
- unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER
- unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
- unset POWERLEVEL9K_SHORTEN_STRATEGY
}
function testBoldHomeDirWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
cd ~
assertEquals "%K{012} %F{000}%B~%b %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD
}
function testBoldHomeSubdirWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p ~/powerlevel9k-test
cd ~/powerlevel9k-test
@@ -531,31 +606,46 @@ function testBoldHomeSubdirWorks() {
cd -
rm -fr ~/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD
}
function testBoldRootDirWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
cd /
assertEquals "%K{012} %F{000}%B/%b %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD
}
function testBoldRootSubdirWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
cd /tmp
assertEquals "%K{012} %F{000}/%Btmp%b %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD
}
function testBoldRootSubSubdirWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD=true
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p /tmp/powerlevel9k-test
cd /tmp/powerlevel9k-test
@@ -563,21 +653,31 @@ function testBoldRootSubSubdirWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_BOLD
}
function testHighlightHomeWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
cd ~
assertEquals "%K{012} %F{000}%F{red}~ %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND
}
function testHighlightHomeSubdirWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p ~/powerlevel9k-test
cd ~/powerlevel9k-test
@@ -585,31 +685,46 @@ function testHighlightHomeSubdirWorks() {
cd -
rm -fr ~/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND
}
function testHighlightRootWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
cd /
assertEquals "%K{012} %F{000}%F{red}/ %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND
}
function testHighlightRootSubdirWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
cd /tmp
assertEquals "%K{012} %F{000}/%F{red}tmp %k%F{012}%f " "$(build_left_prompt)"
cd -
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND
}
function testHighlightRootSubSubdirWorks() {
- POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND='red'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir /tmp/powerlevel9k-test
cd /tmp/powerlevel9k-test
@@ -617,11 +732,16 @@ function testHighlightRootSubSubdirWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_HIGHLIGHT_FOREGROUND
}
function testDirSeparatorColorHomeSubdirWorks() {
- POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND='red'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND='red'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p ~/powerlevel9k-test
cd ~/powerlevel9k-test
@@ -629,11 +749,16 @@ function testDirSeparatorColorHomeSubdirWorks() {
cd -
rm -fr ~/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND
}
function testDirSeparatorColorRootSubSubdirWorks() {
- POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND='red'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir)
+ local POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND='red'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
mkdir -p /tmp/powerlevel9k-test
cd /tmp/powerlevel9k-test
@@ -641,7 +766,6 @@ function testDirSeparatorColorRootSubSubdirWorks() {
cd -
rm -fr /tmp/powerlevel9k-test
- unset POWERLEVEL9K_DIR_PATH_SEPARATOR_FOREGROUND
}
-source shunit2/source/2.1/src/shunit2
+source shunit2/shunit2
diff --git a/test/segments/disk_usage.spec b/test/segments/disk_usage.spec
new file mode 100755
index 00000000..663dcfdb
--- /dev/null
+++ b/test/segments/disk_usage.spec
@@ -0,0 +1,131 @@
+#!/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"
+
+ # Test specific
+ P9K_HOME=$(pwd)
+ FOLDER=/tmp/powerlevel9k-test
+ mkdir -p $FOLDER
+ cd $FOLDER
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+ unset FOLDER
+ unset P9K_HOME
+
+ # Remove IP cache file
+ rm -f ${POWERLEVEL9K_PUBLIC_IP_FILE}
+}
+
+function testDiskUsageSegmentWhenDiskIsAlmostFull() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage)
+ df() {
+ echo "Filesystem 1K-blocks Used Available Use% Mounted on
+/dev/disk1 487219288 471466944 15496344 97% /"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{009} %F{015%}hdd %f%F{015}97%% %k%F{009}%f " "$(build_left_prompt)"
+
+ unfunction df
+}
+
+function testDiskUsageSegmentWhenDiskIsVeryFull() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage)
+ df() {
+ echo "Filesystem 1K-blocks Used Available Use% Mounted on
+/dev/disk1 487219288 471466944 15496344 94% /"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{000%}hdd %f%F{000}94%% %k%F{011}%f " "$(build_left_prompt)"
+
+ unfunction df
+}
+
+function testDiskUsageSegmentWhenDiskIsQuiteEmpty() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage)
+ df() {
+ echo "Filesystem 1K-blocks Used Available Use% Mounted on
+/dev/disk1 487219288 471466944 15496344 4% /"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011%}hdd %f%F{011}4%% %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction df
+}
+
+function testDiskUsageSegmentPrintsNothingIfDiskIsQuiteEmptyAndOnlyWarningsShouldBeDisplayed() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage custom_world)
+ df() {
+ echo "Filesystem 1K-blocks Used Available Use% Mounted on
+/dev/disk1 487219288 471466944 15496344 4% /"
+ }
+
+ local POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=true
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unfunction df
+}
+
+function testDiskUsageSegmentWarningLevelCouldBeAdjusted() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage)
+ local POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=10
+ df() {
+ echo "Filesystem 1K-blocks Used Available Use% Mounted on
+/dev/disk1 487219288 471466944 15496344 11% /"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{000%}hdd %f%F{000}11%% %k%F{011}%f " "$(build_left_prompt)"
+
+ unfunction df
+}
+
+function testDiskUsageSegmentCriticalLevelCouldBeAdjusted() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(disk_usage)
+ local POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=5
+ local POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=10
+ df() {
+ echo "Filesystem 1K-blocks Used Available Use% Mounted on
+/dev/disk1 487219288 471466944 15496344 11% /"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{009} %F{015%}hdd %f%F{015}11%% %k%F{009}%f " "$(build_left_prompt)"
+
+ unfunction df
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/go_version.spec b/test/segments/go_version.spec
index 30b157a5..148de4ca 100755
--- a/test/segments/go_version.spec
+++ b/test/segments/go_version.spec
@@ -7,8 +7,6 @@ SHUNIT_PARENT=$0
function setUp() {
export TERM="xterm-256color"
- # Load Powerlevel9k
- source powerlevel9k.zsh-theme
}
function mockGo() {
@@ -35,52 +33,56 @@ function mockGoEmptyGopath() {
function testGo() {
alias go=mockGo
- POWERLEVEL9K_GO_ICON=""
+ local POWERLEVEL9K_GO_ICON=""
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(go_version)
- PWD="$HOME/go/src/github.com/bhilburn/powerlevel9k"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ local PWD="$HOME/go/src/github.com/bhilburn/powerlevel9k"
assertEquals "%K{002} %F{255%} %f%F{255}go1.5.3 %k%F{002}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_GO_ICON
- unset PWD
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
unalias go
}
function testGoSegmentPrintsNothingIfEmptyGopath() {
- alias go=mockGoEmptyGopath
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world go_version)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias go=mockGoEmptyGopath
- assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
-
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_CUSTOM_WORLD
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
}
function testGoSegmentPrintsNothingIfNotInGopath() {
- alias go=mockGo
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world go_version)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias go=mockGo
- assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_CUSTOM_WORLD
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
}
function testGoSegmentPrintsNothingIfGoIsNotAvailable() {
- alias go=noGo
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world go_version)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias go=noGo
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_CUSTOM_WORLD
unalias go
}
-source shunit2/source/2.1/src/shunit2
+source shunit2/shunit2
diff --git a/test/segments/ip.spec b/test/segments/ip.spec
new file mode 100755
index 00000000..9144f630
--- /dev/null
+++ b/test/segments/ip.spec
@@ -0,0 +1,231 @@
+#!/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"
+}
+
+function testIpSegmentPrintsNothingOnOsxIfNotConnected() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip custom_world)
+ alias networksetup='echo "not connected"'
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local OS="OSX" # Fake OSX
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias networksetup
+}
+
+function testIpSegmentPrintsNothingOnLinuxIfNotConnected() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip custom_world)
+ alias ip='echo "not connected"'
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local OS="Linux" # Fake Linux
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias ip
+}
+
+function testIpSegmentWorksOnOsxWithNoInterfaceSpecified() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip)
+ alias networksetup="echo 'An asterisk (*) denotes that a network service is disabled.
+(1) Ethernet
+(Hardware Port: Ethernet, Device: en0)
+
+(2) FireWire
+(Hardware Port: FireWire, Device: fw0)
+
+(3) Wi-Fi
+(Hardware Port: Wi-Fi, Device: en1)
+
+(4) Bluetooth PAN
+(Hardware Port: Bluetooth PAN, Device: en3)
+
+(5) Thunderbolt Bridge
+(Hardware Port: Thunderbolt Bridge, Device: bridge0)
+
+(6) Apple USB Ethernet Adapter
+(Hardware Port: Apple USB Ethernet Adapter, Device: en4)
+'"
+
+ alias ipconfig="_(){ echo '1.2.3.4'; };_"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local OS='OSX' # Fake OSX
+
+ assertEquals "%K{014} %F{000%}IP %f%F{000}1.2.3.4 %k%F{014}%f " "$(build_left_prompt)"
+
+ unalias ipconfig
+ unalias networksetup
+}
+
+# There could be more than one confiured network interfaces.
+# `networksetup -listnetworkserviceorder` lists the interfaces
+# in hierarchical order, but from outside this is not obvious
+# (implementation detail). So we need a test for this case.
+function testIpSegmentWorksOnOsxWithMultipleInterfacesSpecified() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip)
+ alias networksetup="echo 'An asterisk (*) denotes that a network service is disabled.
+(1) Ethernet
+(Hardware Port: Ethernet, Device: en0)
+
+(2) FireWire
+(Hardware Port: FireWire, Device: fw0)
+
+(3) Wi-Fi
+(Hardware Port: Wi-Fi, Device: en1)
+
+(4) Bluetooth PAN
+(Hardware Port: Bluetooth PAN, Device: en3)
+
+(5) Thunderbolt Bridge
+(Hardware Port: Thunderbolt Bridge, Device: bridge0)
+
+(6) Apple USB Ethernet Adapter
+(Hardware Port: Apple USB Ethernet Adapter, Device: en4)
+'"
+
+ # Return a unique IP address for every interface
+ ipconfig() {
+ case "${2}" {
+ en0)
+ echo 1.2.3.4
+ ;;
+ fw0)
+ echo 2.3.4.5
+ ;;
+ en1)
+ echo 3.4.5.6
+ ;;
+ en3)
+ echo 4.5.6.7
+ ;;
+ }
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local OS='OSX' # Fake OSX
+
+ assertEquals "%K{014} %F{000%}IP %f%F{000}1.2.3.4 %k%F{014}%f " "$(build_left_prompt)"
+
+ unfunction ipconfig
+ unalias networksetup
+}
+
+function testIpSegmentWorksOnOsxWithInterfaceSpecified() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip)
+ local POWERLEVEL9K_IP_INTERFACE='xxx'
+ alias ipconfig="_(){ echo '1.2.3.4'; };_"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local OS='OSX' # Fake OSX
+
+ assertEquals "%K{014} %F{000%}IP %f%F{000}1.2.3.4 %k%F{014}%f " "$(build_left_prompt)"
+
+ unalias ipconfig
+}
+
+function testIpSegmentWorksOnLinuxWithNoInterfaceSpecified() {
+ setopt aliases
+ local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip)
+ # That command is harder to test, as it is used at first
+ # to get all relevant network interfaces and then for
+ # getting the configuration of that segment..
+ ip(){
+ if [[ "$*" == 'link ls up' ]]; then
+ echo "1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
+ link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
+ link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff";
+ fi
+
+ if [[ "$*" == '-4 a show eth0' ]]; then
+ echo '2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
+ inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
+ valid_lft forever preferred_lft forever';
+ fi
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local OS='Linux' # Fake Linux
+
+ assertEquals "%K{014} %F{000%}IP %f%F{000}10.0.2.15 %k%F{014}%f " "$(build_left_prompt)"
+
+ unfunction ip
+}
+
+function testIpSegmentWorksOnLinuxWithMultipleInterfacesSpecified() {
+ setopt aliases
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip)
+ # That command is harder to test, as it is used at first
+ # to get all relevant network interfaces and then for
+ # getting the configuration of that segment..
+ ip(){
+ if [[ "$*" == 'link ls up' ]]; then
+ echo "1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
+ link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
+ link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff
+3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
+ link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff
+4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
+ link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff";
+ fi
+
+ if [[ "$*" == '-4 a show eth1' ]]; then
+ echo '3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
+ inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
+ valid_lft forever preferred_lft forever';
+ fi
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local OS='Linux' # Fake Linux
+
+ assertEquals "%K{014} %F{000%}IP %f%F{000}10.0.2.15 %k%F{014}%f " "$(build_left_prompt)"
+
+ unfunction ip
+}
+
+function testIpSegmentWorksOnLinuxWithInterfaceSpecified() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip)
+ local POWERLEVEL9K_IP_INTERFACE='xxx'
+ ip(){
+ echo '2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
+inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
+ valid_lft forever preferred_lft forever';
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local OS='Linux' # Fake Linux
+
+ assertEquals "%K{014} %F{000%}IP %f%F{000}10.0.2.15 %k%F{014}%f " "$(build_left_prompt)"
+
+ unfunction ip
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/kubecontext.spec b/test/segments/kubecontext.spec
index 33853a3f..6b08f7fa 100755
--- a/test/segments/kubecontext.spec
+++ b/test/segments/kubecontext.spec
@@ -7,8 +7,6 @@ SHUNIT_PARENT=$0
function setUp() {
export TERM="xterm-256color"
- # Load Powerlevel9k
- source powerlevel9k.zsh-theme
}
function mockKubectl() {
@@ -66,33 +64,41 @@ function mockKubectlOtherNamespace() {
}
function testKubeContext() {
- alias kubectl=mockKubectl
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(kubecontext)
+ alias kubectl=mockKubectl
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
assertEquals "%K{013} %F{015%}⎈ %f%F{015}minikube/default %k%F{013}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
unalias kubectl
}
function testKubeContextOtherNamespace() {
- alias kubectl=mockKubectlOtherNamespace
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(kubecontext)
+ alias kubectl=mockKubectlOtherNamespace
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
assertEquals "%K{013} %F{015%}⎈ %f%F{015}minikube/kube-system %k%F{013}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
unalias kubectl
}
function testKubeContextPrintsNothingIfKubectlNotAvailable() {
- alias kubectl=noKubectl
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world kubecontext)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias kubectl=noKubectl
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_CUSTOM_WORLD
unalias kubectl
}
-source shunit2/source/2.1/src/shunit2
+source shunit2/shunit2
diff --git a/test/segments/laravel_version.spec b/test/segments/laravel_version.spec
index ffc11786..48fd83e4 100755
--- a/test/segments/laravel_version.spec
+++ b/test/segments/laravel_version.spec
@@ -7,63 +7,66 @@ SHUNIT_PARENT=$0
function setUp() {
export TERM="xterm-256color"
- # Load Powerlevel9k
- source powerlevel9k.zsh-theme
}
function mockLaravelVersion() {
case "$1" in
"artisan")
- echo "Laravel Framework version 5.4.23"
+ # artisan --version follows the format Laravel Framework <version>
+ echo "Laravel Framework 5.4.23"
;;
default)
esac
}
function mockNoLaravelVersion() {
- # This should output some error
- >&2 echo "Artisan not available"
- return 1
+ # When php can't find a file it will output a message
+ echo "Could not open input file: artisan"
+ return 0
}
function testLaravelVersionSegment() {
- alias php=mockLaravelVersion
- POWERLEVEL9K_LARAVEL_ICON='x'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(laravel_version)
+ local POWERLEVEL9K_LARAVEL_ICON='x'
+ alias php=mockLaravelVersion
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
assertEquals "%K{001} %F{015%}x %f%F{015}5.4.23 %k%F{001}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_LARAVEL_ICON
unalias php
}
function testLaravelVersionSegmentIfArtisanIsNotAvailable() {
- alias php=mockNoLaravelVersion
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
- POWERLEVEL9K_LARAVEL_ICON='x'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world laravel_version)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local POWERLEVEL9K_LARAVEL_ICON='x'
+ alias php=mockNoLaravelVersion
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_LARAVEL_ICON
- unset POWERLEVEL9K_CUSTOM_WORLD
unalias php
}
function testLaravelVersionSegmentPrintsNothingIfPhpIsNotAvailable() {
- alias php=noPhp
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
- POWERLEVEL9K_LARAVEL_ICON='x'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world laravel_version)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local POWERLEVEL9K_LARAVEL_ICON='x'
+ alias php=noPhp
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_LARAVEL_ICON
- unset POWERLEVEL9K_CUSTOM_WORLD
unalias php
}
-source shunit2/source/2.1/src/shunit2
+source shunit2/shunit2
diff --git a/test/segments/load.spec b/test/segments/load.spec
new file mode 100755
index 00000000..e6364aaf
--- /dev/null
+++ b/test/segments/load.spec
@@ -0,0 +1,149 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and git init it.
+ FOLDER=/tmp/powerlevel9k-test/load-test
+ mkdir -p "${FOLDER}"
+ cd $FOLDER
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+}
+
+function testLoadSegmentWorksOnOsx() {
+ sysctl() {
+ if [[ "$*" == 'vm.loadavg' ]]; then
+ echo "vm.loadavg: { 1,38 1,45 2,16 }";
+ fi
+
+ if [[ "$*" == '-n hw.logicalcpu' ]]; then
+ echo "4";
+ fi
+ }
+
+ local POWERLEVEL9K_LOAD_WHICH=1
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="OSX" # Fake OSX
+
+ assertEquals "%K{002} %F{000%}L %f%F{000}1.38 " "$(prompt_load left 1 false ${FOLDER})"
+
+ unfunction sysctl
+}
+
+function testLoadSegmentWorksOnBsd() {
+ sysctl() {
+ if [[ "$*" == 'vm.loadavg' ]]; then
+ echo "vm.loadavg: { 1,38 1,45 2,16 }";
+ fi
+
+ if [[ "$*" == '-n hw.ncpu' ]]; then
+ echo "4";
+ fi
+ }
+
+ local POWERLEVEL9K_LOAD_WHICH=1
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="BSD" # Fake BSD
+
+ assertEquals "%K{002} %F{000%}L %f%F{000}1.38 " "$(prompt_load left 1 false ${FOLDER})"
+
+ unfunction sysctl
+}
+
+function testLoadSegmentWorksOnLinux() {
+ # Prepare loadavg
+ mkdir proc
+ echo "1.38 0.01 0.05 1/87 8641" > proc/loadavg
+
+ alias nproc="echo 4"
+ local POWERLEVEL9K_LOAD_WHICH=1
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="Linux" # Fake Linux
+
+ assertEquals "%K{002} %F{000%}L %f%F{000}1.38 " "$(prompt_load left 1 false ${FOLDER})"
+
+ unalias nproc
+}
+
+# Test normal state. This test is not OS specific.
+# We test it as the Linux version, but that
+# does not matter here.
+function testLoadSegmentNormalState() {
+ # Prepare loadavg
+ mkdir proc
+ echo "1.00 0.01 0.05 1/87 8641" > proc/loadavg
+
+ alias nproc="echo 4"
+ local POWERLEVEL9K_LOAD_WHICH=1
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="Linux" # Fake Linux
+
+ assertEquals "%K{002} %F{000%}L %f%F{000}1.00 " "$(prompt_load left 1 false ${FOLDER})"
+
+ unalias nproc
+}
+
+# Test warning state. This test is not OS specific.
+# We test it as the Linux version, but that
+# does not matter here.
+function testLoadSegmentWarningState() {
+ # Prepare loadavg
+ mkdir proc
+ echo "2.01 0.01 0.05 1/87 8641" > proc/loadavg
+
+ alias nproc="echo 4"
+ local POWERLEVEL9K_LOAD_WHICH=1
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="Linux" # Fake Linux
+
+ assertEquals "%K{011} %F{000%}L %f%F{000}2.01 " "$(prompt_load left 1 false ${FOLDER})"
+
+ unalias nproc
+}
+
+# Test critical state. This test is not OS specific.
+# We test it as the Linux version, but that
+# does not matter here.
+function testLoadSegmentCriticalState() {
+ # Prepare loadavg
+ mkdir proc
+ echo "2.81 0.01 0.05 1/87 8641" > proc/loadavg
+
+ alias nproc="echo 4"
+ local POWERLEVEL9K_LOAD_WHICH=1
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="Linux" # Fake Linux
+
+ assertEquals "%K{009} %F{000%}L %f%F{000}2.81 " "$(prompt_load left 1 false ${FOLDER})"
+
+ unalias nproc
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/node_version.spec b/test/segments/node_version.spec
new file mode 100755
index 00000000..10fb6609
--- /dev/null
+++ b/test/segments/node_version.spec
@@ -0,0 +1,41 @@
+#!/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"
+}
+
+function testNodeVersionSegmentPrintsNothingWithoutNode() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(node_version custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias node="nonode 2>/dev/null"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias node
+}
+
+function testNodeVersionSegmentWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(node_version)
+ node() {
+ echo "v1.2.3"
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{015%}⬢ %f%F{015}1.2.3 %k%F{002}%f " "$(build_left_prompt)"
+
+ unfunction node
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/nodeenv.spec b/test/segments/nodeenv.spec
new file mode 100755
index 00000000..76f518b5
--- /dev/null
+++ b/test/segments/nodeenv.spec
@@ -0,0 +1,99 @@
+#!/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"
+
+ # Test specfic
+ # unset all possible user specified variables
+ unset NODE_VIRTUAL_ENV_DISABLE_PROMPT
+ unset NODE_VIRTUAL_ENV
+}
+
+function testNodeenvSegmentPrintsNothingWithoutNode() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias node="nonode 2>/dev/null"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias node
+}
+
+function testNodeenvSegmentPrintsNothingIfNodeVirtualEnvIsNotSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ node() {
+ echo "v1.2.3"
+ }
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unfunction node
+}
+
+function testNodeenvSegmentPrintsNothingIfNodeVirtualEnvDisablePromptIsSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ node() {
+ echo "v1.2.3"
+ }
+ NODE_VIRTUAL_ENV="node-env"
+ NODE_VIRTUAL_ENV_DISABLE_PROMPT=true
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unset NODE_VIRTUAL_ENV_DISABLE_PROMPT
+ unset NODE_VIRTUAL_ENV
+ unfunction node
+}
+
+function testNodeenvSegmentPrintsAtLeastNodeEnvWithoutNode() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv)
+ alias node="nonode 2>/dev/null"
+ NODE_VIRTUAL_ENV="node-env"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{002%}⬢ %f%F{002}[node-env] %k%F{000}%f " "$(build_left_prompt)"
+
+ unset NODE_VIRTUAL_ENV
+ unalias node
+}
+
+function testNodeenvSegmentWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nodeenv)
+ node() {
+ echo "v1.2.3"
+ }
+ NODE_VIRTUAL_ENV="node-env"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{002%}⬢ %f%F{002}v1.2.3[node-env] %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction node
+ unset NODE_VIRTUAL_ENV
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/nvm.spec b/test/segments/nvm.spec
new file mode 100755
index 00000000..0af18847
--- /dev/null
+++ b/test/segments/nvm.spec
@@ -0,0 +1,72 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and git init it.
+ FOLDER=/tmp/powerlevel9k-test/nvm-test
+ mkdir -p "${FOLDER}/bin"
+ OLD_PATH=$PATH
+ PATH=${FOLDER}/bin:$PATH
+ cd $FOLDER
+}
+
+function tearDown() {
+ # Restore old path
+ PATH="${OLD_PATH}"
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+}
+
+function testNvmSegmentPrintsNothingIfNvmIsNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nvm custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testNvmSegmentWorksWithoutHavingADefaultAlias() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nvm)
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ function nvm_version() {
+ [[ ${1} == 'current' ]] && echo 'v4.6.0' || echo 'v1.4.0'
+ }
+
+ assertEquals "%K{013} %F{000%}⬢ %f%F{000}4.6.0 %k%F{013}%f " "$(build_left_prompt)"
+}
+
+function testNvmSegmentPrintsNothingWhenOnDefaultVersion() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(nvm custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ function nvm_version() {
+ [[ ${1} == 'current' ]] && echo 'v4.6.0' || echo 'v4.6.0'
+ }
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/php_version.spec b/test/segments/php_version.spec
new file mode 100755
index 00000000..55f5bf71
--- /dev/null
+++ b/test/segments/php_version.spec
@@ -0,0 +1,42 @@
+#!/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"
+}
+
+function testPhpVersionSegmentPrintsNothingIfPhpIsNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(php_version custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias php="nophp"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias php
+}
+
+function testPhpVersionSegmentWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(php_version)
+ alias php="echo 'PHP 5.6.27 (cli) (built: Oct 23 2016 11:47:58)
+Copyright (c) 1997-2016 The PHP Group
+Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
+'"
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{013} %F{255}PHP 5.6.27 %k%F{013}%f " "$(build_left_prompt)"
+
+ unalias php
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/public_ip.spec b/test/segments/public_ip.spec
new file mode 100755
index 00000000..80c46ac5
--- /dev/null
+++ b/test/segments/public_ip.spec
@@ -0,0 +1,222 @@
+#!/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"
+
+ # Test specific
+ P9K_HOME=$(pwd)
+ FOLDER=/tmp/powerlevel9k-test
+ mkdir -p $FOLDER
+ cd $FOLDER
+
+ # Change cache file, so that the users environment don't
+ # interfere with the tests.
+ POWERLEVEL9K_PUBLIC_IP_FILE=$FOLDER/public_ip_file
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+ unset FOLDER
+ unset P9K_HOME
+
+ # Unset cache file
+ unset POWERLEVEL9K_PUBLIC_IP_FILE
+}
+
+function testPublicIpSegmentPrintsNothingByDefaultIfHostIsNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip custom_world)
+ local POWERLEVEL9K_PUBLIC_IP_HOST='http://unknown.xyz'
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ # We need to overwrite dig, as this is a fallback method that
+ # uses an alternative host.
+ alias dig='nodig'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias dig
+}
+
+function testPublicIpSegmentPrintsNoticeIfNotConnected() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip)
+ local POWERLEVEL9K_PUBLIC_IP_HOST='http://unknown.xyz'
+ local POWERLEVEL9K_PUBLIC_IP_NONE="disconnected"
+ # We need to overwrite dig, as this is a fallback method that
+ # uses an alternative host.
+ alias dig='nodig'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}disconnected %k%F{000}%f " "$(build_left_prompt)"
+
+ unalias dig
+}
+
+function testPublicIpSegmentWorksWithWget() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip)
+ alias dig='nodig'
+ alias curl='nocurl'
+ wget() {
+ echo "wget 1.2.3.4"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}wget 1.2.3.4 %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction wget
+ unalias dig
+ unalias curl
+}
+
+function testPublicIpSegmentUsesCurlAsFallbackMethodIfWgetIsNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip)
+ alias dig='nodig'
+ alias wget='nowget'
+ curl() {
+ echo "curl 1.2.3.4"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}curl 1.2.3.4 %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction curl
+ unalias dig
+ unalias wget
+}
+
+function testPublicIpSegmentUsesDigAsFallbackMethodIfWgetAndCurlAreNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip)
+ alias curl='nocurl'
+ alias wget='nowget'
+ dig() {
+ echo "dig 1.2.3.4"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}dig 1.2.3.4 %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction dig
+ unalias curl
+ unalias wget
+}
+
+function testPublicIpSegmentCachesFile() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip)
+ dig() {
+ echo "first"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}first %k%F{000}%f " "$(build_left_prompt)"
+
+ dig() {
+ echo "second"
+ }
+
+ # Segment should not have changed!
+ assertEquals "%K{000} %F{015}first %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction dig
+}
+
+function testPublicIpSegmentRefreshesCachesFileAfterTimeout() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip)
+ local POWERLEVEL9K_PUBLIC_IP_TIMEOUT=2
+ dig() {
+ echo "first"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}first %k%F{000}%f " "$(build_left_prompt)"
+
+ sleep 3
+ dig() {
+ echo "second"
+ }
+
+ # Segment should not have changed!
+ assertEquals "%K{000} %F{015}second %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction dig
+}
+
+function testPublicIpSegmentRefreshesCachesFileIfEmpty() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip)
+ dig() {
+ echo "first"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}first %k%F{000}%f " "$(build_left_prompt)"
+
+ # Truncate cache file
+ echo "" >! $POWERLEVEL9K_PUBLIC_IP_FILE
+
+ dig() {
+ echo "second"
+ }
+
+ # Segment should not have changed!
+ assertEquals "%K{000} %F{015}second %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction dig
+}
+
+function testPublicIpSegmentWhenGoingOnline() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(public_ip)
+ local POWERLEVEL9K_PUBLIC_IP_METHODS="dig"
+ local POWERLEVEL9K_PUBLIC_IP_NONE="disconnected"
+ alias dig="nodig"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}disconnected %k%F{000}%f " "$(build_left_prompt)"
+
+ unalias dig
+
+ dig() {
+ echo "second"
+ }
+
+ # Segment should not have changed!
+ assertEquals "%K{000} %F{015}second %k%F{000}%f " "$(build_left_prompt)"
+
+ unfunction dig
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/ram.spec b/test/segments/ram.spec
new file mode 100755
index 00000000..1bbd7515
--- /dev/null
+++ b/test/segments/ram.spec
@@ -0,0 +1,66 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and git init it.
+ FOLDER=/tmp/powerlevel9k-test/ram-test
+ mkdir -p "${FOLDER}"
+ cd $FOLDER
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+}
+
+function testRamSegmentWorksOnOsx() {
+ alias vm_stat="echo 'Mach Virtual Memory Statistics: (page size of 4096 bytes)
+Pages free: 299687.
+Pages active: 1623792.
+Pages inactive: 1313411.
+'"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="OSX" # Fake OSX
+
+ assertEquals "%K{011} %F{000%}RAM %f%F{000}6.15G " "$(prompt_ram left 1 false ${FOLDER})"
+
+ unalias vm_stat
+}
+
+function testRamSegmentWorksOnBsd() {
+ mkdir -p var/run
+ echo "avail memory 5678B 299687 4444G 299" > var/run/dmesg.boot
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="BSD" # Fake BSD
+
+ assertEquals "%K{011} %F{000%}RAM %f%F{000}0.29M " "$(prompt_ram left 1 false ${FOLDER})"
+}
+
+function testRamSegmentWorksOnLinux() {
+ mkdir proc
+ echo "MemAvailable: 299687" > proc/meminfo
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="Linux" # Fake Linux
+
+ assertEquals "%K{011} %F{000%}RAM %f%F{000}0.29G " "$(prompt_ram left 1 false ${FOLDER})"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/rust_version.spec b/test/segments/rust_version.spec
index 7031be87..76c34932 100755
--- a/test/segments/rust_version.spec
+++ b/test/segments/rust_version.spec
@@ -14,8 +14,6 @@ function setUp() {
PATH="${RUST_TEST_FOLDER}:${PATH}"
export TERM="xterm-256color"
- # Load Powerlevel9k
- source powerlevel9k.zsh-theme
}
function tearDown() {
@@ -29,22 +27,25 @@ function mockRust() {
}
function testRust() {
- mockRust
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(rust_version)
+ mockRust
- assertEquals "%K{208} %F{000%}Rust %f%F{000}0.4.1a-alpha %k%F{208}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ assertEquals "%K{208} %F{000%}Rust %f%F{000}0.4.1a-alpha %k%F{208}%f " "$(build_left_prompt)"
}
function testRustPrintsNothingIfRustIsNotAvailable() {
- POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_world rust_version)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
- assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_CUSTOM_WORLD
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
}
-source shunit2/source/2.1/src/shunit2
+source shunit2/shunit2
diff --git a/test/segments/ssh.spec b/test/segments/ssh.spec
new file mode 100755
index 00000000..2e1e534d
--- /dev/null
+++ b/test/segments/ssh.spec
@@ -0,0 +1,80 @@
+#!/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"
+}
+
+function testSshSegmentPrintsNothingIfNoSshConnection() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo "world"'
+ local POWERLEVEL9K_SSH_ICON="ssh-icon"
+ # Weak test: Emulate No SSH connection by unsetting
+ # $SSH_CLIENT and $SSH_TTY
+ unset SSH_CLIENT
+ unset SSH_TTY
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testSshSegmentWorksIfOnlySshClientIsSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh)
+ local POWERLEVEL9K_SSH_ICON="ssh-icon"
+ # Weak test: Emulate No SSH connection by unsetting
+ # $SSH_CLIENT and $SSH_TTY
+ SSH_CLIENT='ssh-client'
+ unset SSH_TTY
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011%}ssh-icon%f %k%F{000}%f " "$(build_left_prompt)"
+
+ unset SSH_CLIENT
+}
+
+function testSshSegmentWorksIfOnlySshTtyIsSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh)
+ local POWERLEVEL9K_SSH_ICON="ssh-icon"
+ # Weak test: Emulate No SSH connection by unsetting
+ # $SSH_CLIENT and $SSH_TTY
+ SSH_TTY='ssh-tty'
+ unset SSH_CLIENT
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011%}ssh-icon%f %k%F{000}%f " "$(build_left_prompt)"
+
+ unset SSH_TTY
+}
+
+function testSshSegmentWorksIfAllNecessaryVariablesAreSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh)
+ local POWERLEVEL9K_SSH_ICON="ssh-icon"
+ # Weak test: Emulate No SSH connection by unsetting
+ # $SSH_CLIENT and $SSH_TTY
+ SSH_CLIENT='ssh-client'
+ SSH_TTY='ssh-tty'
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{011%}ssh-icon%f %k%F{000}%f " "$(build_left_prompt)"
+
+ unset SSH_TTY
+ unset SSH_CLIENT
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/status.spec b/test/segments/status.spec
index fc44275e..e9d4fb47 100755
--- a/test/segments/status.spec
+++ b/test/segments/status.spec
@@ -7,8 +7,6 @@ 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
@@ -17,69 +15,99 @@ function setUp() {
}
function testStatusPrintsNothingIfReturnCodeIsZeroAndVerboseIsUnset() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status custom_world)
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
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
}
function testStatusWorksAsExpectedIfReturnCodeIsZeroAndVerboseIsSet() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
local POWERLEVEL9K_STATUS_VERBOSE=true
local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false
local POWERLEVEL9K_STATUS_HIDE_SIGNAME=true
- local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
assertEquals "%K{000} %F{002%}✔%f %k%F{000}%f " "$(build_left_prompt)"
}
function testStatusInGeneralErrorCase() {
- local RETVAL=1
- local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
local POWERLEVEL9K_STATUS_VERBOSE=true
local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local RETVAL=1
+
assertEquals "%K{009} %F{226%}↵ %f%F{226}1 %k%F{009}%f " "$(build_left_prompt)"
}
function testPipestatusInErrorCase() {
- local -a RETVALS
- RETVALS=(0 0 1 0)
- local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
local POWERLEVEL9K_STATUS_VERBOSE=true
local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=true
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local -a RETVALS
+ RETVALS=(0 0 1 0)
+
assertEquals "%K{009} %F{226%}↵ %f%F{226}0|0|1|0 %k%F{009}%f " "$(build_left_prompt)"
}
function testStatusCrossWinsOverVerbose() {
- local RETVAL=1
- local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false
local POWERLEVEL9K_STATUS_VERBOSE=true
local POWERLEVEL9K_STATUS_CROSS=true
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local RETVAL=1
+
assertEquals "%K{000} %F{009%}✘%f %k%F{000}%f " "$(build_left_prompt)"
}
function testStatusShowsSignalNameInErrorCase() {
- local RETVAL=132
- local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
local POWERLEVEL9K_STATUS_SHOW_PIPESTATUS=false
local POWERLEVEL9K_STATUS_VERBOSE=true
local POWERLEVEL9K_STATUS_HIDE_SIGNAME=false
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+ local RETVAL=132
+
assertEquals "%K{009} %F{226%}↵ %f%F{226}SIGILL(4) %k%F{009}%f " "$(build_left_prompt)"
}
function testStatusSegmentIntegrated() {
- local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
- local POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(status)
+ local -a POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
+ POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=()
+ local POWERLEVEL9K_STATUS_CROSS=true
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
false; powerlevel9k_prepare_prompts
assertEquals "%f%b%k%K{000} %F{009%}✘%f %k%F{000}%f " "${(e)PROMPT}"
}
-source shunit2/source/2.1/src/shunit2 \ No newline at end of file
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/swap.spec b/test/segments/swap.spec
new file mode 100755
index 00000000..75fa662d
--- /dev/null
+++ b/test/segments/swap.spec
@@ -0,0 +1,58 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and git init it.
+ FOLDER=/tmp/powerlevel9k-test/swap-test
+ mkdir -p "${FOLDER}"
+ cd $FOLDER
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+}
+
+function testSwapSegmentWorksOnOsx() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(swap)
+ sysctl() {
+ echo "vm.swapusage: total = 3072,00M used = 1620,50M free = 1451,50M (encrypted)"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="OSX" # Fake OSX
+
+ assertEquals "%K{011} %F{000%}SWP %f%F{000}1.58G " "$(prompt_swap left 1 false ${FOLDER})"
+
+ unfunction sysctl
+}
+
+function testSwapSegmentWorksOnLinux() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(swap)
+ mkdir proc
+ echo "SwapTotal: 1000000" > proc/meminfo
+ echo "SwapFree: 1000" >> proc/meminfo
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+ local OS="Linux" # Fake Linux
+
+ assertEquals "%K{011} %F{000%}SWP %f%F{000}0.95G " "$(prompt_swap left 1 false ${FOLDER})"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/swift_version.spec b/test/segments/swift_version.spec
new file mode 100755
index 00000000..87a2d3f0
--- /dev/null
+++ b/test/segments/swift_version.spec
@@ -0,0 +1,57 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and git init it.
+ FOLDER=/tmp/powerlevel9k-test
+ mkdir -p "${FOLDER}"
+ cd $FOLDER
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+}
+
+function testSwiftSegmentPrintsNothingIfSwiftIsNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(swift_version custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias swift="noswift"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias swift
+}
+
+function testSwiftSegmentWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(swift_version)
+ function swift() {
+ echo "Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)\nTarget: x86_64-apple-macosx10.9"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{013} %F{015%}Swift %f%F{015}3.0.1 %k%F{013}%f " "$(build_left_prompt)"
+
+ unfunction swift
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/symfony_version.spec b/test/segments/symfony_version.spec
new file mode 100755
index 00000000..a3e979cb
--- /dev/null
+++ b/test/segments/symfony_version.spec
@@ -0,0 +1,117 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and git init it.
+ FOLDER=/tmp/powerlevel9k-test
+ mkdir -p "${FOLDER}"
+ cd $FOLDER
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+}
+
+function testSymfonyVersionSegmentPrintsNothingIfPhpIsNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ alias php="nophp"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unalias php
+}
+
+function testSymfonyVersionSegmentPrintsNothingIfSymfonyIsNotAvailable() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version custom_world)
+ # "Symfony" is not a command, but rather a framework.
+ # To sucessfully execute this test, we just need to
+ # navigate into a folder that does not contain symfony.
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testSymfonyVersionPrintsNothingIfPhpThrowsAnError() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+ mkdir app
+ touch app/AppKernel.php
+ function php() {
+ echo "Warning: Unsupported declare strict_types in /Users/dr/Privat/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php on line 19
+
+ Parse error: parse error, expecting `;´ or `{´ in /Users/dr/Privat/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php on line 97"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+
+ unfunction php
+}
+
+function testSymfonyVersionSegmentWorks() {
+ startSkipping # Skip test
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version)
+ mkdir app
+ touch app/AppKernel.php
+
+ function php() {
+ echo "Symfony version 3.1.4 - app/dev/debug"
+ }
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{240} %F{000%}SF %f%F{000}3.1.4 %k%F{240}%f " "$(build_left_prompt)"
+
+ unfunction php
+}
+
+function testSymfonyVersionSegmentWorksInNestedFolder() {
+ startSkipping # Skip test
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(symfony2_version)
+ mkdir app
+ touch app/AppKernel.php
+
+ function php() {
+ echo "Symfony version 3.1.4 - app/dev/debug"
+ }
+
+ mkdir -p src/P9K/AppBundle
+ cd src/P9K/AppBundle
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{240} %F{000%}SF %f%F{000}3.1.4 %k%F{240}%f " "$(build_left_prompt)"
+
+ unfunction php
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/todo.spec b/test/segments/todo.spec
new file mode 100755
index 00000000..704c47f6
--- /dev/null
+++ b/test/segments/todo.spec
@@ -0,0 +1,58 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and git init it.
+ FOLDER=/tmp/powerlevel9k-test
+ mkdir -p "${FOLDER}"
+ mkdir ${FOLDER}/bin
+ OLD_PATH=$PATH
+ PATH=${FOLDER}/bin:$PATH
+ cd $FOLDER
+}
+
+function tearDown() {
+ # Reset PATH
+ PATH=$OLD_PATH
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+}
+
+function testTodoSegmentPrintsNothingIfTodoShIsNotInstalled() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(todo custom_world)
+ local POWERLEVEL9K_CUSTOM_WORLD='echo world'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{000}world %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testTodoSegmentWorksAsExpected() {
+ # TODO: Skript in den PATH legen!
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(todo)
+ echo '#!/bin/sh' > ${FOLDER}/bin/todo.sh
+ echo 'echo "TODO: 34 of 100 tasks shown";' >> ${FOLDER}/bin/todo.sh
+ chmod +x ${FOLDER}/bin/todo.sh
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{244} %F{000%}☑ %f%F{000}100 %k%F{244}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/vcs-git.spec b/test/segments/vcs-git.spec
new file mode 100755
index 00000000..6ff485cb
--- /dev/null
+++ b/test/segments/vcs-git.spec
@@ -0,0 +1,378 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and git init it.
+ FOLDER=/tmp/powerlevel9k-test/vcs-test
+ mkdir -p "${FOLDER}"
+ cd $FOLDER
+
+ # Set username and email
+ OLD_GIT_AUTHOR_NAME=$GIT_AUTHOR_NAME
+ GIT_AUTHOR_NAME="Testing Tester"
+ OLD_GIT_AUTHOR_EMAIL=$GIT_AUTHOR_EMAIL
+ GIT_AUTHOR_EMAIL="test@powerlevel9k.theme"
+
+ # Set default username if not already set!
+ if [[ -z $(git config user.name) ]]; then
+ GIT_AUTHOR_NAME_SET_BY_TEST=true
+ git config --global user.name "${GIT_AUTHOR_NAME}"
+ fi
+ # Set default email if not already set!
+ if [[ -z $(git config user.email) ]]; then
+ GIT_AUTHOR_EMAIL_SET_BY_TEST=true
+ git config --global user.email "${GIT_AUTHOR_EMAIL}"
+ fi
+
+ # Initialize FOLDER as git repository
+ git init 1>/dev/null
+}
+
+function tearDown() {
+ if [[ -n "${OLD_GIT_AUTHOR_NAME}" ]]; then
+ GIT_AUTHOR_NAME=$OLD_GIT_AUTHOR
+ unset OLD_GIT_AUTHOR_NAME
+ else
+ unset GIT_AUTHOR_NAME
+ fi
+
+ if [[ -n "${OLD_GIT_AUTHOR_EMAIL}" ]]; then
+ GIT_AUTHOR_EMAIL=$OLD_GIT_AUTHOR_EMAIL
+ unset OLD_GIT_AUTHOR_EMAIL
+ else
+ unset GIT_AUTHOR_EMAIL
+ fi
+
+ if [[ "${GIT_AUTHOR_NAME_SET_BY_TEST}" == "true" ]]; then
+ git config --global --unset user.name
+ fi
+ if [[ "${GIT_AUTHOR_EMAIL_SET_BY_TEST}" == "true" ]]; then
+ git config --global --unset user.email
+ fi
+
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}"
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test
+ unset FOLDER
+}
+
+function testColorOverridingForCleanStateWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_CLEAN_FOREGROUND='cyan'
+ local POWERLEVEL9K_VCS_CLEAN_BACKGROUND='white'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{014} master %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testColorOverridingForModifiedStateWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_MODIFIED_FOREGROUND='red'
+ local POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='yellow'
+
+ touch testfile
+ git add testfile
+ git commit -m "test" 1>/dev/null
+ echo "test" > testfile
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{009} master ● %k%F{011}%f " "$(build_left_prompt)"
+}
+
+function testColorOverridingForUntrackedStateWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND='cyan'
+ local POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND='yellow'
+
+ touch testfile
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{014} master ? %k%F{011}%f " "$(build_left_prompt)"
+}
+
+function testGitIconWorks() {
+ local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_GIT_ICON='Git-Icon'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000%}Git-Icon %f%F{000} master %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testGitlabIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_GIT_GITLAB_ICON='GL-Icon'
+
+ # Add a GitLab project as remote origin. This is
+ # sufficient to show the GitLab-specific icon.
+ git remote add origin https://gitlab.com/dritter/gitlab-test-project.git
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000%}GL-Icon %f%F{000} master %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testBitbucketIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_GIT_BITBUCKET_ICON='BB-Icon'
+
+ # Add a BitBucket project as remote origin. This is
+ # sufficient to show the BitBucket-specific icon.
+ git remote add origin https://dritter@bitbucket.org/dritter/dr-test.git
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000%}BB-Icon %f%F{000} master %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testGitHubIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_GIT_GITHUB_ICON='GH-Icon'
+
+ # Add a GitHub project as remote origin. This is
+ # sufficient to show the GitHub-specific icon.
+ git remote add origin https://github.com/dritter/test.git
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000%}GH-Icon %f%F{000} master %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testUntrackedFilesIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
+
+ # Create untracked file
+ touch "i-am-untracked.txt"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} master ? %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testStagedFilesIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_STAGED_ICON='+'
+
+ # Create staged file
+ touch "i-am-added.txt"
+ git add i-am-added.txt &>/dev/null
+ git commit -m "initial commit" &>/dev/null
+ echo "xx" >> i-am-added.txt
+ git add i-am-added.txt &>/dev/null
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{000} master + %k%F{011}%f " "$(build_left_prompt)"
+}
+
+function testUnstagedFilesIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_UNSTAGED_ICON='M'
+
+ # Create unstaged (modified, but not added to index) file
+ touch "i-am-modified.txt"
+ git add i-am-modified.txt
+ git commit -m "Add File" 1>/dev/null
+ echo "xx" > i-am-modified.txt
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{000} master M %k%F{011}%f " "$(build_left_prompt)"
+}
+
+function testStashIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_STASH_ICON='S'
+
+ # Create modified file
+ touch "i-am-modified.txt"
+ git add i-am-modified.txt
+ git commit -m "Add File" 1>/dev/null
+ echo "xx" > i-am-modified.txt
+ git stash 1>/dev/null
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} master S1 %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testTagIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_TAG_ICON='T'
+
+ touch "file.txt"
+ git add file.txt
+ git commit -m "Add File" 1>/dev/null
+ git tag "v0.0.1"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} master Tv0.0.1 %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testTagIconInDetachedHeadState() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_TAG_ICON='T'
+
+ touch "file.txt"
+ git add file.txt
+ git commit -m "Add File" &>/dev/null
+ git tag "v0.0.1"
+ touch "file2.txt"
+ git add file2.txt
+ git commit -m "Add File2" &>/dev/null
+ git checkout v0.0.1 &>/dev/null
+ local hash=$(git rev-list -n 1 --abbrev-commit --abbrev=8 HEAD)
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} ${hash} Tv0.0.1 %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testActionHintWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+
+ touch "i-am-modified.txt"
+ git add i-am-modified.txt
+ git commit -m "Add File" &>/dev/null
+
+ git clone . ../vcs-test2 &>/dev/null
+ echo "xx" >> i-am-modified.txt
+ git commit -a -m "Modified file" &>/dev/null
+
+ cd ../vcs-test2
+ echo "yy" >> i-am-modified.txt
+ git commit -a -m "Provoke conflict" &>/dev/null
+ git pull &>/dev/null
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{000} master %F{red}| merge%f %k%F{011}%f " "$(build_left_prompt)"
+}
+
+function testIncomingHintWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON='I'
+
+ touch "i-am-modified.txt"
+ git add i-am-modified.txt
+ git commit -m "Add File" &>/dev/null
+
+ git clone . ../vcs-test2 &>/dev/null
+ echo "xx" >> i-am-modified.txt
+ git commit -a -m "Modified file" &>/dev/null
+
+ cd ../vcs-test2
+ git fetch &>/dev/null
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} master I1 %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testOutgoingHintWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON='o'
+
+ touch "i-am-modified.txt"
+ git add i-am-modified.txt
+ git commit -m "Add File" &>/dev/null
+
+ git clone . ../vcs-test2 &>/dev/null
+
+ cd ../vcs-test2
+
+ echo "xx" >> i-am-modified.txt
+ git commit -a -m "Modified file" &>/dev/null
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} master o1 %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testShorteningCommitHashWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_SHOW_CHANGESET=true
+ local POWERLEVEL9K_CHANGESET_HASH_LENGTH='4'
+
+ touch "file.txt"
+ git add file.txt
+ git commit -m "Add File" 1>/dev/null
+ local hash=$(git rev-list -n 1 --abbrev-commit --abbrev=3 HEAD)
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ # This test needs to call powerlevel9k_vcs_init, where
+ # the changeset is truncated.
+ powerlevel9k_vcs_init
+ assertEquals "%K{002} %F{000}${hash}  master %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testShorteningCommitHashIsNotShownIfShowChangesetIsFalse() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_SHOW_CHANGESET=false
+ local POWERLEVEL9K_CHANGESET_HASH_LENGTH='4'
+
+ touch "file.txt"
+ git add file.txt
+ git commit -m "Add File" 1>/dev/null
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ # This test needs to call powerlevel9k_vcs_init, where
+ # the changeset is truncated.
+ powerlevel9k_vcs_init
+ assertEquals "%K{002} %F{000} master %k%F{002}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/vcs-hg.spec b/test/segments/vcs-hg.spec
new file mode 100755
index 00000000..ad0d5780
--- /dev/null
+++ b/test/segments/vcs-hg.spec
@@ -0,0 +1,207 @@
+#!/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"
+
+ P9K_HOME=$(pwd)
+ ### Test specific
+ # Create default folder and hg init it.
+ FOLDER=/tmp/powerlevel9k-test/vcs-test
+ mkdir -p "${FOLDER}"
+ cd $FOLDER
+
+ export HGUSER="Test bot <bot@example.com>"
+
+ hg init 1>/dev/null
+}
+
+function tearDown() {
+ # Go back to powerlevel9k folder
+ cd "${P9K_HOME}"
+ # Remove eventually created test-specific folder
+ rm -fr "${FOLDER}" &>/dev/null
+ # At least remove test folder completely
+ rm -fr /tmp/powerlevel9k-test &>/dev/null
+ unset FOLDER
+ unset HGUSER
+}
+
+function testColorOverridingForCleanStateWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_CLEAN_FOREGROUND='cyan'
+ local POWERLEVEL9K_VCS_CLEAN_BACKGROUND='white'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{015} %F{014} default %k%F{015}%f " "$(build_left_prompt)"
+}
+
+function testColorOverridingForModifiedStateWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_MODIFIED_FOREGROUND='red'
+ local POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='yellow'
+
+ touch testfile
+ hg add testfile
+ hg commit -m "test" 1>/dev/null
+ echo "test" > testfile
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{009} default ● %k%F{011}%f " "$(build_left_prompt)"
+}
+
+# There is no staging area in mercurial, therefore there are no "untracked"
+# files.. In case there are added files, we show the VCS segment with a
+# yellow background.
+# This may be improved in future versions, to be a bit more consistent with
+# the git part.
+function testAddedFilesIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ touch "myfile.txt"
+ hg add myfile.txt
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{000} default ● %k%F{011}%f " "$(build_left_prompt)"
+}
+
+# We don't support tagging in mercurial right now..
+function testTagIconWorks() {
+ startSkipping # Skip test
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_TAG_ICON='T'
+
+ touch "file.txt"
+ hg add file.txt
+ hg commit -m "Add File" 1>/dev/null
+ hg tag "v0.0.1"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} default Tv0.0.1 %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testTagIconInDetachedHeadState() {
+ startSkipping # Skip test
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_TAG_ICON='T'
+
+ touch "file.txt"
+ hg add file.txt
+ hg commit -m "Add File" &>/dev/null
+ hg tag "v0.0.1"
+ touch "file2.txt"
+ hg add file2.txt
+ hg commit -m "Add File2" &>/dev/null
+ hg checkout v0.0.1 &>/dev/null
+ local hash=$(hg id)
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} ${hash} Tv0.0.1 %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testActionHintWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ touch "i-am-modified.txt"
+ hg add i-am-modified.txt
+ hg commit -m "Add File" &>/dev/null
+
+ hg clone . ../vcs-test2 &>/dev/null
+ echo "xx" >> i-am-modified.txt
+ hg commit -m "Modified file" &>/dev/null
+
+ cd ../vcs-test2
+ echo "yy" >> i-am-modified.txt
+ hg commit -m "Provoke conflict" 2>/dev/null
+ hg pull 1>/dev/null
+ hg merge --tool internal:merge >/dev/null 2>&1
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{011} %F{000} default %F{red}| merging%f %k%F{011}%f " "$(build_left_prompt)"
+}
+
+function testShorteningCommitHashWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_SHOW_CHANGESET=true
+ local POWERLEVEL9K_CHANGESET_HASH_LENGTH='4'
+
+ touch "file.txt"
+ hg add file.txt
+ hg commit -m "Add File" 1>/dev/null
+ local hash=$(hg id | head -c ${POWERLEVEL9K_CHANGESET_HASH_LENGTH})
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ # This test needs to call powerlevel9k_vcs_init, where
+ # the changeset is truncated.
+ powerlevel9k_vcs_init
+
+ assertEquals "%K{002} %F{000}${hash}  default %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testShorteningCommitHashIsNotShownIfShowChangesetIsFalse() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_SHOW_CHANGESET=false
+ local POWERLEVEL9K_CHANGESET_HASH_LENGTH='4'
+
+ touch "file.txt"
+ hg add file.txt
+ hg commit -m "Add File" 1>/dev/null
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ # This test needs to call powerlevel9k_vcs_init, where
+ # the changeset is truncated.
+ powerlevel9k_vcs_init
+
+ assertEquals "%K{002} %F{000} default %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testMercurialIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_HG_ICON='HG-Icon'
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000%}HG-Icon %f%F{000} default %k%F{002}%f " "$(build_left_prompt)"
+}
+
+function testBookmarkIconWorks() {
+ local -a POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
+ POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
+ local POWERLEVEL9K_VCS_BOOKMARK_ICON='B'
+ hg bookmark "initial"
+
+ # Load Powerlevel9k
+ source ${P9K_HOME}/powerlevel9k.zsh-theme
+
+ assertEquals "%K{002} %F{000} default Binitial %k%F{002}%f " "$(build_left_prompt)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/segments/vcs.spec b/test/segments/vcs.spec
deleted file mode 100755
index 3be7aa0f..00000000
--- a/test/segments/vcs.spec
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/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
-}
-
-function testColorOverridingForCleanStateWorks() {
- POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
- POWERLEVEL9K_VCS_CLEAN_FOREGROUND='cyan'
- POWERLEVEL9K_VCS_CLEAN_BACKGROUND='white'
-
- FOLDER=/tmp/powerlevel9k-test/vcs-test
- mkdir -p $FOLDER
- cd $FOLDER
- git init 1>/dev/null
-
- assertEquals "%K{015} %F{014} master %k%F{015}%f " "$(build_left_prompt)"
-
- cd -
- rm -fr /tmp/powerlevel9k-test
-
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_VCS_CLEAN_FOREGROUND
- unset POWERLEVEL9K_VCS_CLEAN_BACKGROUND
-}
-
-function testColorOverridingForModifiedStateWorks() {
- POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
- POWERLEVEL9K_VCS_MODIFIED_FOREGROUND='red'
- POWERLEVEL9K_VCS_MODIFIED_BACKGROUND='yellow'
-
- FOLDER=/tmp/powerlevel9k-test/vcs-test
- mkdir -p $FOLDER
- cd $FOLDER
- git init 1>/dev/null
- git config user.email "test@powerlevel9k.theme"
- git config user.name "Testing Tester"
- touch testfile
- git add testfile
- git commit -m "test" 1>/dev/null
- echo "test" > testfile
-
- assertEquals "%K{011} %F{009} master ● %k%F{011}%f " "$(build_left_prompt)"
-
- cd -
- rm -fr /tmp/powerlevel9k-test
-
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_VCS_MODIFIED_FOREGROUND
- unset POWERLEVEL9K_VCS_MODIFIED_BACKGROUND
-}
-
-function testColorOverridingForUntrackedStateWorks() {
- POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
- POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND='cyan'
- POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND='yellow'
-
- FOLDER=/tmp/powerlevel9k-test/vcs-test
- mkdir -p $FOLDER
- cd $FOLDER
- git init 1>/dev/null
- touch testfile
-
- assertEquals "%K{011} %F{014} master ? %k%F{011}%f " "$(build_left_prompt)"
-
- cd -
- rm -fr /tmp/powerlevel9k-test
-
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND
- unset POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND
-}
-
-function testBranchNameTruncatingShortenLength() {
- POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
- POWERLEVEL9K_VCS_SHORTEN_LENGTH=6
- POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH=3
- POWERLEVEL9K_VCS_SHORTEN_STRATEGY="truncate_from_right"
-
- FOLDER=/tmp/powerlevel9k-test/vcs-test
- mkdir -p $FOLDER
- cd $FOLDER
- git init 1>/dev/null
- touch testfile
-
- assertEquals "%K{002} %F{000} master ? %k%F{002}%f " "$(build_left_prompt)"
-
- POWERLEVEL9K_VCS_SHORTEN_LENGTH=3
- assertEquals "%K{002} %F{000} mas… ? %k%F{002}%f " "$(build_left_prompt)"
-
- cd -
- rm -fr /tmp/powerlevel9k-test
-
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_VCS_SHORTEN_LENGTH
- unset POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH
- unset POWERLEVEL9K_VCS_SHORTEN_STRATEGY
-}
-
-function testBranchNameTruncatingMinLength() {
- POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
- POWERLEVEL9K_VCS_SHORTEN_LENGTH=3
- POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH=6
- POWERLEVEL9K_VCS_SHORTEN_STRATEGY="truncate_from_right"
-
- FOLDER=/tmp/powerlevel9k-test/vcs-test
- mkdir -p $FOLDER
- cd $FOLDER
- git init 1>/dev/null
- touch testfile
-
- assertEquals "%K{002} %F{000} master ? %k%F{002}%f " "$(build_left_prompt)"
-
- POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH=7
-
- assertEquals "%K{002} %F{000} master ? %k%F{002}%f " "$(build_left_prompt)"
-
- cd -
- rm -fr /tmp/powerlevel9k-test
-
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_VCS_SHORTEN_LENGTH
- unset POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH
- unset POWERLEVEL9K_VCS_SHORTEN_STRATEGY
-}
-
-function testBranchNameTruncatingShortenStrategy() {
- POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(vcs)
- POWERLEVEL9K_VCS_SHORTEN_LENGTH=3
- POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH=3
- POWERLEVEL9K_VCS_SHORTEN_STRATEGY="truncate_from_right"
-
- FOLDER=/tmp/powerlevel9k-test/vcs-test
- mkdir -p $FOLDER
- cd $FOLDER
- git init 1>/dev/null
- touch testfile
-
- assertEquals "%K{002} %F{000} mas… ? %k%F{002}%f " "$(build_left_prompt)"
-
- POWERLEVEL9K_VCS_SHORTEN_STRATEGY="truncate_middle"
-
- assertEquals "%K{002} %F{000} mas…ter ? %k%F{002}%f " "$(build_left_prompt)"
-
- cd -
- rm -fr /tmp/powerlevel9k-test
-
- unset POWERLEVEL9K_LEFT_PROMPT_ELEMENTS
- unset POWERLEVEL9K_VCS_SHORTEN_LENGTH
- unset POWERLEVEL9K_VCS_SHORTEN_MIN_LENGTH
- unset POWERLEVEL9K_VCS_SHORTEN_STRATEGY
-}
-
-source shunit2/source/2.1/src/shunit2
diff --git a/test/segments/vi_mode.spec b/test/segments/vi_mode.spec
new file mode 100755
index 00000000..8535cc4e
--- /dev/null
+++ b/test/segments/vi_mode.spec
@@ -0,0 +1,48 @@
+#!/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"
+}
+
+function testViInsertModeWorks() {
+ local KEYMAP='viins'
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{012}INSERT " "$(prompt_vi_mode left 1 false)"
+}
+
+function testViInsertModeWorksWhenLabeledAsMain() {
+ local KEYMAP='main'
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{012}INSERT " "$(prompt_vi_mode left 1 false)"
+}
+
+function testViCommandModeWorks() {
+ local KEYMAP='vicmd'
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{015}NORMAL " "$(prompt_vi_mode left 1 false)"
+}
+
+function testViInsertModeStringIsCustomizable() {
+ local KEYMAP='viins'
+
+ # Load Powerlevel9k
+ source powerlevel9k.zsh-theme
+
+ assertEquals "%K{000} %F{012}INSERT " "$(prompt_vi_mode left 1 false)"
+}
+
+source shunit2/shunit2 \ No newline at end of file
diff --git a/test/suite.spec b/test/suite.spec
new file mode 100755
index 00000000..0e51d322
--- /dev/null
+++ b/test/suite.spec
@@ -0,0 +1,17 @@
+#!/usr/bin/env zsh
+#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
+
+local failed=false
+
+for test in **/*.spec; do
+ echo
+ echo "Now executing ${test}"
+ if [[ "${test}" == "test/suite.spec" ]]; then
+ continue;
+ fi
+ ./${test} || failed=true
+done
+
+if [[ "${failed}" == "true" ]]; then
+ exit 1
+fi \ No newline at end of file