diff --git a/test/segments/ip.spec b/test/segments/ip.spec new file mode 100755 index 00000000..3ae2d389 --- /dev/null +++ b/test/segments/ip.spec @@ -0,0 +1,202 @@ +#!/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 testIpSegmentPrintsNothingOnOsxIfNotConnected() { + alias networksetup='echo "not connected"' + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip custom_world) + local OS="OSX" # Fake OSX + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + + unalias networksetup +} + +function testIpSegmentPrintsNothingOnLinuxIfNotConnected() { + alias ip='echo "not connected"' + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip custom_world) + local OS="Linux" # Fake Linux + local POWERLEVEL9K_CUSTOM_WORLD='echo world' + + assertEquals "%K{white} %F{black}world %k%F{white}%f " "$(build_left_prompt)" + + unalias ip +} + +function testIpSegmentWorksOnOsxWithNoInterfaceSpecified() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + local OS='OSX' # Fake OSX + 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'; };_" + + assertEquals "%K{cyan} %F{black%}IP %f%F{black}1.2.3.4 %k%F{cyan}%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 POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + local OS='OSX' # Fake OSX + 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 + ;; + } + } + + assertEquals "%K{cyan} %F{black%}IP %f%F{black}1.2.3.4 %k%F{cyan}%f " "$(build_left_prompt)" + + unfunction ipconfig + unalias networksetup +} + +function testIpSegmentWorksOnOsxWithInterfaceSpecified() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + local OS='OSX' # Fake OSX + local POWERLEVEL9K_IP_INTERFACE='xxx' + alias ipconfig="_(){ echo '1.2.3.4'; };_" + + assertEquals "%K{cyan} %F{black%}IP %f%F{black}1.2.3.4 %k%F{cyan}%f " "$(build_left_prompt)" + + unalias ipconfig +} + +function testIpSegmentWorksOnLinuxWithNoInterfaceSpecified() { + setopt aliases + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + local OS='Linux' # Fake Linux + # 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: 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: 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: 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 + } + + assertEquals "%K{cyan} %F{black%}IP %f%F{black}10.0.2.15 %k%F{cyan}%f " "$(build_left_prompt)" + + unfunction ip +} + +function testIpSegmentWorksOnLinuxWithMultipleInterfacesSpecified() { + setopt aliases + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + local OS='Linux' # Fake Linux + # 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: 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: 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: 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: 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: 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 + } + + assertEquals "%K{cyan} %F{black%}IP %f%F{black}10.0.2.15 %k%F{cyan}%f " "$(build_left_prompt)" + + unfunction ip +} + +function testIpSegmentWorksOnLinuxWithInterfaceSpecified() { + local POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ip) + local OS='Linux' # Fake Linux + local POWERLEVEL9K_IP_INTERFACE='xxx' + ip(){ + echo '2: eth0: 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'; + } + + assertEquals "%K{cyan} %F{black%}IP %f%F{black}10.0.2.15 %k%F{cyan}%f " "$(build_left_prompt)" + + unfunction ip +} + +source shunit2/source/2.1/src/shunit2 \ No newline at end of file