# Copyright 2006-2008 The FLWOR Foundation.#   
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# create the testing file and list of tests

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/guestbook_main.xq ${CMAKE_CURRENT_BINARY_DIR}/guestbook_main.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mini_http.xq ${CMAKE_CURRENT_BINARY_DIR}/mini_http.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mini_audit.xq ${CMAKE_CURRENT_BINARY_DIR}/mini_audit.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/guestbook.xq ${CMAKE_CURRENT_BINARY_DIR}/guestbook.xq)

#belongs to test cxx_api_changes.cpp
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cxx_api_ch1.xq ${CMAKE_CURRENT_BINARY_DIR}/cxx_api_ch1.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cxx_api_ch2.xq ${CMAKE_CURRENT_BINARY_DIR}/cxx_api_ch2.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cxx_api_ch3.xq ${CMAKE_CURRENT_BINARY_DIR}/cxx_api_ch3.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cxx_api_ch4.xq ${CMAKE_CURRENT_BINARY_DIR}/cxx_api_ch4.xq)
DECLARE_ZORBA_MODULE(URI "http://www.zorba-xquery.com/modules/testGetExtVarA"
  FILE "testGetExtVarA.xq" TEST_ONLY)  
DECLARE_ZORBA_MODULE(URI "http://www.zorba-xquery.com/modules/testGetExtVarB"
  FILE "testGetExtVarB.xq" TEST_ONLY)

#belongs to test external_function.cpp
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ext_mod.xq ${CMAKE_CURRENT_BINARY_DIR}/ext_mod.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ext_mod2.xq ${CMAKE_CURRENT_BINARY_DIR}/ext_mod2.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ext_main.xq ${CMAKE_CURRENT_BINARY_DIR}/ext_main.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ext_main2.xq ${CMAKE_CURRENT_BINARY_DIR}/ext_main2.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ext_main3.xq ${CMAKE_CURRENT_BINARY_DIR}/ext_main3.xq)

#belongs to test no_folding.cpp
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/fold_mod1.xq ${CMAKE_CURRENT_BINARY_DIR}/fold_mod1.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/fold_mod2.xq ${CMAKE_CURRENT_BINARY_DIR}/fold_mod2.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/fold_main.xq ${CMAKE_CURRENT_BINARY_DIR}/fold_main.xq)

#belongs to test ext_in_opt.cpp
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ext_in_opt.xq ${CMAKE_CURRENT_BINARY_DIR}/ext_in_opt.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ext_in_opt.xqlib ${CMAKE_CURRENT_BINARY_DIR}/ext_in_opt.xqlib)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ext_in_opt2.xqlib ${CMAKE_CURRENT_BINARY_DIR}/ext_in_opt2.xqlib)

#belongs to test collection.cpp
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/collection1.xq ${CMAKE_CURRENT_BINARY_DIR}/collection1.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/collection2.xq ${CMAKE_CURRENT_BINARY_DIR}/collection2.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/collection1.xqlib ${CMAKE_CURRENT_BINARY_DIR}/collection1.xqlib)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/collection2.xqlib ${CMAKE_CURRENT_BINARY_DIR}/collection2.xqlib)

#belongs to test main_sequential
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/main_sequential.xq ${CMAKE_CURRENT_BINARY_DIR}/main_sequential.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/main_sequential.xqlib ${CMAKE_CURRENT_BINARY_DIR}/main_sequential.xqlib)

# belongs to the staticcollectionmanager test
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/main_invoke.xq ${CMAKE_CURRENT_BINARY_DIR}/main_invoke.xq)

#belongs to test context_item
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/context_item1.xq ${CMAKE_CURRENT_BINARY_DIR}/context_item1.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/context_item2.xq ${CMAKE_CURRENT_BINARY_DIR}/context_item2.xq)

#belongs to streamable_string
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/streamable_string_query_1.xq ${CMAKE_CURRENT_BINARY_DIR}/streamable_string_query_1.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/streamable_string_query_2.xq ${CMAKE_CURRENT_BINARY_DIR}/streamable_string_query_2.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/streamable_string.cpp ${CMAKE_CURRENT_BINARY_DIR}/streamable_string.cpp)

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module1.xq ${CMAKE_CURRENT_BINARY_DIR}/module1.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module2.xq ${CMAKE_CURRENT_BINARY_DIR}/module2.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module3.xq ${CMAKE_CURRENT_BINARY_DIR}/module3.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module4.xq ${CMAKE_CURRENT_BINARY_DIR}/module4.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module5.xq ${CMAKE_CURRENT_BINARY_DIR}/module5.xq)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/module6.xq ${CMAKE_CURRENT_BINARY_DIR}/module6.xq)

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/schema1.xsd ${CMAKE_CURRENT_BINARY_DIR}/schema1.xsd)

SET(UNIT_TESTS_SRCS
  multiple_runs.cpp
  plan_serializer.cpp
  call_stack.cpp
  cxx_api_changes.cpp
  external_function.cpp
  no_folding.cpp
  ordpath_big.cpp
  uri_file_decoding_test.cpp
  ext_in_opt.cpp
  collection.cpp
  test_audit.cpp
  streamable_string.cpp
  main_sequential.cpp
  context_item.cpp
  datetime.cpp
  invoke.cpp
  xquery_functions.cpp
  xmldatamanager.cpp
  staticcollectionmanager.cpp
  test_static_context.cpp
)

# multithread_simple.cpp
# multithread_stress_test.cpp

IF(ZORBA_WITH_DEBUGGER)
  LIST(APPEND SPEC_FILES "debug_iter_serialization.cpp")
ENDIF(ZORBA_WITH_DEBUGGER)

IF(WIN32)
  # SF#3191791
  LIST(REMOVE_ITEM UNIT_TESTS_SRCS "string_test.cpp")
ENDIF(WIN32)

CREATE_TEST_SOURCELIST(UnitTests
  UnitTests.cpp
  ${UNIT_TESTS_SRCS}
)

# add the executable
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/test/driver")
ZORBA_GENERATE_EXE(UnitTests "${UnitTests}" "" "" "")

# remove the test driver source file
SET (TestsToRun ${UnitTests})
REMOVE (TestsToRun UnitTests.cpp)

MESSAGE(STATUS "Adding unit tests for CTest")

# add all the ADD_TEST for each testing
FOREACH (test ${TestsToRun})
  GET_FILENAME_COMPONENT(TName ${test} NAME_WE)
  SET (TestName "test/unit/${TName}")
  ZORBA_ADD_TEST(${TestName} UnitTests ${TName})
ENDFOREACH(test)

# Add lib-internal unit tests
ZORBA_GENERATE_EXE(LibUnitTest lib_unit_test.cpp "" "" "")

# ADD NEW UNIT TESTS HERE
ZORBA_ADD_TEST("test/libunit/base64" LibUnitTest base64)
ZORBA_ADD_TEST("test/libunit/base64_streambuf" LibUnitTest base64_streambuf)
IF (NOT WIN32)
  # disabled because of bug lp:867271
  ZORBA_ADD_TEST("test/libunit/string" LibUnitTest string)
ENDIF (NOT WIN32)
ZORBA_ADD_TEST("test/libunit/uri" LibUnitTest uri)
EXPECTED_FAILURE(test/libunit/uri 3118348)
IF (NOT ZORBA_NO_ICU)
  ZORBA_ADD_TEST("test/libunit/icu_streambuf" LibUnitTest icu_streambuf)
ENDIF (NOT ZORBA_NO_ICU)
ZORBA_ADD_TEST("test/libunit/json_parser" LibUnitTest json_parser)
ZORBA_ADD_TEST("test/libunit/parameters" LibUnitTest parameters)
ZORBA_ADD_TEST("test/libunit/time_parse" LibUnitTest time_parse)
#ZORBA_ADD_TEST("test/libunit/memory_manager" LibUnitTest memory_manager)
IF (NOT ZORBA_NO_FULL_TEXT)
  ZORBA_ADD_TEST("test/libunit/stemmer" LibUnitTest stemmer)
  ZORBA_ADD_TEST("test/libunit/thesaurus" LibUnitTest thesaurus)
  ZORBA_ADD_TEST("test/libunit/tokenizer" LibUnitTest tokenizer)
ENDIF (NOT ZORBA_NO_FULL_TEXT)
IF (NOT ZORBA_HAVE_UNIQUE_PTR)
  ZORBA_ADD_TEST("test/libunit/unique_ptr" LibUnitTest unique_ptr)
ENDIF (NOT ZORBA_HAVE_UNIQUE_PTR)
IF (NOT ZORBA_HAVE_UNORDERED_MAP)
  ZORBA_ADD_TEST("test/libunit/unordered_map" LibUnitTest unordered_map)
ENDIF (NOT ZORBA_HAVE_UNORDERED_MAP)
IF (NOT ZORBA_HAVE_UNORDERED_SET)
  ZORBA_ADD_TEST("test/libunit/unordered_set" LibUnitTest unordered_set)
ENDIF (NOT ZORBA_HAVE_UNORDERED_SET)
ZORBA_ADD_TEST("test/libunit/utf8_streambuf" LibUnitTest utf8_streambuf)

# vim:set et sw=2 ts=2:
