<?xml version="1.0" encoding="utf-8" ?> <project name="NCover" default="go"> <!-- Project UppercuT - http://projectuppercut.org --> <!-- DO NOT EDIT THIS FILE - NCover uses MbUnit to run tests - find out more at http://uppercut.pbwiki.com --> <property name="build.config.settings" value="__NONE__" overwrite="false" /> <include buildfile="${build.config.settings}" if="${file::exists(build.config.settings)}" /> <property name="path.separator" value="${string::trim(path::combine(' ', ' '))}" /> <include buildfile="..${path.separator}csharp.functions" /> <property name="file.current.no_extension" value="ncover" /> <property name="dirs.current" value="${directory::get-parent-directory(project::get-buildfile-path())}" /> <property name="path.to.toplevel" value="..${path.separator}.." /> <property name="folder.build_scripts" value="build" overwrite="false" /> <property name="folder.build_scripts_custom" value="build.custom" overwrite="false" /> <property name="dirs.build_scripts_custom" value="${dirs.current}${path.separator}${path.to.toplevel}${path.separator}${folder.build_scripts_custom}${path.separator}analyzers" /> <property name="folder.code_build" value="build_output" overwrite="false" /> <property name="dirs.build" value="${dirs.current}${path.separator}${path.to.toplevel}${path.separator}${folder.code_build}" /> <property name="folder.app.drop" value="${project.name}" overwrite="false" /> <property name="dirs.build.code" value="${dirs.build}${path.separator}${folder.app.drop}" overwrite="false" /> <property name="folder.build_artifacts" value="build_artifacts" overwrite="false" /> <property name="dirs.build_artifacts" value="${path::get-full-path(dirs.build)}${path.separator}${folder.build_artifacts}" /> <property name="project.name" value="__SOLUTION_NAME_WITHOUT_SLN_EXTENSION__" overwrite="false" /> <property name="test.framework" value="mbunit" overwrite="false" /> <property name="microsoft.framework" value="net-3.5" overwrite="false" /> <property name="number.satisfactory_coverage" value="85" overwrite="false" /> <property name="fail.if_ncover_fails" value="false" overwrite="false" /> <property name="folder.references" value="lib" overwrite="false" /> <property name="dirs.lib" value="${dirs.current}${path.separator}${path.to.toplevel}${path.separator}${folder.references}" overwrite="false" /> <property name="dirs.ncover_results" value="${path::get-full-path(dirs.build_artifacts)}${path.separator}ncover" /> <property name="app.ncover.tester" value="${path::get-full-path(dirs.lib)}${path.separator}MbUnit2${path.separator}MbUnit.Cons.exe" overwrite="false" /> <property name="app.ncover" value="${path::get-full-path(dirs.lib)}${path.separator}NCover${path.separator}NCover.Console.exe" overwrite="false" /> <property name="app.ncover.explorer" value="${path::get-full-path(dirs.lib)}${path.separator}NCover${path.separator}NCoverExplorer.Console.exe" overwrite="false" /> <property name="file.ncover_results" value="${dirs.ncover_results}${path.separator}${project.name}.ncover.xml" /> <property name="file.ncover_log" value="${dirs.ncover_results}${path.separator}${project.name}.ncover.log" /> <property name="file.xml.code_coverage_results" value="${project.name}.CodeCoverageSummary-results.xml" /> <property name="file.html.code_coverage_results" value="${project.name}.CodeCoverageSummary-results.html" /> <property name="tests.excluded_categories.comma_separated" value="Database,Integration,Slow,NotWorking" overwrite="false" /> <property name="test.args" value="" /> <property name="test.args" value="/rt:Text /rnf:mbUnit /rf:"${dirs.ncover_results}" /ec:${tests.excluded_categories.comma_separated}" if="${test.framework=='mbunit2'}" /> <property name="test.args" value="/xml:"${dirs.ncover_results}${path.separator}nunit-results.xml" /nologo /framework=${microsoft.framework} /exclude:${tests.excluded_categories.comma_separated}" if="${test.framework=='nunit'}" /> <!--property name="test.args" value="/xml:"${dirs.ncover_results}\nunit-results.xml" /nologo /framework=${microsoft.framework} /exclude:${tests.excluded_categories.comma_separated}" if="${test.framework=='nunit'}" /--> <property name="file.custom.step.before" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.pre.step" /> <property name="file.custom.step.after" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.post.step" /> <property name="file.custom.step.replace" value="${dirs.build_scripts_custom}${path.separator}${file.current.no_extension}.replace.step" /> <property name="is.replaced" value="false" /> <property name="fail.build.on.error" value="false" /> <target name="go" depends="run_tasks" if="${file::exists(app.ncover) and test.framework !='none'}" /> <target name="run_tasks"> <echo message="Running ${project::get-name()} tasks." /> <call target="prepare" if="${target::exists('prepare')}" /> <call target="custom_tasks_before" if="${target::exists('custom_tasks_before')}" /> <call target="custom_tasks_replace" if="${target::exists('custom_tasks_replace')}" /> <call target="run_normal_tasks" if="${not is.replaced}" /> <call target="custom_tasks_after" if="${target::exists('custom_tasks_after')}" /> </target> <target name="run_normal_tasks" depends="get_test_dlls, ncover, ncover_explorer" description="Using NCover to Analyze project for test quality indicators." if="${file::exists(app.ncover) and test.framework !='none'}" /> <target name="custom_tasks_before"> <echo message="Running custom tasks if ${file.custom.step.before} exists." /> <nant buildfile="${file.custom.step.before}" inheritall="true" if="${file::exists(file.custom.step.before)}" failonerror="${fail.build.on.error}" /> <exec program="powershell.exe" if="${file::exists(file.custom.step.before + '.ps1')}" failonerror="${fail.build.on.error}"> <arg value="${path::get-full-path(file.custom.step.before + '.ps1')}" /> </exec> <exec program="ruby.exe" if="${file::exists(file.custom.step.before + '.rb')}" failonerror="${fail.build.on.error}"> <arg value="${path::get-full-path(file.custom.step.before + '.rb')}" /> </exec> </target> <target name="custom_tasks_replace"> <echo message="Running custom tasks instead of normal tasks if ${file.custom.step.replace} exists." /> <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace)}" /> <nant buildfile="${file.custom.step.replace}" inheritall="true" if="${file::exists(file.custom.step.replace)}" failonerror="${fail.build.on.error}" /> <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace + '.ps1')}" /> <exec program="powershell.exe" if="${file::exists(file.custom.step.replace + '.ps1')}" failonerror="${fail.build.on.error}" > <arg value="${path::get-full-path(file.custom.step.replace + '.ps1')}" /> </exec> <property name="is.replaced" value="true" if="${file::exists(file.custom.step.replace + '.rb')}" /> <exec program="ruby.exe" if="${file::exists(file.custom.step.replace + '.rb')}" failonerror="${fail.build.on.error}" > <arg value="${path::get-full-path(file.custom.step.replace + '.rb')}" /> </exec> </target> <target name="prepare"> <echo message="Removing and adding ${dirs.ncover_results}."/> <delete dir="${dirs.ncover_results}" failonerror="false" /> <mkdir dir="${dirs.ncover_results}" /> </target> <target name="get_test_dlls"> <echo message="Getting test dlls based on name in directory ${path::get-full-path(dirs.build.code)}." /> <property name="dll.names" value="" /> <foreach item="File" property="dll.filename"> <in> <items> <exclude name="${dirs.build.code}${path.separator}lib${path.separator}**" /> <exclude name="${dirs.build.code}${path.separator}**${path.separator}*Database*dll" /> <exclude name="${dirs.build.code}${path.separator}**${path.separator}*.Integration*dll" /> <exclude name="${dirs.build.code}${path.separator}**${path.separator}TestFu.dll" /> <include name="${dirs.build.code}${path.separator}**${path.separator}*Test*dll" /> <include name="${dirs.build.code}${path.separator}**${path.separator}*Spec*dll" /> </items> </in> <do> <property name="dll.names" value="${dll.names + ' ' + string::replace(string::replace(dll.filename,path::get-full-path(dirs.build.code) + '\',''),'\',path.separator) + ''}" /> </do> </foreach> <property name="dlls.test" value="${dll.names}" /> <echo message="Running NCover against these test dlls - ${dlls.test}." /> <property name="args.test_runner" value="${dlls.test} ${test.args}" /> </target> <target name="ncover" if="${file::exists(app.ncover) and file::exists(app.ncover.tester)}" > <echo message="Attempting to run NCover. Creating file at ${file.ncover_results} and logging at ${file.ncover_log}." /> <ncover program="${app.ncover}" commandLineExe="${app.ncover.tester}" commandLineArgs="${args.test_runner}" workingDirectory="${dirs.build.code}" coverageFile="${file.ncover_results}" logLevel="Normal" logFile="${file.ncover_log}" excludeAttributes="CoverageExcludeAttribute" failonerror="false" verbose="true"> <assemblies basedir="${dirs.build.code}"> <exclude name="${dirs.build.code}${path.separator}lib${path.separator}**" /> <exclude name="${dirs.build.code}${path.separator}**${path.separator}TestFu.dll" /> <exclude name="${dirs.build.code}${path.separator}**${path.separator}*Test*dll" /> <exclude name="${dirs.build.code}${path.separator}**${path.separator}*Spec*dll" /> <include name="${dirs.build.code}${path.separator}**${path.separator}${project.name}*.dll" /> </assemblies> </ncover> </target> <target name="ncover_explorer" depends="ncover" if="${file::exists(app.ncover.explorer)}" > <echo message="Attempting to run NCoverExplorer. Creating HTML results file at ${file.html.code_coverage_results} and XML results file at ${file.xml.code_coverage_results}." /> <ncoverexplorer program="${app.ncover.explorer}" projectName="${project.name}" reportType="4" outputDir="${dirs.ncover_results}" xmlReportName="${file.xml.code_coverage_results}" htmlReportName="${file.html.code_coverage_results}" showExcluded="True" satisfactoryCoverage="${number.satisfactory_coverage}" failMinimum="false" failonerror="false" > <fileset> <include name="${file.ncover_results}" /> </fileset> <exclusions> <exclusion enabled="true" isRegex="false" pattern="*Test*" type="Assembly" /> <exclusion enabled="true" isRegex="false" pattern="*Spec*" type="Assembly" /> <exclusion enabled="true" isRegex="false" pattern="*Test*" type="Namespace" /> <exclusion enabled="true" isRegex="false" pattern="*.My*" type="Namespace" /> <exclusion enabled="true" isRegex="false" pattern="*.bdd*" type="Namespace" /> <exclusion enabled="true" isRegex="false" pattern="when*" type="Class" /> <exclusion enabled="true" isRegex="false" pattern="concern*" type="Class" /> </exclusions> </ncoverexplorer> </target> <target name="open_results"> <echo message="Opening results - ${path::get-full-path(dirs.ncover_results) + path.separator + file.html.code_coverage_results}" /> <results display="${path::get-full-path(dirs.ncover_results) + path.separator + file.html.code_coverage_results}" /> </target> <target name="custom_tasks_after"> <echo message="Running custom tasks if ${file.custom.step.after} exists." /> <nant buildfile="${file.custom.step.after}" inheritall="true" if="${file::exists(file.custom.step.after)}" failonerror="${fail.build.on.error}" /> <exec program="powershell.exe" if="${file::exists(file.custom.step.after + '.ps1')}" failonerror="${fail.build.on.error}" > <arg value="${path::get-full-path(file.custom.step.after + '.ps1')}" /> </exec> <exec program="ruby.exe" if="${file::exists(file.custom.step.after + '.rb')}" failonerror="${fail.build.on.error}" > <arg value="${path::get-full-path(file.custom.step.after + '.rb')}" /> </exec> </target> </project>