# -----------------------------------------------------------------------------
#
# -----------------------------------------------------------------------------

set(CMAKE_CTEST_COMMAND ctest -V)

add_subdirectory(${GMOCK_DIR} ${CMAKE_BINARY_DIR}/gmock)

include_directories(SYSTEM ${GMOCK_DIR}/gtest/include
                           ${GMOCK_DIR}/include)

# copied from ../src/CMakeLists.txt
# TODO resolve to shared definition
set(sp_SRC
	../src/attribute-rel-css.cpp
	../src/attribute-rel-svg.cpp
	../src/attribute-rel-util.cpp
	../src/sp-anchor.cpp
	../src/sp-clippath.cpp
	../src/sp-conn-end-pair.cpp
	../src/sp-conn-end.cpp
	../src/sp-cursor.cpp
	../src/sp-defs.cpp
	../src/sp-desc.cpp
	../src/sp-ellipse.cpp
	../src/sp-factory.cpp
	../src/sp-filter-primitive.cpp
	../src/sp-filter-reference.cpp
	../src/sp-filter.cpp
	../src/sp-flowdiv.cpp
	../src/sp-flowregion.cpp
	../src/sp-flowtext.cpp
	../src/sp-font-face.cpp
	../src/sp-font.cpp
	../src/sp-glyph-kerning.cpp
	../src/sp-glyph.cpp
	../src/sp-gradient-reference.cpp
	../src/sp-gradient.cpp
	../src/sp-guide.cpp
	../src/sp-hatch-path.cpp
	../src/sp-hatch.cpp
	../src/sp-image.cpp
	../src/sp-item-group.cpp
	../src/sp-item-notify-moveto.cpp
	../src/sp-item-rm-unsatisfied-cns.cpp
	../src/sp-item-transform.cpp
	../src/sp-item-update-cns.cpp
	../src/sp-item.cpp
	../src/sp-line.cpp
	../src/sp-linear-gradient.cpp
	../src/sp-lpe-item.cpp
	../src/sp-marker.cpp
	../src/sp-mask.cpp
	../src/sp-mesh-array.cpp
	../src/sp-mesh-patch.cpp
	../src/sp-mesh-row.cpp
	../src/sp-mesh.cpp
	../src/sp-metadata.cpp
	../src/sp-missing-glyph.cpp
	../src/sp-namedview.cpp
	../src/sp-object-group.cpp
	../src/sp-object.cpp
	../src/sp-offset.cpp
	../src/sp-paint-server.cpp
	../src/sp-path.cpp
	../src/sp-pattern.cpp
	../src/sp-polygon.cpp
	../src/sp-polyline.cpp
	../src/sp-radial-gradient.cpp
	../src/sp-rect.cpp
	../src/sp-root.cpp
	../src/sp-script.cpp
	../src/sp-shape.cpp
	../src/sp-solid-color.cpp
	../src/sp-spiral.cpp
	../src/sp-star.cpp
	../src/sp-stop.cpp
	../src/sp-string.cpp
	../src/sp-style-elem.cpp
	../src/sp-switch.cpp
	../src/sp-symbol.cpp
	../src/sp-tag-use-reference.cpp
	../src/sp-tag-use.cpp
	../src/sp-tag.cpp
	../src/sp-text.cpp
	../src/sp-title.cpp
	../src/sp-tref-reference.cpp
	../src/sp-tref.cpp
	../src/sp-tspan.cpp
	../src/sp-use-reference.cpp
	../src/sp-use.cpp
	../src/splivarot.cpp
	../src/viewbox.cpp

	# -------
	# Headers
	../src/attribute-rel-css.h
	../src/attribute-rel-svg.h
	../src/attribute-rel-util.h
	../src/sp-anchor.h
	../src/sp-clippath.h
	../src/sp-conn-end-pair.h
	../src/sp-conn-end.h
	../src/sp-cursor.h
	../src/sp-defs.h
	../src/sp-desc.h
	../src/sp-ellipse.h
	../src/sp-factory.h
	../src/sp-filter-primitive.h
	../src/sp-filter-reference.h
	../src/sp-filter-units.h
	../src/sp-filter.h
	../src/sp-flowdiv.h
	../src/sp-flowregion.h
	../src/sp-flowtext.h
	../src/sp-font-face.h
	../src/sp-font.h
	../src/sp-glyph-kerning.h
	../src/sp-glyph.h
	../src/sp-gradient-reference.h
	../src/sp-gradient-spread.h
	../src/sp-gradient-test.h
	../src/sp-gradient-units.h
	../src/sp-gradient-vector.h
	../src/sp-gradient.h
	../src/sp-guide-attachment.h
	../src/sp-guide-constraint.h
	../src/sp-guide.h
	../src/sp-hatch-path.h
	../src/sp-hatch.h
	../src/sp-image.h
	../src/sp-item-group.h
	../src/sp-item-notify-moveto.h
	../src/sp-item-rm-unsatisfied-cns.h
	../src/sp-item-transform.h
	../src/sp-item-update-cns.h
	../src/sp-item.h
	../src/sp-line.h
	../src/sp-linear-gradient.h
	../src/sp-lpe-item.h
	../src/sp-marker-loc.h
	../src/sp-marker.h
	../src/sp-mask.h
	../src/sp-mesh-array.h
	../src/sp-mesh-patch.h
	../src/sp-mesh-row.h
	../src/sp-mesh.h
	../src/sp-metadata.h
	../src/sp-missing-glyph.h
	../src/sp-namedview.h
	../src/sp-object-group.h
	../src/sp-object.h
	../src/sp-offset.h
	../src/sp-paint-server-reference.h
	../src/sp-paint-server.h
	../src/sp-path.h
	../src/sp-pattern.h
	../src/sp-polygon.h
	../src/sp-polyline.h
	../src/sp-radial-gradient.h
	../src/sp-rect.h
	../src/sp-root.h
	../src/sp-script.h
	../src/sp-shape.h
	../src/sp-solid-color.h
	../src/sp-spiral.h
	../src/sp-star.h
	../src/sp-stop.h
	../src/sp-string.h
	../src/sp-style-elem-test.h
	../src/sp-style-elem.h
	../src/sp-switch.h
	../src/sp-symbol.h
	../src/sp-text.h
	../src/sp-textpath.h
	../src/sp-title.h
	../src/sp-tref-reference.h
	../src/sp-tref.h
	../src/sp-tspan.h
	../src/sp-use-reference.h
	../src/sp-use.h
	../src/viewbox.h
)

# copied from ../src/CMakeLists.txt
# TODO resolve to shared definition
set(inkscape_SRC
	../src/attributes.cpp
	../src/axis-manip.cpp
	../src/box3d-side.cpp
	../src/box3d.cpp
	../src/color-profile.cpp
	../src/color.cpp
	../src/composite-undo-stack-observer.cpp
	../src/conditions.cpp
	../src/conn-avoid-ref.cpp
	../src/console-output-undo-observer.cpp
	../src/context-fns.cpp
	../src/desktop-events.cpp
	../src/desktop-style.cpp
	../src/desktop.cpp
	../src/device-manager.cpp
	../src/dir-util.cpp
	../src/document-subset.cpp
	../src/document-undo.cpp
	../src/document.cpp
	../src/ege-color-prof-tracker.cpp
	../src/event-log.cpp
	../src/extract-uri.cpp
	../src/file.cpp
	../src/filter-chemistry.cpp
	../src/filter-enums.cpp
	../src/gc-anchored.cpp
	../src/gc-finalized.cpp
	../src/gradient-chemistry.cpp
	../src/gradient-drag.cpp
	../src/graphlayout.cpp
	../src/guide-snapper.cpp
	../src/help.cpp
	../src/id-clash.cpp
	../src/inkscape.cpp
	../src/knot-holder-entity.cpp
	../src/knot-ptr.cpp
	../src/knot.cpp
	../src/knotholder.cpp
	../src/layer-fns.cpp
	../src/layer-manager.cpp
	../src/layer-model.cpp
	../src/line-geometry.cpp
	../src/line-snapper.cpp
	../src/main-cmdlineact.cpp
	../src/media.cpp
	../src/message-context.cpp
	../src/message-stack.cpp
	../src/mod360.cpp
	../src/object-hierarchy.cpp
	../src/object-snapper.cpp
	../src/path-chemistry.cpp
	../src/persp3d-reference.cpp
	../src/persp3d.cpp
	../src/perspective-line.cpp
	../src/preferences.cpp
	../src/prefix.cpp
	../src/print.cpp
	../src/profile-manager.cpp
	../src/proj_pt.cpp
	../src/rdf.cpp
	../src/removeoverlap.cpp
	../src/resource-manager.cpp
	../src/rubberband.cpp
	../src/satisfied-guide-cns.cpp
	../src/selcue.cpp
	../src/selection-chemistry.cpp
	../src/selection-describer.cpp
	../src/selection.cpp
	../src/seltrans-handles.cpp
	../src/seltrans.cpp
	../src/shortcuts.cpp
	../src/snap-preferences.cpp
	../src/snap.cpp
	../src/snapped-curve.cpp
	../src/snapped-line.cpp
	../src/snapped-point.cpp
	../src/snapper.cpp
	../src/style-internal.cpp
	../src/style.cpp
	../src/svg-view-widget.cpp
	../src/svg-view.cpp
	../src/text-chemistry.cpp
	../src/text-editing.cpp
	../src/transf_mat_3x4.cpp
	../src/unclump.cpp
	../src/unicoderange.cpp
	../src/uri-references.cpp
	../src/uri.cpp
	../src/vanishing-point.cpp
	../src/verbs.cpp
	../src/version.cpp

	# -------
	# Headers
	../src/MultiPrinter.h
	../src/PylogFormatter.h
	../src/TRPIFormatter.h
	../src/attributes-test.h
	../src/attributes.h
	../src/axis-manip.h
	../src/bad-uri-exception.h
	../src/box3d-side.h
	../src/box3d.h
	../src/cms-color-types.h
	../src/cms-system.h
	../src/color-profile-cms-fns.h
	../src/color-profile-test.h
	../src/color-profile.h
	../src/color-rgba.h
	../src/color.h
	../src/colorspace.h
	../src/composite-undo-stack-observer.h
	../src/conditions.h
	../src/conn-avoid-ref.h
	../src/console-output-undo-observer.h
	../src/context-fns.h
	../src/decimal-round.h
	../src/desktop-events.h
	../src/desktop-style.h
	../src/desktop.h
	../src/device-manager.h
	../src/dir-util-test.h
	../src/dir-util.h
	../src/document-private.h
	../src/document-subset.h
	../src/document-undo.h
	../src/document.h
	../src/ege-color-prof-tracker.h
	../src/enums.h
	../src/event-log.h
	../src/event.h
	../src/extract-uri-test.h
	../src/extract-uri.h
	../src/file.h
	../src/fill-or-stroke.h
	../src/filter-chemistry.h
	../src/filter-enums.h
	../src/gc-anchored.h
	../src/gc-finalized.h
	../src/gradient-chemistry.h
	../src/gradient-drag.h
	../src/graphlayout.h
	../src/guide-snapper.h
	../src/help.h
	../src/helper-fns.h
	../src/icon-size.h
	../src/id-clash.h
	../src/inkscape-version.h
	../src/inkscape.h
	../src/isinf.h
	../src/knot-enums.h
	../src/knot-holder-entity.h
	../src/knot-ptr.h
	../src/knot.h
	../src/knotholder.h
	../src/layer-fns.h
	../src/layer-manager.h
	../src/layer-model.h
	../src/line-geometry.h
	../src/line-snapper.h
	../src/macros.h
	../src/main-cmdlineact.h
	../src/marker-test.h
	../src/media.h
	../src/menus-skeleton.h
	../src/message-context.h
	../src/message-stack.h
	../src/message.h
	../src/mod360-test.h
	../src/mod360.h
	../src/number-opt-number.h
	../src/object-hierarchy.h
	../src/object-snapper.h
	../src/object-test.h
	../src/path-chemistry.h
	../src/path-prefix.h
	../src/persp3d-reference.h
	../src/persp3d.h
	../src/perspective-line.h
	../src/preferences-skeleton.h
	../src/preferences-test.h
	../src/preferences.h
	../src/prefix.h
	../src/print.h
	../src/profile-manager.h
	../src/proj_pt.h
	../src/rdf.h
	../src/remove-last.h
	../src/removeoverlap.h
	../src/require-config.h
	../src/resource-manager.h
	../src/round-test.h
	../src/round.h
	../src/rubberband.h
	../src/satisfied-guide-cns.h
	../src/selcue.h
	../src/selection-chemistry.h
	../src/selection-describer.h
	../src/selection.h
	../src/seltrans-handles.h
	../src/seltrans.h
	../src/shortcuts.h
	../src/snap-candidate.h
	../src/snap-enums.h
	../src/snap-preferences.h
	../src/snap.h
	../src/snapped-curve.h
	../src/snapped-line.h
	../src/snapped-point.h
	../src/snapper.h
	../src/splivarot.h
	../src/streq.h
	../src/strneq.h
	../src/style-enums.h
	../src/style-internal.h
	../src/style-test.h
	../src/style.h
	../src/svg-profile.h
	../src/svg-view-widget.h
	../src/svg-view.h
	../src/syseq.h
	../src/test-helpers.h
	../src/text-chemistry.h
	../src/text-editing.h
	../src/text-tag-attributes.h
	../src/transf_mat_3x4.h
	../src/unclump.h
	../src/undo-stack-observer.h
	../src/unicoderange.h
	../src/uri-references.h
	../src/uri-test.h
	../src/uri.h
	../src/vanishing-point.h
	../src/verbs-test.h
	../src/verbs.h
	../src/version.h
)

get_property(inkscape_global_SRC GLOBAL PROPERTY inkscape_global_SRC)

set_source_files_properties(
		${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
		PROPERTIES GENERATED TRUE)

include_directories(${CMAKE_CURRENT_BINARY_DIR}/__/src)

add_executable(unittest
	unittest.cpp
	doc-per-case-test.cpp
	src/attributes-test.cpp
	src/color-profile-test.cpp
	src/dir-util-test.cpp
	${inkscape_SRC}
	${sp_SRC}
	${inkscape_global_SRC}
	${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
)

add_dependencies(unittest inkscape_version)

target_link_libraries(unittest
	gmock_main

	# order from automake
	#sp_LIB
	nrtype_LIB

	#inkscape_LIB
	#sp_LIB # annoying, we need both!
	nrtype_LIB # annoying, we need both!

	croco_LIB
	avoid_LIB
	gdl_LIB
	cola_LIB
	vpsc_LIB
	livarot_LIB
	uemf_LIB
	2geom_LIB
	depixelize_LIB
	util_LIB
	gc_LIB

	${INKSCAPE_LIBS}
)

add_test(BaseTest ${EXECUTABLE_OUTPUT_PATH}/unittest)

add_dependencies(check unittest)

#
