buildframework/helium/builder/python/test-macros.ant.xml
changeset 587 85df38eb4012
child 628 7c4a911dc066
equal deleted inserted replaced
217:0f5e3a7fb6af 587:85df38eb4012
       
     1 <?xml version="1.0"?>
       
     2 <!-- 
       
     3 ============================================================================ 
       
     4 Name        : build.xml 
       
     5 Part of     : Helium AntLib
       
     6 
       
     7 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     8 All rights reserved.
       
     9 This component and the accompanying materials are made available
       
    10 under the terms of the License "Eclipse Public License v1.0"
       
    11 which accompanies this distribution, and is available
       
    12 at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
    13 
       
    14 Initial Contributors:
       
    15 Nokia Corporation - initial contribution.
       
    16 
       
    17 Contributors:
       
    18 
       
    19 Description:
       
    20 
       
    21 ============================================================================
       
    22 -->
       
    23 <project name="test-macros" xmlns:ac="antlib:net.sf.antcontrib">
       
    24     <import file="../java/common.ant.xml" />
       
    25     <dirname property="python.builder.dir" file="${ant.file.test-macros}" />
       
    26     
       
    27     <target name="unittest" depends="pt,pt-coverage"/>
       
    28     
       
    29     <target name="pt">
       
    30         <pathconvert pathsep=":" property="python.path">
       
    31             <fileset dir="${python.builder.dir}/lib" includes="**/*.egg" excludes="jython*"/>
       
    32             <fileset dir="${lib.dir}" includes="**/*.egg"/>
       
    33             <dirset dir="${lib.dir}"/>
       
    34             <fileset dir="${module.bin.dir}" includes="**/${ant.project.name}*.egg"/>
       
    35             <dirset dir="${basedir}/lib"/>
       
    36         </pathconvert>
       
    37         <pathconvert pathsep=" " property="python.modules.coverage">
       
    38             <fileset dir="${basedir}" includes="**/*.py"/>
       
    39         </pathconvert>
       
    40         <!---->
       
    41         <mkdir dir="${junit.result.dir}" />
       
    42         <ac:trycatch property="cpython.unittest.error">
       
    43             <try>
       
    44                 <exec executable="python" failonerror="true" dir="${lib.dir}">
       
    45                     <env key="PYTHONPATH" path="${python.path}" />
       
    46                     <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"/>
       
    47                     <arg line="${nose.args}" />
       
    48                 </exec>
       
    49             </try>
       
    50         </ac:trycatch>
       
    51         <ac:trycatch property="jython.unittest.error">
       
    52             <try>
       
    53                 <script language="jython" setbeans="false">
       
    54 <![CDATA[
       
    55 import sys
       
    56 import os
       
    57 import shutil
       
    58 for p in project.getProperty('python.path').split(':'):
       
    59     if 'amara' not in p:
       
    60         sys.path.append(p)
       
    61 os.chdir(project.getProperty('lib.dir'))
       
    62 if os.path.exists('build'):
       
    63     shutil.rmtree('build')
       
    64 import nose
       
    65 args = project.getProperty('nose.args')
       
    66 args2 = "--with-xunit --xunit-file=" + project.getProperty('junit.result.dir') + "/jython.xml" + args
       
    67 testdir = os.path.join(project.getProperty('basedir'), 'lib', project.getProperty('ant.project.name'))
       
    68 
       
    69 result = True
       
    70 if ' ' in args:
       
    71     result = nose.run(argv=['-v', testdir + 'tests'])
       
    72 elif 'cpython' not in args:
       
    73     result = nose.run(argv=['-v', args2])
       
    74 print >> sys.stderr
       
    75 if not result:
       
    76     raise Exception('Jython unittest failure.')
       
    77 ]]>
       
    78                 </script>
       
    79             </try>
       
    80         </ac:trycatch>
       
    81         <delete includeemptydirs="true">
       
    82             <fileset dir="${basedir}/lib" includes="*.egg-info/"/>
       
    83         </delete>
       
    84         <ac:if>
       
    85             <isset property="jython.unittest.error" />
       
    86             <then>
       
    87                 <fail message="${jython.unittest.error}" />
       
    88             </then>
       
    89         </ac:if>
       
    90         <ac:if>
       
    91             <isset property="cpython.unittest.error" />
       
    92             <then>
       
    93                 <fail message="${cpython.unittest.error}" />
       
    94             </then>
       
    95         </ac:if>
       
    96     </target>
       
    97 
       
    98     <target name="pt-coverage">
       
    99         <mkdir dir="${lib.dir}/../coverage"/>
       
   100         <exec executable="python" failonerror="true" dir="${lib.dir}">
       
   101             <env key="PYTHONPATH" path="${python.path}" />
       
   102             <arg line="${python.builder.dir}/lib/coverage.py -a -d ${lib.dir}/../coverage ${python.modules.coverage}"/>
       
   103         </exec>
       
   104         
       
   105         <mkdir dir="${lib.dir}/../coverage/report"/>
       
   106         <move file="${lib.dir}/../coverage/report/line_coverage.txt" tofile="${lib.dir}/../coverage/report/line_coverage_old.txt" overwrite="true" failonerror="false"/>
       
   107         <record name="${lib.dir}/../coverage/report/line_coverage.txt" action="start"/>
       
   108         <exec executable="python" failonerror="true" dir="${lib.dir}">
       
   109             <env key="PYTHONPATH" path="${python.path}" />
       
   110             <arg line="${python.builder.dir}/lib/coverage.py -r ${python.modules.coverage}"/>
       
   111         </exec>
       
   112         <record name="${lib.dir}/../coverage/report/line_coverage.txt" action="stop"/>
       
   113         
       
   114         <script language="jython" setbeans="false">
       
   115 for line in open(project.getProperty('lib.dir') + r'/../coverage/report/line_coverage.txt'):
       
   116     if 'TOTAL' in line and ' 0%' in line:
       
   117         raise Exception('Coverage at 0%')
       
   118         </script>
       
   119         <delete file="${basedir}/.coverage"/>
       
   120     </target>
       
   121     
       
   122 </project>