File: gts_tparser_script.py

package info (click to toggle)
babel 0.10.2-1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 43,932 kB
  • ctags: 29,707
  • sloc: java: 74,695; ansic: 73,142; cpp: 40,649; sh: 18,411; f90: 10,062; fortran: 6,727; python: 6,406; makefile: 3,866; xml: 118; perl: 48
file content (117 lines) | stat: -rw-r--r-- 4,489 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#
# Copyright(c) 2001-2003, The Regents of the University of California.
# Produced at the Lawrence Livermore National Laboratory.
# Written by Gary Kumfert <kumfert@llnl.gov>.
# UCRL-CODE-2002-043.
# All rights reserved.
#
# This file is part of Gantlet.  For details, see 
# http://www.llnl.gov/CASC/components/software.html or contact the author.
#
# Gantlet is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License (as published by 
# the Free Software Foundation) version 2.1 dated February 1999.
#
# Gantlet is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even IMPLIED WARRANTY OF MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the terms and conditions of
# the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this software; if not, write to the Free Software Foundation, 
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# ADDITIONAL NOTICE:
# 
# A. This notice is required to be provided under our contract with the
#    U.S. Department of Energy (DOE).  This work was produced at the 
#    University of California, Lawrence Livermore National Laboratory
#    under Contract No. W-7405-ENG-48 with the DOE.
#
# B. Neither the United States Government nor the University of California
#    nor any of their employees make any warranty, express or implied, or
#    assumes any liability or responsibility for the accuracy, completeness, 
#    or usefulness of any information, apparatus, product, or process 
#    disclosed, or represents that its use would not infringe on 
#    privately-owned rights.
# 
# C. Also, reference herein to any specific commercial products, process, or
#    services by trade name, trademark, manufacturer or otherwise does not
#    necessarily constitute or imply its endoresement, recommendation, or
#    favoring by the United States Government or the University of California.
#    The views and opinions of authors expressed herein do not necessarily 
#    state or reflect those of the United States Government or the University
#    of California, and shall not be used for advertising or product 
#    endorsement purposes.

"""
A module from the Gantlet Testing Framework
"""

import os
import select

from gts_tparser import gts_tparser

known_extensions = { '.py':'python',
                     '.pl':'perl',
                     '.sh':os.getenv('SHELL')}

class gts_tparser_script(gts_tparser):
    """
    A GTS tparser specific to manipulating scripts
    """

    def __init__( self, invocation,  scoreboard):
	gts_tparser.__init__(self, invocation, scoreboard)
        self.switches = ""

    def get_type( self ):
        return "gts_tparser_script"

    def runtest( self ):
        dirname = self.invocation.dirname
        basename = self.invocation.basename
        extension = self.invocation.extension
        switches = self.invocation.switches
        arguments = self.invocation.arguments
        change_dir = ""
        

        if ( self.invocation.cd_to_file != None ):
            cd_to_file = self.invocation.cd_to_file
        else:
            cd_to_file = self.scoreboard.config.cd_to_file

        lang = self.extension_to_language(extension)
 
        if cd_to_file:
            if dirname != "" and dirname != ".":
                command = "cd %s; %s %s%s %s %s" % ( dirname, lang, basename, extension,
                                                    switches, arguments)
            else:
                command = "%s %s%s %s %s" % ( lang, basename, extension,
                                             switches, arguments)
        else:
            command = "%s %s/%s%s %s %s" % ( lang, dirname, basename, extension, switches, arguments )

        # print "command = \"%s\"" % command
        filehandle1 = os.popen(command, 'r')
        filehandle2 = os.tmpfile()
        for line in filehandle1.readlines():
            filehandle2.write( line )                
        self.exit_status = filehandle1.close()
        if self.exit_status:
            self.exit_status = self.exit_status >> 8
        filehandle2.seek(0)
        self.collect_results( filehandle2 )
        filehandle2.close()

    def extension_to_language(self, ex ):
        if ex in known_extensions.keys():
            lang = known_extensions[ex]
        else:
            lang = 'cat'
        return lang