
# Section: file

___x_cmd_assert_file(){             op=-f opmsg="file"          ___x_cmd_assert___all "$@";     }
___x_cmd_assert_folder(){           op=-d opmsg="folder"        ___x_cmd_assert___all "$@";     }
___x_cmd_assert_file_existed(){     op=-e opmsg="existed"       ___x_cmd_assert___all "$@";     }

___x_cmd_assert_file_readable(){    op=-r opmsg="readable"      ___x_cmd_assert___all "$@";     }
___x_cmd_assert_file_writable(){    op=-w opmsg="writable"      ___x_cmd_assert___all "$@";     }
___x_cmd_assert_file_excutable(){   op=-w opmsg="excutable"     ___x_cmd_assert___all "$@";     }

___x_cmd_assert_file_pipe(){        op=-p opmsg="pipe"          ___x_cmd_assert___all "$@";     }
___x_cmd_assert_file_socket(){      op=-S opmsg="socket"        ___x_cmd_assert___all "$@";     }
___x_cmd_assert_file_link(){        op=-h opmsg="link"          ___x_cmd_assert___all "$@";     }
___x_cmd_assert_file_nonempty(){    op=-s opmsg="non-empty"     ___x_cmd_assert___all "$@";     }

___x_cmd_assert___all(){
    local e
    if [ "$#" -eq 0 ]; then         while read -r e; do         ___x_cmd_assert___one "$e" || return ; done
    else                            for e in "$@"; do           ___x_cmd_assert___one "$e" || return ; done
    fi
}

___x_cmd_assert___one(){
    case "${1}" in
        ^*)     [ ! "$op" "${1#^}" ]      ||  M="Expect to be a non-${opmsg}: ${1#^}"    _assert:return 1 ;;
        *)      [ "$op" "$1" ]            ||  M="Expect to be a ${opmsg}: $1"            _assert:return 1 ;;
    esac
}

## EndSection
