diff --git a/.gitignore b/.gitignore
index 9bb248c..e19786a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
.DS_Store
-list
+path
+cmd
diff --git a/README.md b/README.md
index bfb2bc7..9744da4 100644
--- a/README.md
+++ b/README.md
@@ -18,16 +18,22 @@ echo "source ~/.aliasme/aliasme.sh" >> ~/.bash_profile
```
## Usage
-
```bash
-$ al add [name] [value] # add alias with name and value
+$ al path [name] [value] # add alias path with name
+$ al cmd [name] [command] # add alias command with name
$ al rm [name] # remove alias by name
-$ al ls # alias list
+$ al ls # list all alias
$ al [name] # execute alias associate with [name]
$ al -v # version information
$ al -h # help
```
+## Migrate from 1.X to 2.X
+Please execute this command
+```
+mv ~/.aliasme/list ~/.aliasme/path
+```
+
## Contributing
Bug reports and pull requests are welcome on GitHub at [https://github.com/Jintin/aliasme](https://github.com/Jintin/aliasme).
diff --git a/aliasme.sh b/aliasme.sh
index fa850c2..b042a97 100644
--- a/aliasme.sh
+++ b/aliasme.sh
@@ -1,14 +1,26 @@
#!/usr/bin/env bash
_list() {
- while read name
- do
- read value
- echo "$name : $value"
- done < ~/.aliasme/list
+ if [ -s ~/.aliasme/path ];then
+ echo "PATH:"
+ while read name
+ do
+ read value
+ echo "$name : $value"
+ done < ~/.aliasme/path
+ fi
+
+ if [ -s ~/.aliasme/cmd ];then
+ echo "CMD:"
+ while read name
+ do
+ read value
+ echo "$name : $value"
+ done < ~/.aliasme/cmd
+ fi
}
-_add() {
+_path() {
#read name
name=$1
if [ -z $1 ]; then
@@ -16,14 +28,33 @@ _add() {
fi
#read path
- path_alias=$2
+ path=$2
if [ -z $2 ]; then
- read -ep "Input path to add:" path_alias
+ read -ep "Input path to add:" path
fi
- path_alias=$(cd $path_alias;pwd)
+ path=$(cd $path;pwd)
- echo $name >> ~/.aliasme/list
- echo $path_alias >> ~/.aliasme/list
+ echo $name >> ~/.aliasme/path
+ echo $path >> ~/.aliasme/path
+
+ _autocomplete
+}
+
+_cmd() {
+ #read name
+ name=$1
+ if [ -z $1 ]; then
+ read -ep "Input name to add:" name
+ fi
+
+ #read path
+ cmd=$2
+ if [ -z $2 ]; then
+ read -ep "Input cmd to add:" cmd
+ fi
+
+ echo $name >> ~/.aliasme/cmd
+ echo $cmd >> ~/.aliasme/cmd
_autocomplete
}
@@ -34,17 +65,28 @@ _remove() {
if [ -z $1 ]; then
read -pr "Input name to remove:" name
fi
- touch ~/.aliasme/listtemp
+ touch ~/.aliasme/pathtemp
+ touch ~/.aliasme/cmdtemp
# read and replace file
while read line
do
if [ $line = $name ]; then
read line #skip one more line
else
- echo $line >> ~/.aliasme/listtemp
+ echo $line >> ~/.aliasme/pathtemp
fi
- done < ~/.aliasme/list
- mv ~/.aliasme/listtemp ~/.aliasme/list
+ done < ~/.aliasme/path
+ mv ~/.aliasme/pathtemp ~/.aliasme/path
+
+ while read line
+ do
+ if [ $line = $name ]; then
+ read line #skip one more line
+ else
+ echo $line >> ~/.aliasme/cmdtemp
+ fi
+ done < ~/.aliasme/cmd
+ mv ~/.aliasme/cmdtemp ~/.aliasme/cmd
_autocomplete
}
@@ -54,10 +96,22 @@ _jump() {
if [ $1 = $line ]; then
read line
cd $line
- return
+ return 0
fi
- done < ~/.aliasme/list
- echo "not found"
+ done < ~/.aliasme/path
+ return 1
+}
+
+_excute() {
+ while read line
+ do
+ if [ $1 = $line ]; then
+ read line
+ eval $line
+ return 0
+ fi
+ done < ~/.aliasme/cmd
+ return 1
}
_bashauto()
@@ -71,7 +125,12 @@ _bashauto()
do
opts+=" $line"
read line
- done < ~/.aliasme/list
+ done < ~/.aliasme/path
+ while read line
+ do
+ opts+=" $line"
+ read line
+ done < ~/.aliasme/cmd
COMPREPLY=( $(compgen -W "${opts}" ${cur}) )
return 0
}
@@ -85,7 +144,12 @@ _autocomplete()
do
opts+="$line "
read line
- done < ~/.aliasme/list
+ done < ~/.aliasme/path
+ while read line
+ do
+ opts+="$line "
+ read line
+ done < ~/.aliasme/cmd
compctl -k "($opts)" al
else
# bash
@@ -99,23 +163,28 @@ al(){
if [ ! -z $1 ]; then
if [ $1 = "ls" ]; then
_list
- elif [ $1 = "add" ]; then
- _add $2 $3
+ elif [ $1 = "path" ]; then
+ _path $2 $3
+ elif [ $1 = "cmd" ]; then
+ _cmd $2 $3
elif [ $1 = "rm" ]; then
_remove $2
elif [ $1 = "-h" ]; then
echo "Usage:"
- echo "al add [name] [value] # add alias with name and value"
+ echo "al path [name] [value] # add alias path with name"
+ echo "al cmd [name] [command] # add alias command with name"
echo "al rm [name] # remove alias by name"
echo "al ls # alias list"
echo "al [name] # execute alias associate with [name]"
echo "al -v # version information"
echo "al -h # help"
elif [ $1 = "-v" ]; then
- echo "aliasme 1.1.2"
+ echo "aliasme 2.0.0"
echo "visit https://github.com/Jintin/aliasme for more information"
else
- _jump $1
+ if ! _jump $1 && ! _excute $1 ; then
+ echo "not found"
+ fi
fi
fi
}
diff --git a/test/aliastest.sh b/test/aliastest.sh
index 24cf81a..799d593 100755
--- a/test/aliastest.sh
+++ b/test/aliastest.sh
@@ -4,39 +4,41 @@
. aliasme.sh
testInit() {
- if [[ ! -f ~/.aliasme/list ]]; then
- mkdir -p ~/.aliasme && touch ~/.aliasme/list
+ if [[ ! -f ~/.aliasme/path ]]; then
+ mkdir -p ~/.aliasme && touch ~/.aliasme/path
fi
}
testAlias() {
path_alias=$(pwd)
+
name1=testaaa
+ testPath $name1 $path_alias
+
name2=testbbb
- data=$(_list)
- testAdd $name1 $path_alias "$data"
- data1=$(_list)
- testAdd $name2 $path_alias "$data1"
+ testPath $name2 $path_alias
- testRemove $name2 "$data1"
- testRemove $name1 "$data"
-
- assert_end
+ testRemove $name1
+ testRemove $name2
}
-testAdd() {
- _add $1 $2
- if [[ ! -z $3 ]]; then
- assert _list "$3\n$1 : $2"
+testPath() {
+ _path $1 $2
+ if [[ $(_list) = *"$1 : $2"* ]]; then
+ log_success "path test success"
else
- assert _list "$1 : $2"
+ log_failure "path test failure"
fi
}
testRemove() {
_remove $1
- assert _list "$2"
+ if [[ $(_list) = *"$1"* ]]; then
+ log_failure "remove test failure"
+ else
+ log_success "remove test success"
+ fi
}
testInit
diff --git a/test/assert.sh b/test/assert.sh
index 166c0ca..b16484a 100755
--- a/test/assert.sh
+++ b/test/assert.sh
@@ -1,138 +1,194 @@
-#!/bin/bash
-# assert.sh 1.0 - bash unit testing framework
-# Copyright (C) 2009, 2010, 2011, 2012 Robert Lehmann
-#
-# http://github.com/lehmannro/assert.sh
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program. If not, see .
+#!/usr/bin/env bash
-export DISCOVERONLY=${DISCOVERONLY:-}
-export DEBUG=${DEBUG:-}
-export STOP=${STOP:-}
-export INVARIANT=${INVARIANT:-}
+#####################################################################
+##
+## title: Assert Extension
+##
+## description:
+## Assert extension of shell (bash, ...)
+## with the common assert functions
+## Function list based on:
+## http://junit.sourceforge.net/javadoc/org/junit/Assert.html
+## Log methods : inspired by
+## - https://natelandau.com/bash-scripting-utilities/
+## author: Mark Torok
+##
+## date: 07. Dec. 2016
+##
+## license: MIT
+##
+#####################################################################
-args="$(getopt -n "$0" -l verbose,help,stop,discover,invariant vhxdi $*)" \
-|| exit -1
-for arg in $args; do
- case "$arg" in
- -h)
- echo "$0 [-vxid] [--verbose] [--stop] [--invariant] [--discover]"
- echo "$(sed 's/./ /g' <<< "$0") [-h] [--help]"
- exit 0;;
- --help)
- cat <&2
+ }
-_assert_reset() {
- tests_ran=0
- tests_failed=0
- tests_errors=()
- tests_starttime="$(date +%s.%N)" # seconds_since_epoch.nanoseconds
+log_success() {
+ printf "${GREEN}✔ %s${NORMAL}\n" "$@" >&2
}
-assert_end() {
- # assert_end [suite ..]
- tests_endtime="$(date +%s.%N)"
- tests="$tests_ran ${*:+$* }tests"
- [[ -n "$DISCOVERONLY" ]] && echo "collected $tests." && _assert_reset && return
- [[ -n "$DEBUG" ]] && echo
- [[ -z "$INVARIANT" ]] && report_time=" in $(bc \
- <<< "${tests_endtime%.N} - ${tests_starttime%.N}" \
- | sed -e 's/\.\([0-9]\{0,3\}\)[0-9]*/.\1/' -e 's/^\./0./')s" \
- || report_time=
-
- if [[ "$tests_failed" -eq 0 ]]; then
- echo "all $tests passed$report_time."
- else
- for error in "${tests_errors[@]}"; do echo "$error"; done
- echo "$tests_failed of $tests failed$report_time."
- fi
- tests_failed_previous=$tests_failed
- _assert_reset
- return $tests_failed_previous
+log_failure() {
+ printf "${RED}✖ %s${NORMAL}\n" "$@" >&2
}
-assert() {
- # assert [stdin]
- (( tests_ran++ ))
- [[ -n "$DISCOVERONLY" ]] && return
- # printf required for formatting
- printf -v expected "x${2:-}" # x required to overwrite older results
- result="$(eval 2>/dev/null $1 <<< ${3:-})"
- # Note: $expected is already decorated
- if [[ "x$result" == "$expected" ]]; then
- [[ -n "$DEBUG" ]] && echo -n .
- return
- fi
- [[ -n "$DEBUG" ]] && echo -n X
- result="$(sed -e :a -e '$!N;s/\n/\\n/;ta' <<< "$result")"
- [[ -z "$result" ]] && result="nothing" || result="\"$result\""
- [[ -z "$2" ]] && expected="nothing" || expected="\"$2\""
- failure="expected $expected${_indent}got $result"
- report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
- tests_errors[$tests_failed]="$report"
- (( tests_failed++ ))
- if [[ -n "$STOP" ]]; then
- [[ -n "$DEBUG" ]] && echo
- echo "$report"
- exit 1
- fi
+
+assert_eq() {
+ local expected="$1"
+ local actual="$2"
+ local msg
+
+ if [ "$#" -ge 3 ]; then
+ msg="$3"
+ fi
+
+ if [ "$expected" == "$actual" ]; then
+ return 0
+ else
+ [ "${#msg}" -gt 0 ] && log_failure "$expected == $actual :: $msg" || true
+ return 1
+ fi
}
-assert_raises() {
- # assert_raises [stdin]
- (( tests_ran++ ))
- [[ -n "$DISCOVERONLY" ]] && return
- (eval $1 <<< ${3:-}) > /dev/null 2>&1
- status=$?
- expected=${2:-0}
- if [[ "$status" -eq "$expected" ]]; then
- [[ -n "$DEBUG" ]] && echo -n .
- return
- fi
- [[ -n "$DEBUG" ]] && echo -n X
- failure="program terminated with code $status instead of $expected"
- report="test #$tests_ran \"$1${3:+ <<< $3}\" failed:${_indent}$failure"
- tests_errors[$tests_failed]="$report"
- (( tests_failed++ ))
- if [[ -n "$STOP" ]]; then
- [[ -n "$DEBUG" ]] && echo
- echo "$report"
- exit 1
- fi
+assert_not_eq() {
+ local expected="$1"
+ local actual="$2"
+ local msg
+
+ if [ "$#" -ge 3 ]; then
+ msg="$3"
+ fi
+
+ if [ ! "$expected" == "$actual" ]; then
+ return 0
+ else
+ [ "${#msg}" -gt 0 ] && log_failure "$expected != $actual :: $msg" || true
+ return 1
+ fi
}
-_assert_reset
+assert_true() {
+ local actual
+ local msg
+
+ actual="$1"
+
+ if [ "$#" -ge 3 ]; then
+ msg="$3"
+ fi
+
+ assert_eq true "$actual" "$msg"
+ return "$?"
+}
+
+assert_false() {
+ local actual
+ local msg
+
+ actual="$1"
+
+ if [ "$#" -ge 3 ]; then
+ msg="$3"
+ fi
+
+ assert_eq false "$actual" "$msg"
+ return "$?"
+}
+
+assert_array_eq() {
+
+ declare -a expected=("${!1}")
+ # echo "AAE ${expected[@]}"
+
+ declare -a actual=("${!2}")
+ # echo "AAE ${actual[@]}"
+
+ local msg
+ if [ "$#" -ge 3 ]; then
+ msg="$3"
+ fi
+
+ local return_code
+ return_code=0
+ if [ ! "${#expected[@]}" == "${#actual[@]}" ]; then
+ return_code=1
+ fi
+
+ local i
+ for (( i=1; i < ${#expected[@]} + 1; i+=1 )); do
+ if [ ! "${expected[$i-1]}" == "${actual[$i-1]}" ]; then
+ return_code=1
+ break
+ fi
+ done
+
+ if [ "$return_code" == 1 ]; then
+ [ "${#msg}" -gt 0 ] && log_failure "(${expected[*]}) != (${actual[*]}) :: $msg" || true
+ fi
+
+ return "$return_code"
+}
+
+assert_array_not_eq() {
+
+ declare -a expected=("${!1}")
+ declare -a actual=("${!2}")
+
+ local msg
+ if [ "$#" -ge 3 ]; then
+ msg="$3"
+ fi
+
+ local return_code
+ return_code=1
+ if [ ! "${#expected[@]}" == "${#actual[@]}" ]; then
+ return_code=0
+ fi
+
+ local i
+ for (( i=1; i < ${#expected[@]} + 1; i+=1 )); do
+ if [ ! "${expected[$i-1]}" == "${actual[$i-1]}" ]; then
+ return_code=0
+ break
+ fi
+ done
+
+ if [ "$return_code" == 1 ]; then
+ [ "${#msg}" -gt 0 ] && log_failure "(${expected[*]}) == (${actual[*]}) :: $msg" || true
+ fi
+
+ return "$return_code"
+}
+
+assert_empty() {
+ local actual
+ local msg
+
+ actual="$1"
+
+ if [ "$#" -ge 2 ]; then
+ msg="$2"
+ fi
+
+ assert_eq "" "$actual" "$msg"
+ return "$?"
+}
+
+assert_not_empty() {
+ local actual
+ local msg
+
+ actual="$1"
+
+ if [ "$#" -ge 2 ]; then
+ msg="$2"
+ fi
+
+ assert_not_eq "" "$actual" "$msg"
+ return "$?"
+}