mmtestenv/mmtesttools/Build/buildutils/testMbcUtils.py
author hgs
Tue, 02 Nov 2010 12:28:51 +0000
changeset 6 fe9d1bf55678
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
# All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
# This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
# under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
# which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
#
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
# Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
# Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
#
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
# Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
#
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
# Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
# Test code for MbcUtils
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
#
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
from MbcUtils import *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
import testDataMbcUtils as testdata
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
import unittest
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
import tempfile
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
import StringIO
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
class TestParent(unittest.TestCase):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
    """Potential parent test"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
    def TempFile(self, str):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
        """Create a temp file. Write given string and return filename.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
        Note caller is responsible for deleting the file"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
        tfile = tempfile.mkstemp()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
        file = os.fdopen(tfile[0],"w")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
        print >> file, str
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
        file.close() # close the file - we just want the filename then
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
        return tfile[1] # return filename. Note client expected to delete
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
    def fixupDirsInExpectedList(self, expectedToFixUp):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
        """Convert relative filenames to absolute.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
        The returned list returns absolute filenames. Need to convert relelative
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
        names to absolute so can easily compare."""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
        for tupEle in expectedToFixUp:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
            mbcFile = tupEle[0]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
            baseDir = os.path.dirname(mbcFile)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
            for i in range(1,3):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
                # tupEle[1] is list of required folders
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
                # tupEle[2] is list of optional folders
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
                for j in range(0, len(tupEle[i])):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
                    absDir = os.path.abspath(os.path.join(baseDir, tupEle[i][j]))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
                    tupEle[i][j] = absDir
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
            # tupEle[3] is list of tuples of dir and command
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
            for j in range(0, len(tupEle[3])):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
                # note need to tuple to list and back to do this
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
                lst = list(tupEle[3][j])
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
                absDir = os.path.abspath(os.path.join(baseDir, lst[0]))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
                lst[0] = absDir
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
                tupEle[3][j] = tuple(lst)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
        return expectedToFixUp
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
class SimpleTest(TestParent):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
    """Open and return basic case"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
    def __init__(self, sample, expected):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
        super(SimpleTest,self).__init__()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
        self.sample = sample
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
        self.expected = expected
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
        self.tfileName = None
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
    def fixExpected(self, fname):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
        """change the filename slot in self.expected"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
        # expected is a tuple. Need to convert to list and back.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
        # then turn into a single element list so can run through
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
        # fixupDirsInExpectedList()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
        tempList = list(self.expected)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
        tempList[0] = fname
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
        newTuple = tuple(tempList)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
        fixedList = self.fixupDirsInExpectedList([newTuple])
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
        self.expected = fixedList[0]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
    def runTest(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
        """SimpleTest.runTest
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
        Create temp file with known content. Run parser and compare result
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
        """
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
        self.tfileName = self.TempFile(self.sample)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
        parser = MbcParser(self.tfileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
        parser.execute()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
        self.fixExpected(self.tfileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
        result = parser()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
        self.assertEquals(result, self.expected,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
                        "Result(%s) not same as Expected(%s)"%(result,self.expected))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
    def tearDown(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
        if self.tfileName:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
            os.unlink(self.tfileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
class BadDataTest(SimpleTest):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
    """Bad data so should get an exception"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
    def __init__(self, sample, testName):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
        super(BadDataTest,self).__init__(sample, [])
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
        self.__testName = testName
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
    def runTest(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
        """BadDataTest.runTest
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
        Use SimpleTest.runTest. Should throw an exception"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
        self.assertRaises(InvalidInput, SimpleTest.runTest, self)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
    def shortDescription(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
		"One line description - additionally giving test name"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
		parentStr = super(BadDataTest, self).shortDescription()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
		return  "%s-%s" % (parentStr, self.__testName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
class ListTest(TestParent):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
    """Open and return basic case, but with list input"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
    def __init__(self, samples, expected, secondStageExpected=None, filenameToLookFor=None):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
        super(ListTest,self).__init__()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
        self.samples = samples
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
        self.expected = expected
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
        self.secondStageExpected = secondStageExpected
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
        self.filenameToLookFor = filenameToLookFor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
        self.tfileNames = []
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
    def fixExpected(self, indx, fname):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
        """change the filename slot in self.expected"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
        # expected is a tuple. Need to convert to list and back
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
        tempList = list(self.expected[indx])
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
        tempList[0] = fname
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
        self.expected[indx] = tuple(tempList)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
    def runTest(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
        """ListTest.runTest
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
        Create temp files with known content, one per list element. Run parser and compare result
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
        """
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
        for indx in range(0, len(self.samples)):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
            tfileName = self.TempFile(self.samples[indx])
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
            self.tfileNames.append(tfileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
            self.fixExpected(indx, tfileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
        self.expected = self.fixupDirsInExpectedList(self.expected)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
        parser = MbcParser(self.tfileNames)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
        parser.execute()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
        result = parser()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
        self.assertEquals(result, self.expected,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
                        "Result(%s) not same as Expected(%s)"%(result,self.expected))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
        if self.secondStageExpected:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
            getFolderList = GetFolderList(result)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
            getFolderList.execute()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
            folderList = getFolderList()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
            self.assertEquals(folderList, self.secondStageExpected,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
                       "Result2(%s) not same as Expected2(%s)"%(folderList,self.secondStageExpected))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
    def tearDown(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
        if self.tfileNames:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
            for fname in self.tfileNames:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
                os.unlink(fname)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
class FolderListUnitTest(TestParent):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
    """Test GetFolderList with on-the-fly generated data.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
    Create a list on fly with folder of one temp file and a non-existant one. Treatement of second
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
    is optional."""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
    def __init__(self, fussyOnNonExist):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
        super(FolderListUnitTest,self).__init__()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
        self.__fussyOnNonExist = fussyOnNonExist
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
        self.__tempFile = None
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
    def shortDescription(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
		"""One line description - additionally giving option"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
		parentStr = super(FolderListUnitTest, self).shortDescription()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
		return  "%s-%s" % (parentStr, str(self.__fussyOnNonExist))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
    def __realTest(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
        "real test run - separate so can be trapped if required"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
        self.__tempFile = tempfile.NamedTemporaryFile() # used to create list and check
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
        (input,tempFileName,expected) = self.__createDataLists()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
        getFolderList = GetFolderList(input, nameToCheck=tempFileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
        getFolderList.execute()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
        result = getFolderList()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
        self.assertEquals(result, expected,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
                "Result2(%s) not same as Expected2(%s)(filename=%s)"%(result,expected,tempFileName))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
    def runTest(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
        "FolderListUnitTest.runTest"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
        if not self.__fussyOnNonExist:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
            self.__realTest()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
        else:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
            # should fail
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
            self.assertRaises(MissingFile, self.__realTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
    def tearDown(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
        "Stop using temp file, so will be deleted"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
        self.__tempFile = None
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
    def __createDataLists(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
        """Create input and output for test run as lists.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
        input will be one element with <tempdir> and second with "nonexistant",
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
        but which element is used depends on fussyOnNonExist"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
        input = []
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
        tempFileName = None
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
        expected = []
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
        (tempDir,tempFileName) = os.path.split(self.__tempFile.name) # the dir and name of the temporary file we are using
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
        input += [("f1", [tempDir], [], [])] # the existing file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
        expected += [(True, tempDir, 'From f1')]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
        if self.__fussyOnNonExist:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
            input += [("f2", ["nonexistant"], [], [])]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
        else:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
            input += [("f2", [], ["nonexistant"], [])]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
        expected += [(True, None, 'Skip "nonexistant" from f2')] # always return the non-fussy version, as with fussy we expect exception raised
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
        return (input,tempFileName,expected)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
class FolderListIntTest(TestParent):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
    """Integration test combining MbcParser and FolderList
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
    Create a temporary folder. Add the following contents:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
    x/bld.inf
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
    y/bld.inf
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
    z/bld.inf
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
    mbc containing "./x, ./y, [optional] ./z"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
    z/bld.inf and y.bld are optional
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
        option="x" no z or y. Should raise exception.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
        option="xy" no z but y. Should get list of ../x and ../y
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
        option="xz" no y but z. Should raise exception.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
        option="xyz" both y and z. Should get list of ../x, ../y and ../z
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
    """
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
    def __init__(self, option):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
        super(FolderListIntTest,self).__init__()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
        self.__option = option
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
        self.__testDir = None
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
        self.__testDirs = [] # list of dirs we create, so we can delete them
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
        self.__testFiles = [] # list of files we create, so we can delete them
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
        self.__fullMbcFileName = None
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
        self.__expectedResult = []
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
    def shortDescription(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
        "One line description - additionally giving option"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
        parentStr = super(FolderListIntTest, self).shortDescription()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
        return  "%s-%s" % (parentStr, str(self.__option))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
    def tearDown(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
        for fle in self.__testFiles:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
            try:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
                os.unlink(fle)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
            except:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
                pass # ignore any error. assume means we didn't create the file in the end
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
        # delete folders in reverse, so child directories deleted after parent
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
        for dir in self.__testDirs[len(self.__testDirs)-1::-1]:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
            try:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
                os.rmdir(dir)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
            except:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
                pass # ignore any error. assume means we didn't create the file in the end
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
    def runTest(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
        "FolderListIntTest.runTest"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
        self.__setup()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
        if "y" in self.__option:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
            self.__realTest()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
        else:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
            # expected to raise exception as y/bld.inf does not exist
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
            self.assertRaises(MissingFile, self.__realTest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
    def __realTest(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
        parser = MbcParser(self.__fullMbcFileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
        parser.execute()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
        folderList = GetFolderList(parser())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
        folderList.execute()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
        result = folderList()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
        self.assertEquals(result, self.__expectedResult,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
            "Result (%s) not that expected (%s)" % (str(result), str(self.__expectedResult)))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
    def __setup(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
        self.__testDir = tempfile.mkdtemp() # __testDir is name of temp folder
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
        self.__testDirs.append(self.__testDir)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
        self.__fullMbcFileName = os.path.join(self.__testDir, "test.mbc")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
        for name in ["x","y","z"]:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
            fullpath = os.path.join(self.__testDir, name)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
            if name in self.__option:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
                os.mkdir(fullpath)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
                self.__testDirs.append(fullpath)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
                filepath = os.path.join(fullpath, "bld.inf")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
                fileToWrite = file(filepath, "w")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
                self.__testFiles.append(filepath)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
                print >>fileToWrite, "//generated" # 9.5 syntax
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
                fileToWrite.close()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
                expected = (True, fullpath, "From %s" % self.__fullMbcFileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
                self.__expectedResult.append(expected)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
            else:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
                expected = (True, None, """Skip "%s" from %s""" % (fullpath, self.__fullMbcFileName))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
                self.__expectedResult.append(expected)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
        mbcFile = file(self.__fullMbcFileName, "w")
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
        self.__testFiles.append(self.__fullMbcFileName)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
        print >>mbcFile, testdata.intTestMbcFile
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
        mbcFile.close()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
class ConfigFileUnitTest(unittest.TestCase):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
    """ConfigFile UnitTest"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
    def __init__(self, inputData, expected):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
        super(ConfigFileUnitTest,self).__init__()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
        self.__inputData = inputData
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
        self.__expected = expected
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
    def runTest(self):
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
        """ConfigFileUnitTest.runTest
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
        Take dummy folder list and generate XML file. Output goes to string. Compare with expected
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
        """
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
        outputStream = StringIO.StringIO()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
        generator = ConfigFileGenerator(self.__inputData, outputStream)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
        generator.write()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
        outputString = outputStream.getvalue()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
##        print ("output=%s" % str(outputString))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
##        print ("expected=%s" % str(self.__expected))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
        self.assertEquals(outputString, self.__expected,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
                "Generated output (%s) not same as expected (%s)" % (outputString, self.__expected))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
def suite():
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
    """TestSuite"""
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
    tests = [
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
        SimpleTest(testdata.import1, testdata.result1),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
        ListTest(testdata.import2, testdata.result2),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
        BadDataTest(testdata.badImport1, "bad1"),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
        BadDataTest(testdata.badImport2, "bad2"),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
        FolderListUnitTest(False),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
        FolderListUnitTest(True),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
        FolderListIntTest("x"),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
        FolderListIntTest("xy"),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
        FolderListIntTest("xz"),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
        FolderListIntTest("xyz"),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
        ConfigFileUnitTest(testdata.testFolderList1, testdata.testXmlFile1),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
        ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
    return unittest.TestSuite(tests)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
if __name__ == "__main__":
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
    unittest.TextTestRunner(verbosity=2).run(suite())