buildframework/helium/builder/python/test-macros.ant.xml
changeset 587 85df38eb4012
child 628 7c4a911dc066
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/builder/python/test-macros.ant.xml	Tue Apr 27 08:33:08 2010 +0300
@@ -0,0 +1,122 @@
+<?xml version="1.0"?>
+<!-- 
+============================================================================ 
+Name        : build.xml 
+Part of     : Helium AntLib
+
+Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+This component and the accompanying materials are made available
+under the terms of the License "Eclipse Public License v1.0"
+which accompanies this distribution, and is available
+at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+Initial Contributors:
+Nokia Corporation - initial contribution.
+
+Contributors:
+
+Description:
+
+============================================================================
+-->
+<project name="test-macros" xmlns:ac="antlib:net.sf.antcontrib">
+    <import file="../java/common.ant.xml" />
+    <dirname property="python.builder.dir" file="${ant.file.test-macros}" />
+    
+    <target name="unittest" depends="pt,pt-coverage"/>
+    
+    <target name="pt">
+        <pathconvert pathsep=":" property="python.path">
+            <fileset dir="${python.builder.dir}/lib" includes="**/*.egg" excludes="jython*"/>
+            <fileset dir="${lib.dir}" includes="**/*.egg"/>
+            <dirset dir="${lib.dir}"/>
+            <fileset dir="${module.bin.dir}" includes="**/${ant.project.name}*.egg"/>
+            <dirset dir="${basedir}/lib"/>
+        </pathconvert>
+        <pathconvert pathsep=" " property="python.modules.coverage">
+            <fileset dir="${basedir}" includes="**/*.py"/>
+        </pathconvert>
+        <!---->
+        <mkdir dir="${junit.result.dir}" />
+        <ac:trycatch property="cpython.unittest.error">
+            <try>
+                <exec executable="python" failonerror="true" dir="${lib.dir}">
+                    <env key="PYTHONPATH" path="${python.path}" />
+                    <arg line="${python.builder.dir}/lib/coverage.py -x ${python.builder.dir}/lib/nosetests-script.py --exe -v --with-xunit --xunit-file=${junit.result.dir}/python.xml"/>
+                    <arg line="${nose.args}" />
+                </exec>
+            </try>
+        </ac:trycatch>
+        <ac:trycatch property="jython.unittest.error">
+            <try>
+                <script language="jython" setbeans="false">
+<![CDATA[
+import sys
+import os
+import shutil
+for p in project.getProperty('python.path').split(':'):
+    if 'amara' not in p:
+        sys.path.append(p)
+os.chdir(project.getProperty('lib.dir'))
+if os.path.exists('build'):
+    shutil.rmtree('build')
+import nose
+args = project.getProperty('nose.args')
+args2 = "--with-xunit --xunit-file=" + project.getProperty('junit.result.dir') + "/jython.xml" + args
+testdir = os.path.join(project.getProperty('basedir'), 'lib', project.getProperty('ant.project.name'))
+
+result = True
+if ' ' in args:
+    result = nose.run(argv=['-v', testdir + 'tests'])
+elif 'cpython' not in args:
+    result = nose.run(argv=['-v', args2])
+print >> sys.stderr
+if not result:
+    raise Exception('Jython unittest failure.')
+]]>
+                </script>
+            </try>
+        </ac:trycatch>
+        <delete includeemptydirs="true">
+            <fileset dir="${basedir}/lib" includes="*.egg-info/"/>
+        </delete>
+        <ac:if>
+            <isset property="jython.unittest.error" />
+            <then>
+                <fail message="${jython.unittest.error}" />
+            </then>
+        </ac:if>
+        <ac:if>
+            <isset property="cpython.unittest.error" />
+            <then>
+                <fail message="${cpython.unittest.error}" />
+            </then>
+        </ac:if>
+    </target>
+
+    <target name="pt-coverage">
+        <mkdir dir="${lib.dir}/../coverage"/>
+        <exec executable="python" failonerror="true" dir="${lib.dir}">
+            <env key="PYTHONPATH" path="${python.path}" />
+            <arg line="${python.builder.dir}/lib/coverage.py -a -d ${lib.dir}/../coverage ${python.modules.coverage}"/>
+        </exec>
+        
+        <mkdir dir="${lib.dir}/../coverage/report"/>
+        <move file="${lib.dir}/../coverage/report/line_coverage.txt" tofile="${lib.dir}/../coverage/report/line_coverage_old.txt" overwrite="true" failonerror="false"/>
+        <record name="${lib.dir}/../coverage/report/line_coverage.txt" action="start"/>
+        <exec executable="python" failonerror="true" dir="${lib.dir}">
+            <env key="PYTHONPATH" path="${python.path}" />
+            <arg line="${python.builder.dir}/lib/coverage.py -r ${python.modules.coverage}"/>
+        </exec>
+        <record name="${lib.dir}/../coverage/report/line_coverage.txt" action="stop"/>
+        
+        <script language="jython" setbeans="false">
+for line in open(project.getProperty('lib.dir') + r'/../coverage/report/line_coverage.txt'):
+    if 'TOTAL' in line and ' 0%' in line:
+        raise Exception('Coverage at 0%')
+        </script>
+        <delete file="${basedir}/.coverage"/>
+    </target>
+    
+</project>