#!/bin/bash

# This program will generate test documenation from the robot test cases.

# Description of argument(s):
# test_dir_path            Test directory where robot test cases are available.
# test_case_doc_file_path  The test case document file path to be stored.


function get_parms {

  # Get program parms.

  test_dir_path="${1}" ; shift
  test_case_doc_file_path="${1}" ; shift

  return 0

}


function validate_parms {

  # Validate program parameters.

  num_parms="${1}" ; shift

  (( ${num_parms} == 0 )) && return 0

  if [ -z "${test_dir_path}" ] ; then
    echo "**ERROR** You must provide test directory as the first positional" \
         "parameter." >&2
    return 1
  fi

  if [ -z "${test_case_doc_file_path}" ] ; then
    echo "**ERROR** You must provide file path as the second positional" \
         "parameter." >&2
    return 1
  fi

  return 0

}


function generate_all_test_document {

  # Generate all test case documents

  local ret_code=0
  python -m robot.testdoc tests testsdirectoryTCdocs.html || ret_code=1
  python -m robot.testdoc extended extendeddirectoryTCdocs.html || ret_code=1
  python -m robot.testdoc gui guidirectoryTCdocs.html || ret_code=1
  python -m robot.testdoc systest systestdirectoryTCdocs.html || ret_code=1
  python -m robot.testdoc xcat xcatdirectoryTCdocs.html || ret_code=1
  python -m robot.testdoc mnfg mnfgdirectoryTCdocs.html || ret_code=1
  python -m robot.testdoc tools toolsdirectoryTCdocs.html || ret_code=1

  return ${ret_code}
}


function main_function {

  get_parms "$@" || return 1

  validate_parms $# || return 1

  if (( ${num_parms} == 0 )) ; then
    generate_all_test_document || return 1
    return 0
  fi

  echo ${test_dir_path} ${test_case_doc_file_path}
  python -m robot.testdoc ${test_dir_path} ${test_case_doc_file_path}\
    || return 1

  return 0

}


# Main

  main_function "${@}"
  rc="${?}"
  exit "${rc}"

