<?xml version="1.0" encoding="utf-8"?>
<project
	xmlns="http://lime.software/project/1.0.2"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://lime.software/project/1.0.2 http://lime.software/xsd/project-1.0.2.xsd">

	<meta title="FunkinUnitTests" version="1.0.0" />
	<app file="TestMain" main="TestMain" />

	<!-- Test sources -->
	<source path="source" />

	<!-- Funkin' sources -->
	<source path="../../source" />

	<!-- Funkin' dependencies -->
	<haxelib name="lime" /> <!-- Game engine -->
	<haxelib name="openfl" /> <!-- Game engine -->
	<haxelib name="flixel" /> <!-- Game engine -->
	<haxelib name="flixel-addons" /> <!-- Additional utilities for Flixel -->
	<haxelib name="hscript" /> <!-- Scripting -->
	<haxelib name="flixel-ui" /> <!-- UI framework (deprecate this? -->
	<haxelib name="haxeui-core" /> <!-- UI framework -->
	<haxelib name="haxeui-flixel" /> <!-- Integrate HaxeUI with Flixel -->
	<haxelib name="polymod" /> <!-- Modding framework -->
	<haxelib name="flxanimate" /> <!-- Texture atlas rendering -->
	<haxelib name="hxCodec" /> <!-- Video playback -->
	<haxelib name="thx.semver" /> <!-- Semantic version handling -->
	<haxelib name="json2object" /> <!-- JSON parsing -->

	<!-- Test dependencies -->
	<haxelib name="munit" /> <!-- Unit test execution -->
	<haxelib name="mcover" /> <!-- Code coverage -->
	<haxelib name="mockatoo" /> <!-- Mocking -->
	<haxelib name="hamcrest" /> <!-- Assertions/matching -->

	<!-- This macro allows addition of new functionality to existing Flixel. -->
	<haxeflag name="--macro" value="addMetadata('@:build(funkin.util.macro.FlxMacro.buildFlxBasic())', 'flixel.FlxBasic')" />
	<!-- Macros to satisfy null safety (null safety can't check nested functions, so assertions must be inlined) -->
	<haxeflag name="--macro" value="addMetadata('@:build(funkin.util.macro.InlineMacro.makeInline(\'fail\', true))', 'massive.munit.Assert')" />
	<haxeflag name="--macro" value="addMetadata('@:build(funkin.util.macro.InlineMacro.makeInline(\'isNotNull\', true))', 'massive.munit.Assert')" />

	<!-- Assets -->
	<assets path="assets/preload" rename="assets" exclude="*.ogg" if="web" />
	<assets path="assets/preload" rename="assets" exclude="*.mp3" unless="web" />
	<assets path="assets/shared" library="shared" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/shared" library="shared" exclude="*.fla|*.mp3" unless="web" />
	<library name="shared" preload="true" />
	<!--
	<assets path="assets/songs" library="songs" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/songs" library="songs" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/tutorial" library="tutorial" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/tutorial" library="tutorial" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/week1" library="week1" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/week1" library="week1" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/week2" library="week2" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/week2" library="week2" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/week3" library="week3" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/week3" library="week3" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/week4" library="week4" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/week4" library="week4" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/week5" library="week5" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/week5" library="week5" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/week6" library="week6" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/week6" library="week6" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/week7" library="week7" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/week7" library="week7" exclude="*.fla|*.mp3" unless="web" />
	<assets path="assets/weekend1" library="weekend1" exclude="*.fla|*.ogg" if="web" />
	<assets path="assets/weekend1" library="weekend1" exclude="*.fla|*.mp3" unless="web" />
	<library name="songs" preload="true" />
	<library name="tutorial" preload="true" />
	<library name="week1" preload="true" />
	<library name="week2" preload="true" />
	<library name="week3" preload="true" />
	<library name="week4" preload="true" />
	<library name="week5" preload="true" />
	<library name="week6" preload="true" />
	<library name="week7" preload="true" />
	<library name="weekend1" preload="true" />
	-->

	<!-- Test defines -->
	<set name="no-custom-backend" />
	<set name="unit-test" />
	<haxedef name="FLX_UNIT_TEST" />
	<haxedef name="FLX_RECORD" />

	<!-- Clean up the output -->
	<!--
		<haxedef name="echo-traces" />
	-->
	<haxedef name="ignore-inline" />
	<haxeflag name="-w" value="-WDeprecated" />

	<!-- Manually set up code coverage (because munit report and lime test are mutually exclusive) -->
	<haxeflag name="--macro" value="mcover.MCover.coverage(['funkin'],['../../source', 'source/'],[''])" />
	<haxelib name="mcover" />
	<haxedef name="MCOVER" />
	<haxedef name="safeMode"/>
	<haxedef name="HXCPP_CHECK_POINTER" />
	<haxedef name="HXCPP_STACK_LINE" />
	<haxedef name="HXCPP_STACK_TRACE" />
</project>