set(APP_NAME cpp-tests)

if(WIN32)
  set(PLATFORM_SRC proj.win32/main.cpp)
  set(RES_PREFIX "")
elseif(MACOSX)
  set(PLATFORM_SRC proj.mac/main.cpp)

  file(GLOB_RECURSE RES_FILES Resources/*)
  cocos_mark_resources(FILES ${RES_FILES} BASEDIR Resources)
  list(APPEND PLATFORM_SRC ${RES_FILES})

elseif(LINUX)
  set(PLATFORM_SRC proj.linux/main.cpp)
  set(RES_PREFIX "/Resources")
else()
  message( FATAL_ERROR "Unsupported platform, CMake will exit" )
endif()

set(TESTS_SRC
  Classes/ActionManagerTest/ActionManagerTest.cpp
  Classes/ActionsEaseTest/ActionsEaseTest.cpp
  Classes/ActionsProgressTest/ActionsProgressTest.cpp
  Classes/ActionsTest/ActionsTest.cpp
  Classes/AllocatorTest/AllocatorTest.cpp
  Classes/BillBoardTest/BillBoardTest.cpp
  Classes/BugsTest/Bug-1159.cpp
  Classes/BugsTest/Bug-1174.cpp
  Classes/BugsTest/Bug-350.cpp
  Classes/BugsTest/Bug-422.cpp
  Classes/BugsTest/Bug-458/Bug-458.cpp
  Classes/BugsTest/Bug-458/QuestionContainerSprite.cpp
  Classes/BugsTest/Bug-624.cpp
  Classes/BugsTest/Bug-886.cpp
  Classes/BugsTest/Bug-899.cpp
  Classes/BugsTest/Bug-914.cpp
  Classes/BugsTest/BugsTest.cpp
  Classes/BugsTest/Bug-Child.cpp
  Classes/Camera3DTest/Camera3DTest.cpp
  Classes/ChipmunkTest/ChipmunkTest.cpp
  Classes/ClickAndMoveTest/ClickAndMoveTest.cpp
  Classes/ClippingNodeTest/ClippingNodeTest.cpp
  Classes/CocosDenshionTest/CocosDenshionTest.cpp
  Classes/CurlTest/CurlTest.cpp
  Classes/CurrentLanguageTest/CurrentLanguageTest.cpp
  Classes/DrawPrimitivesTest/DrawPrimitivesTest.cpp
  Classes/EffectsAdvancedTest/EffectsAdvancedTest.cpp
  Classes/EffectsTest/EffectsTest.cpp
  Classes/ExtensionsTest/AssetsManagerExTest/AssetsManagerExTest.cpp
  Classes/ExtensionsTest/CocosBuilderTest/ButtonTest/ButtonTestLayer.cpp
  Classes/ExtensionsTest/CocosBuilderTest/CocosBuilderTest.cpp
  Classes/ExtensionsTest/CocosBuilderTest/HelloCocosBuilder/HelloCocosBuilderLayer.cpp
  Classes/ExtensionsTest/CocosBuilderTest/AnimationsTest/AnimationsTestLayer.cpp
  Classes/ExtensionsTest/CocosBuilderTest/MenuTest/MenuTestLayer.cpp
  Classes/ExtensionsTest/CocosBuilderTest/TestHeader/TestHeaderLayer.cpp
  Classes/ExtensionsTest/CocosBuilderTest/TimelineCallbackTest/TimelineCallbackTestLayer.cpp
  Classes/ExtensionsTest/ControlExtensionTest/CCControlButtonTest/CCControlButtonTest.cpp
  Classes/ExtensionsTest/ControlExtensionTest/CCControlColourPicker/CCControlColourPickerTest.cpp
  Classes/ExtensionsTest/ControlExtensionTest/CCControlScene.cpp
  Classes/ExtensionsTest/ControlExtensionTest/CCControlSceneManager.cpp
  Classes/ExtensionsTest/ControlExtensionTest/CCControlSliderTest/CCControlSliderTest.cpp
  Classes/ExtensionsTest/ControlExtensionTest/CCControlSwitchTest/CCControlSwitchTest.cpp
  Classes/ExtensionsTest/ControlExtensionTest/CCControlPotentiometerTest/CCControlPotentiometerTest.cpp
  Classes/ExtensionsTest/ControlExtensionTest/CCControlStepperTest/CCControlStepperTest.cpp
  Classes/ExtensionsTest/TableViewTest/TableViewTestScene.cpp
  Classes/ExtensionsTest/TableViewTest/CustomTableViewCell.cpp
  Classes/ExtensionsTest/ExtensionsTest.cpp
  Classes/ExtensionsTest/NotificationCenterTest/NotificationCenterTest.cpp
  Classes/ExtensionsTest/NetworkTest/HttpClientTest.cpp
  Classes/ExtensionsTest/CocoStudioArmatureTest/ArmatureScene.cpp
  Classes/ExtensionsTest/CocoStudioActionTimelineTest/ActionTimelineTestScene.cpp
  Classes/ExtensionsTest/CocoStudioComponentsTest/ComponentsTestScene.cpp
  Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.cpp
  Classes/ExtensionsTest/CocoStudioComponentsTest/GameOverScene.cpp
  Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.cpp
  Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.cpp
  Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.cpp
  Classes/ExtensionsTest/CocoStudioSceneTest/SceneEditorTest.cpp
  Classes/ExtensionsTest/CocoStudioSceneTest/TriggerCode/acts.cpp
  Classes/ExtensionsTest/CocoStudioSceneTest/TriggerCode/cons.cpp
  Classes/UITest/CocoStudioGUITest/CocoStudioGUITest.cpp
  Classes/UITest/CocoStudioGUITest/CocosGUIScene.cpp
  Classes/UITest/CocoStudioGUITest/GUIEditorTest.cpp
  Classes/UITest/CocoStudioGUITest/CustomGUIScene.cpp
  Classes/UITest/CocoStudioGUITest/UIScene.cpp
  Classes/UITest/CocoStudioGUITest/UIScale9SpriteTest.cpp
  Classes/UITest/CocoStudioGUITest/UISceneManager.cpp
  Classes/UITest/CocoStudioGUITest/CocostudioParserTest/CocostudioParserJsonTest.cpp
  Classes/UITest/CocoStudioGUITest/CocostudioParserTest.cpp 
  Classes/UITest/CocoStudioGUITest/UIButtonTest/UIButtonTest.cpp
  Classes/UITest/CocoStudioGUITest/UIFocusTest/UIFocusTest.cpp
  Classes/UITest/CocoStudioGUITest/UICheckBoxTest/UICheckBoxTest.cpp
  Classes/UITest/CocoStudioGUITest/UIImageViewTest/UIImageViewTest.cpp
  Classes/UITest/CocoStudioGUITest/UILayoutTest/UILayoutTest.cpp
  Classes/UITest/CocoStudioGUITest/UIListViewTest/UIListViewTest.cpp
  Classes/UITest/CocoStudioGUITest/UILoadingBarTest/UILoadingBarTest.cpp
  Classes/UITest/CocoStudioGUITest/UIPageViewTest/UIPageViewTest.cpp
  Classes/UITest/CocoStudioGUITest/UIScrollViewTest/UIScrollViewTest.cpp
  Classes/UITest/CocoStudioGUITest/UISliderTest/UISliderTest.cpp
  Classes/UITest/CocoStudioGUITest/UITextTest/UITextTest.cpp
  Classes/UITest/CocoStudioGUITest/UITextAtlasTest/UITextAtlasTest.cpp
  Classes/UITest/CocoStudioGUITest/UITextBMFontTest/UITextBMFontTest.cpp
  Classes/UITest/CocoStudioGUITest/UITextFieldTest/UITextFieldTest.cpp
  Classes/UITest/CocoStudioGUITest/UIWidgetAddNodeTest/UIWidgetAddNodeTest.cpp
  Classes/UITest/CocoStudioGUITest/UIRichTextTest/UIRichTextTest.cpp
  Classes/UITest/CocoStudioGUITest/UIScene_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UISceneManager_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UIButtonTest/UIButtonTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UICheckBoxTest/UICheckBoxTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UIImageViewTest/UIImageViewTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UILayoutTest/UILayoutTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UIListViewTest/UIListViewTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UILoadingBarTest/UILoadingBarTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UIPageViewTest/UIPageViewTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UIScrollViewTest/UIScrollViewTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UISliderTest/UISliderTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UITextTest/UITextTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UITextAtlasTest/UITextAtlasTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UITextBMFontTest/UITextBMFontTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UITextFieldTest/UITextFieldTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/UIWidgetAddNodeTest/UIWidgetAddNodeTest_Editor.cpp
  Classes/UITest/CocoStudioGUITest/CustomWidget/CustomImageView.cpp
  Classes/UITest/CocoStudioGUITest/CustomWidget/CustomImageViewReader.cpp
  Classes/UITest/CocoStudioGUITest/CustomWidget/CustomParticleWidget.cpp
  Classes/UITest/CocoStudioGUITest/CustomWidget/CustomParticleWidgetReader.cpp
  Classes/UITest/CocoStudioGUITest/CustomWidget/CustomReader.cpp
  Classes/UITest/CocoStudioGUITest/CustomTest/CustomImageTest/CustomImageTest.cpp
  Classes/UITest/CocoStudioGUITest/CustomTest/CustomParticleWidgetTest/CustomParticleWidgetTest.cpp
  Classes/UITest/CocoStudioGUITest/CustomTest/CustomWidgetCallbackBindTest/CustomRootNode.cpp
  Classes/UITest/CocoStudioGUITest/CustomTest/CustomWidgetCallbackBindTest/CustomRootNodeReader.cpp
  Classes/UITest/CocoStudioGUITest/CustomTest/CustomWidgetCallbackBindTest/CustomWidgetCallbackBindTest.cpp
  Classes/NewRendererTest/NewRendererTest.cpp
  Classes/NewEventDispatcherTest/NewEventDispatcherTest.cpp
  Classes/NewAudioEngineTest/NewAudioEngineTest.cpp
  Classes/FontTest/FontTest.cpp
  Classes/IntervalTest/IntervalTest.cpp
  Classes/InputTest/MouseTest.cpp
  Classes/LabelTest/LabelTest.cpp
  Classes/LabelTest/LabelTestNew.cpp
  Classes/LayerTest/LayerTest.cpp
  Classes/LightTest/LightTest.cpp
  Classes/MenuTest/MenuTest.cpp
  Classes/MotionStreakTest/MotionStreakTest.cpp
  Classes/MutiTouchTest/MutiTouchTest.cpp
  Classes/NodeTest/NodeTest.cpp
  Classes/OpenURLTest/OpenURLTest.cpp
  Classes/ParallaxTest/ParallaxTest.cpp
  Classes/ParticleTest/ParticleTest.cpp
  Classes/PerformanceTest/PerformanceAllocTest.cpp
  Classes/PerformanceTest/PerformanceNodeChildrenTest.cpp
  Classes/PerformanceTest/PerformanceParticleTest.cpp
  Classes/PerformanceTest/PerformanceSpriteTest.cpp
  Classes/PerformanceTest/PerformanceTest.cpp
  Classes/PerformanceTest/PerformanceTextureTest.cpp
  Classes/PerformanceTest/PerformanceTouchesTest.cpp
  Classes/PerformanceTest/PerformanceLabelTest.cpp
  Classes/PerformanceTest/PerformanceRendererTest.cpp
  Classes/PerformanceTest/PerformanceContainerTest.cpp
  Classes/PerformanceTest/PerformanceEventDispatcherTest.cpp
  Classes/PerformanceTest/PerformanceScenarioTest.cpp
  Classes/PerformanceTest/PerformanceCallbackTest.cpp
  Classes/PerformanceTest/PerformanceMathTest.cpp
  Classes/PhysicsTest/PhysicsTest.cpp
  Classes/ReleasePoolTest/ReleasePoolTest.cpp
  Classes/RenderTextureTest/RenderTextureTest.cpp
  Classes/RotateWorldTest/RotateWorldTest.cpp
  Classes/SceneTest/SceneTest.cpp
  Classes/SchedulerTest/SchedulerTest.cpp
  Classes/ShaderTest/ShaderTest.cpp
  Classes/ShaderTest/ShaderTest2.cpp
  Classes/SpriteTest/SpriteTest.cpp
  Classes/Sprite3DTest/Sprite3DTest.cpp
  Classes/Sprite3DTest/DrawNode3D.cpp
  Classes/TextInputTest/TextInputTest.cpp
  Classes/Texture2dTest/Texture2dTest.cpp
  Classes/TexturePackerEncryptionTest/TextureAtlasEncryptionTest.cpp
  Classes/TextureCacheTest/TextureCacheTest.cpp
  Classes/TileMapTest/TileMapTest.cpp
  Classes/TileMapTest/TileMapTest2.cpp
  Classes/TouchesTest/Ball.cpp
  Classes/TouchesTest/Paddle.cpp
  Classes/TouchesTest/TouchesTest.cpp
  Classes/TransitionsTest/TransitionsTest.cpp
  Classes/UserDefaultTest/UserDefaultTest.cpp
  Classes/ZwoptexTest/ZwoptexTest.cpp
  Classes/FileUtilsTest/FileUtilsTest.cpp
  Classes/SpineTest/SpineTest.cpp
  Classes/DataVisitorTest/DataVisitorTest.cpp
  Classes/ConfigurationTest/ConfigurationTest.cpp
  Classes/ConsoleTest/ConsoleTest.cpp
  Classes/UnitTest/RefPtrTest.cpp
  Classes/UnitTest/UnitTest.cpp
  Classes/UITest/UITest.cpp
  Classes/controller.cpp
  Classes/testBasic.cpp
  Classes/AppDelegate.cpp
  Classes/BaseTest.cpp
  Classes/VisibleRect.cpp
  ${PLATFORM_SRC}
)

if(USE_CHIPMUNK)
  include_directories(${CHIPMUNK_INCLUDE_DIRS})
endif()

if(USE_BOX2D)
  list(APPEND TESTS_SRC
    Classes/Box2DTest/Box2dTest.cpp
    Classes/Box2DTestBed/Box2dView.cpp
    Classes/Box2DTestBed/GLES-Render.cpp
    Classes/Box2DTestBed/Test.cpp
    Classes/Box2DTestBed/TestEntries.cpp
    )
endif()

if(LINUX)
    set(EXTENDED_TESTS_SRC
    )
else()
    set(EXTENDED_TESTS_SRC
        Classes/ExtensionsTest/NetworkTest/HttpClientTest.cpp
        Classes/ExtensionsTest/NetworkTest/SocketIOTest.cpp
        Classes/ExtensionsTest/NetworkTest/WebSocketTest.cpp

        Classes/UITest/CocoStudioGUITest/CocoStudioGUITest.cpp
        Classes/UITest/CocoStudioGUITest/CocosGUIScene.cpp
        Classes/UITest/CocoStudioGUITest/CocostudioParserTest.cpp
        Classes/UITest/CocoStudioGUITest/CustomGUIScene.cpp
        Classes/UITest/CocoStudioGUITest/GUIEditorTest.cpp
        Classes/UITest/CocoStudioGUITest/UIEditBoxTest.cpp
        Classes/UITest/CocoStudioGUITest/UIScale9SpriteTest.cpp
        Classes/UITest/CocoStudioGUITest/UIScene.cpp
        Classes/UITest/CocoStudioGUITest/UISceneManager.cpp
        Classes/UITest/CocoStudioGUITest/UISceneManager_Editor.cpp
        Classes/UITest/CocoStudioGUITest/UIScene_Editor.cpp
    )
endif()


include_directories(
  Classes
  ${CMAKE_SOURCE_DIR}/cocos/editor-support
)

# add the executable
add_executable(${APP_NAME}
  ${TESTS_SRC}
  ${EXTENDED_TESTS_SRC}
)

target_link_libraries(${APP_NAME}
  cocos2d
)

if(MACOSX OR APPLE)
  set_target_properties(${APP_NAME} PROPERTIES
      MACOSX_BUNDLE 1
      RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
      )

else()
    set(APP_BIN_DIR "${CMAKE_BINARY_DIR}/bin/${APP_NAME}")

    set_target_properties(${APP_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${APP_BIN_DIR}")

    pre_build(${APP_NAME}
      COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Resources ${APP_BIN_DIR}${RES_PREFIX}
      )
endif()