jattool-sfind 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/bin/bash
  2. #shellcheck disable=SC1090
  3. . "$(sfpath)" || exit 3
  4. shellfu import pretty
  5. usage() {
  6. mkusage "$@" "[options] BODY" \
  7. -- \
  8. "Discover test in suite located at PATH" \
  9. -o \
  10. "-f FMT Print test name in format FMT. 'id', 'version' or" \
  11. " 'path'." \
  12. -- \
  13. "Test body should consist of asserts and/or phases documented" \
  14. "in jat.sh Shellfu module; use \`sfdoc jat\` to access its" \
  15. "documentation."
  16. }
  17. JATS__COMPAT=0.0
  18. sprop() {
  19. #
  20. # Get property $1 of suite at $SuiteDir
  21. #
  22. local pname=$1
  23. local pvalue
  24. local dvalue
  25. local fpath
  26. case $SuiteDir in
  27. .) fpath=.jats/$pname ;;
  28. *) fpath=$SuiteDir/.jats/$pname ;;
  29. esac
  30. case $pname in
  31. domain) dvalue="jats.example.org" ;;
  32. ns) dvalue="anonns" ;;
  33. sut_nicename) dvalue=$(sprop sut_pname) ;;
  34. sut_pname) dvalue="anonsut" ;;
  35. sut_url) dvalue="https://example.org/anonsut" ;;
  36. url) dvalue="https://$(sprop domain)/$(sprop ns)" ;;
  37. format) : ;;
  38. version) dvalue="0.0.0+0._jats_no_version_" ;;
  39. *) warn "unknown property: $pname"; return 2 ;;
  40. esac
  41. pvalue=$(cat "$fpath" 2>/dev/null)
  42. debug -v pname dvalue pvalue
  43. if test -n "$pvalue"; then
  44. echo "$pvalue"
  45. return 0
  46. elif test "$pname" == "format"; then
  47. warn "missing mandatory property: $fpath"
  48. return 3
  49. else
  50. echo "$dvalue"
  51. fi
  52. }
  53. discover() {
  54. #
  55. # Find tests under dirs ${FindDirs[@]}
  56. #
  57. local SuiteDir # each suite root dir
  58. local SuiteFmt # suite format version
  59. find "${FindDirs[@]}" -type d -path '*/.jats' \
  60. | sed 's:/\.jats::' \
  61. | while read -r SuiteDir; do
  62. debug -v SuiteDir
  63. SuiteFmt=$(sprop format) || continue
  64. debug -v SuiteFmt
  65. test "$SuiteFmt" == "$JATS__COMPAT" || continue
  66. SuiteDomain=$(sprop domain)
  67. SuiteNs=$(sprop ns)
  68. SuiteSutPname=$(sprop sut_pname)
  69. SuiteVersion=$(sprop version)
  70. SuiteId=$(
  71. echo -n "jats://$SuiteDomain/$SuiteNs"
  72. test -n "$SuiteSutPname" && echo -n "/$SuiteSutPname"
  73. echo //
  74. )
  75. case $Fmt in
  76. id) echo "$SuiteId" ;;
  77. path) echo "$SuiteDir" ;;
  78. version) echo "$SuiteVersion" ;;
  79. esac
  80. done
  81. }
  82. main() {
  83. local SuiteDir
  84. local FindDirs=()
  85. local Fmt=path
  86. while true; do case $1 in
  87. -f) Fmt=$2; shift 2 || usage -w "missing FMT" ;;
  88. -*) usage -w "unknown argument: $1" ;;
  89. *) break ;;
  90. esac done
  91. FindDirs=("$@")
  92. case $Fmt in
  93. id|path|version) : ;;
  94. *) usage -w "unknown FMT: $Fmt" ;;
  95. esac
  96. debug -v FindDirs Fmt
  97. discover
  98. }
  99. main "$@"