# fss-0005 iki-0002
#
# Performs runtime testing, which includes building the program.
#
# To keep things simple, this only runs tests against fss_read.
#

settings:
  fail exit
  modes individual individual_thread level monolithic clang test fanalyzer thread threadless

  environment PATH LD_LIBRARY_PATH
  environment LANG LC_ALL LC_COLLATE LC_CTYPE LC_FASTMSG LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LOCPATH NLSPATH

  # Change this to a valid shell script, such as "bash" or "zsh".
  parameter script bash

  # To build the specific tests files use an empty string instead of "test-".
  parameter test_prefix test-

main:
  build settings
  build settings.main
  build settings.basic
  build settings.basic_list
  build settings.extended
  build settings.extended_list
  build settings.embedded_list
  build settings.payload

  operate build_path
  operate ld_library_path
  operate generate_process
  operate verify_process

verify:
  operate build_path
  operate ld_library_path
  operate verify_process

generate:
  operate build_path
  operate ld_library_path
  operate generate_process

generate_process:
  print
  print Generating Test 0000 for Basic (FSS-0000).
  print

  touch directory parameter:"build_path"test/fss_0000
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0000 tests/runtime/fss_0000/source/test-0000-quotes_and_escapes.fss parameter:"build_path"test/fss_0000

  print
  print Generating Test 0001 for Basic (FSS-0000).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0000 tests/runtime/fss_0000/source/test-0001-unicode.fss parameter:"build_path"test/fss_0000

  print
  print Generating Test 0002 for Basic (FSS-0000).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0000 tests/runtime/fss_0000/source/test-0002-order.fss parameter:"build_path"test/fss_0000

  print
  print Generating Test 0000 for Extended (FSS-0001).
  print

  touch directory parameter:"build_path"test/fss_0001
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0001 tests/runtime/fss_0001/source/test-0000-quotes_and_escapes.fss parameter:"build_path"test/fss_0001

  print
  print Generating Test 0001 for Extended (FSS-0001).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0001 tests/runtime/fss_0001/source/test-0001-unicode.fss parameter:"build_path"test/fss_0001

  print
  print Generating Test 0002 for Extended (FSS-0002).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0002 tests/runtime/fss_0001/source/test-0002-order.fss parameter:"build_path"test/fss_0001

  print
  print Generating Test 0000 for Basic List (FSS-0002).
  print

  touch directory parameter:"build_path"test/fss_0002
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0002 tests/runtime/fss_0002/source/test-0000-basic.fss parameter:"build_path"test/fss_0002

  print
  print Generating Test 0001 for Basic List (FSS-0002).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0002 tests/runtime/fss_0002/source/test-0001-empty_name_list.fss parameter:"build_path"test/fss_0002

  print
  print Generating Test 0002 for Basic List (FSS-0002).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0002 tests/runtime/fss_0002/source/test-0002-mixed.fss parameter:"build_path"test/fss_0002

  print
  print Generating Test 0003 for Basic List (FSS-0002).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0002 tests/runtime/fss_0002/source/test-0003-object_space.fss parameter:"build_path"test/fss_0002

  print
  print Generating Test 0004 for Basic List (FSS-0002).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0002 tests/runtime/fss_0002/source/test-0004-order.fss parameter:"build_path"test/fss_0002

  print
  print Generating Test 0000 for Extended List (FSS-0003).
  print

  touch directory parameter:"build_path"test/fss_0003
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0003 tests/runtime/fss_0003/source/test-0000-basic.fss parameter:"build_path"test/fss_0003

  print
  print Generating Test 0001 for Extended List (FSS-0003).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0003 tests/runtime/fss_0003/source/test-0001-empty_name_list.fss parameter:"build_path"test/fss_0003

  print
  print Generating Test 0002 for Extended List (FSS-0003).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0003 tests/runtime/fss_0003/source/test-0002-mixed.fss parameter:"build_path"test/fss_0003

  print
  print Generating Test 0003 for Extended List (FSS-0003).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0003 tests/runtime/fss_0003/source/test-0003-object_space.fss parameter:"build_path"test/fss_0003

  print
  print Generating Test 0004 for Extended List (FSS-0003).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0003 tests/runtime/fss_0003/source/test-0004-order.fss parameter:"build_path"test/fss_0003

  print
  print Generating Test 0000 for Embedded List (FSS-0008).
  print

  touch directory parameter:"build_path"test/fss_0008
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0008 tests/runtime/fss_0008/source/test-0000-basic.fss parameter:"build_path"test/fss_0008

  print
  print Generating Test 0001 for Embedded List (FSS-0008).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0008 tests/runtime/fss_0008/source/test-0001-empty_name_list.fss parameter:"build_path"test/fss_0008

  print
  print Generating Test 0002 for Embedded List (FSS-0008).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0008 tests/runtime/fss_0008/source/test-0002-mixed.fss parameter:"build_path"test/fss_0008

  print
  print Generating Test 0003 for Embedded List (FSS-0008).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0008 tests/runtime/fss_0008/source/test-0003-object_space.fss parameter:"build_path"test/fss_0008

  print
  print Generating Test 0004 for Embedded List (FSS-0008).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0008 tests/runtime/fss_0008/source/test-0004-nested_simple.fss parameter:"build_path"test/fss_0008

  print
  print Generating Test 0005 for Embedded List (FSS-0008).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"0008 tests/runtime/fss_0008/source/test-0005-order.fss parameter:"build_path"test/fss_0008

  print
  print Generating Test 0000 for Payload (FSS-000E).
  print

  touch directory parameter:"build_path"test/fss_000e
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"000e tests/runtime/fss_000e/source/test-0000-basic.fss parameter:"build_path"test/fss_000e

  print
  print Generating Test 0001 for Payload (FSS-000E).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"000e tests/runtime/fss_000e/source/test-0001-empty_name_list.fss parameter:"build_path"test/fss_000e

  print
  print Generating Test 0002 for Payload (FSS-000E).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"000e tests/runtime/fss_000e/source/test-0002-mixed.fss parameter:"build_path"test/fss_000e

  print
  print Generating Test 0003 for Payload (FSS-000E).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"000e tests/runtime/fss_000e/source/test-0003-object_space.fss parameter:"build_path"test/fss_000e

  print
  print Generating Test 0004 for Payload (FSS-000E).
  print
  run parameter:"script" ./tests/runtime/script/generate.sh parameter:"test_prefix"000e tests/runtime/fss_000e/source/test-0004-order.fss parameter:"build_path"test/fss_000e

verify_process:
  print
  print Verifying Tests for Basic (FSS-0000).
  print
  run parameter:"script" ./tests/runtime/script/verify.sh build/test/fss_0000/ tests/runtime/fss_0000/expect/ "Basic (FSS-0000)"

  print
  print Verifying Tests for Extended (FSS-0001).
  print
  run parameter:"script" ./tests/runtime/script/verify.sh build/test/fss_0001/ tests/runtime/fss_0001/expect/ "Extended (FSS-0001)"

  print
  print Verifying Tests for Basic List (FSS-0002).
  print
  run parameter:"script" ./tests/runtime/script/verify.sh build/test/fss_0002/ tests/runtime/fss_0002/expect/ "Basic List (FSS-0002)"

  print
  print Verifying Tests for Extended List (FSS-0003).
  print
  run parameter:"script" ./tests/runtime/script/verify.sh build/test/fss_0003/ tests/runtime/fss_0003/expect/ "Extended List (FSS-0003)"

  print
  print Verifying Tests for Embedded List (FSS-0008).
  print
  run parameter:"script" ./tests/runtime/script/verify.sh build/test/fss_0008/ tests/runtime/fss_0008/expect/ "Embedded List (FSS-0008)"

  print
  print Verifying Tests for Payload (FSS-000E).
  print
  run parameter:"script" ./tests/runtime/script/verify.sh build/test/fss_000e/ tests/runtime/fss_000e/expect/ "Payload (FSS-000E)"

build_path:
  parameter build_path build/

  if parameter build:value
    parameter build_path parameter:"build:value"

  touch directory parameter:"build_path" parameter:"build_path"test

  # Setup the PATH to use the just compiled programs.
  define PATH parameter:"build_path"programs/static:parameter:"build_path"programs/shared:define:"PATH"

ld_library_path:
  if define LD_LIBRARY_PATH
  and parameter work:value
    define LD_LIBRARY_PATH 'parameter:"build_path"libraries/shared:parameter:"work:value"libraries/shared:define:"LD_LIBRARY_PATH"'

  else
  if define LD_LIBRARY_PATH
    define LD_LIBRARY_PATH 'parameter:"build_path"libraries/shared:define:"LD_LIBRARY_PATH"'

  else
  if parameter work:value
    define LD_LIBRARY_PATH 'parameter:"build_path"libraries/shared:parameter:"work:value"libraries/shared'

  else
    define LD_LIBRARY_PATH 'parameter:"build_path"libraries/shared'

help:
  print
  print context:'title'Fakefile Options for FSS Read Software Testing.context:'reset'
  print

  print
  print The following operations are available\:
  print "  - context:'notable'help:context:'reset'      Perform the help operation, printing this message."
  print "  - context:'notable'main:context:'reset'      Build the main program, generate the data, and verify the tests."
  print "  - context:'notable'generate:context:'reset'  Generate the data (main program must be built)."
  print "  - context:'notable'verify:context:'reset'    Verify the tests (main program must be built)."
