Example #1
0
    def testPrintEmptyStringIndent(self):
        stream = StringIO()

        oss = TextOutput(stream)
        oss.P('', indent=1)
        expected_output = '    \n'
        assert stream.getvalue() == expected_output
Example #2
0
    def testDefaultVerbose(self):
        stream = StringIO()
        oss = TextOutput(stream, verbose_level=1)
        oss.P('Alpha')
        oss.P('Bravo')
        assert stream.getvalue() == 'Alpha\nBravo\n'

        stream = StringIO()
        oss = TextOutput(stream, verbose_level=1)
        oss.default_verbose = 2
        oss.P('Alpha')
        oss.P('Bravo')
        assert stream.getvalue() == ''
Example #3
0
    def testIndentContextManager(self):
        stream = StringIO()
        output = TextOutput(stream)

        output.P()  # Empty line
        output.P('Simple line')
        output.P('Indented line', indent=1)

        # We simulate the with_statement, since coilib50 cannot depend on it
        with_stmt = output.P('Now using with!', top_margin=1)
        with_stmt.__enter__()
        output.I('Item inside context')
        with_stmt.__exit__()

        output.I('Item outside context', top_margin=1)

        expected_output = '''
Simple line
    Indented line

Now using with!
    - Item inside context

- Item outside context
'''
        assert stream.getvalue() == expected_output
Example #4
0
    def testPrintEnvironment(self, embed_data):
        # Create a fake environment
        environment = {
            'var1' : 'value1',
            'var2' : 'value2',
            'PATH' : os.pathsep.join(['path1', 'path2']),
            'PYTHONPATH' : os.pathsep.join(['pythonpath1', 'pythonpath2']),

        }

        # Prepare a controled text output
        stream = StringIO()
        output = TextOutput(stream)

        # Print environment
        PrintEnvironment(environment, output)

        # Save output to temp file
        obtained = embed_data.GetDataFilename('testPrintEnvironment.txt')
        CreateFile(obtained, contents=stream.getvalue())

        # Compare file contents
        embed_data.AssertEqualFiles(
            obtained,
            'testPrintEnvironment.expected.txt'
        )
Example #5
0
    def testDefaultVerbose(self):
        stream = StringIO()
        oss = TextOutput(stream, verbose_level=1)
        oss.P('Alpha')
        oss.P('Bravo')
        assert stream.getvalue() == 'Alpha\nBravo\n'

        stream = StringIO()
        oss = TextOutput(stream, verbose_level=1)
        oss.default_verbose = 2
        oss.P('Alpha')
        oss.P('Bravo')
        assert stream.getvalue() == ''
Example #6
0
    def testPageWidthParameter(self):
        oss = TextOutput()
        oss.c_page_width = 80
        oss.RegisterKeyword('yes', 'This will be shown')
        oss.RegisterKeyword('no', 'This will not be shown')
        oss.SetKeyword('yes', True)

        stream = StringIO()
        oss.SetOutputStream(stream)
        try:
            raise RuntimeError('This is an exception')
        except Exception:
            oss.EXCEPTION()
        assert stream.getvalue() == Dedent('''
            ********************************************************************************
            RuntimeError:
                This is an exception
            --------------------------------------------------------------------------------
            %s
                raise RuntimeError('This is an exception')
            ********************************************************************************

            ''') % '\n'.join(textwrap.wrap(__file__ + ':52:', 80))

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.P('alpha bravo charlie delta echo foxtrot')
        oss.P('No show', verbose=4)
        oss.P('No show', keywords=('no', ))
        assert stream.getvalue() == Dedent('''
            alpha bravo charlie delta echo foxtrot

            ''')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.P('alpha bravo charlie delta echo foxtrot', page_width=12)
        assert stream.getvalue() == Dedent('''
            alpha bravo
            charlie
            delta echo
            foxtrot

            ''')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.I('alpha')
        oss.I('bravo')
        oss.I('charlie')
        oss.I('No show', verbose=4)
        oss.I('No show', keywords=('no', ))
        assert stream.getvalue() == Dedent('''
            - alpha
            - bravo
            - charlie

            ''')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.TABLE([7, 8, 9], ['alpha', 'bravo', 'charlie'],
                  [[1, 2, 3], [4, 5, 6]])
        assert 'x\n' + stream.getvalue() == Dedent('''
            x
                  alpha   bravo  charlie
                      1       2        3
                      4       5        6

            ''')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.HEADER("This is header")
        oss.HEADER('No show', verbose=4)
        oss.HEADER('No show', keywords=('no', ))
        assert stream.getvalue() == Dedent('''
            --------------------------------------------------------------------------------
            This is header
            --------------------------------------------------------------------------------

            ''')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.ERROR('Oops!')
        oss.ERROR('Oops!', verbose=4)
        oss.ERROR('Oops!', keywords=('no', ))
        assert stream.getvalue() == Dedent('''
            ********************************************************************************
            ERROR
              Oops!
            ********************************************************************************

            ''')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.PROCESSING('...', 'Doing')
        oss.PROCESSING('Done')
        oss.PROCESSING('...', 'Multi\nline\ndoing')
        oss.PROCESSING('Done')
        oss.flat_output = True
        oss.PROCESSING('...', 'Doing')
        oss.PROCESSING('Done')
        oss.PROCESSING('No show', verbose=4)
        oss.PROCESSING('No show', keywords=('no', ))
        assert stream.getvalue() == Dedent('''
            ...Doing\\rDone
            ...Multi
               line
               doing
            \\rDone
            Doing...Done

            ''')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.DT('caption', 'value')
        oss.DT('No show', verbose=4)
        oss.DT('No show', keywords=('no', ))
        assert (stream.getvalue() == 'caption value:\n')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.DD('caption', 'value')
        oss.DD('No show', 'No show', verbose=4)
        oss.DD('No show', 'No show', keywords=('no', ))
        assert (stream.getvalue() == 'caption:\n    value\n')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.LINE('-')
        oss.LINE('X', verbose=4)
        oss.LINE('X', keywords=('no', ))
        assert (stream.getvalue() == '-' * 80 + '\n')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.Indent()
        oss.Indent()
        oss.P('alpha')
        oss.Dedent()
        oss.P('bravo')
        oss.ResetIndentation()
        oss.P('charlie')
        assert (stream.getvalue() == '        alpha\n    bravo\ncharlie\n')
Example #7
0
    def testPageWidthParameter(self):
        oss = TextOutput()
        oss.c_page_width = 80
        oss.RegisterKeyword('yes', 'This will be shown')
        oss.RegisterKeyword('no', 'This will not be shown')
        oss.SetKeyword('yes', True)

        stream = StringIO()
        oss.SetOutputStream(stream)
        try:
            raise RuntimeError('This is an exception')
        except Exception:
            oss.EXCEPTION()
        assert stream.getvalue() == Dedent(
            '''
            ********************************************************************************
            RuntimeError:
                This is an exception
            --------------------------------------------------------------------------------
            %s
                raise RuntimeError('This is an exception')
            ********************************************************************************

            '''
        # Hard-coded 57 points to the "raise RuntimeError('This is an exception')" line in this file
        ) % '\n'.join(textwrap.wrap(__file__ + ':57:', 80))

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.P('alpha bravo charlie delta echo foxtrot')
        oss.P('No show', verbose=4)
        oss.P('No show', keywords=('no',))
        assert stream.getvalue() == Dedent(
            '''
            alpha bravo charlie delta echo foxtrot

            '''
        )

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.P('alpha bravo charlie delta echo foxtrot', page_width=12)
        assert stream.getvalue() == Dedent(
            '''
            alpha bravo
            charlie
            delta echo
            foxtrot

            '''
        )

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.I('alpha')
        oss.I('bravo')
        oss.I('charlie')
        oss.I('No show', verbose=4)
        oss.I('No show', keywords=('no',))
        assert stream.getvalue() == Dedent(
            '''
            - alpha
            - bravo
            - charlie

            '''
        )

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.TABLE([7, 8, 9], ['alpha', 'bravo', 'charlie'], [[1, 2, 3], [4, 5, 6]])
        assert 'x\n' + stream.getvalue() == Dedent(
            '''
            x
                  alpha   bravo  charlie
                      1       2        3
                      4       5        6

            '''
        )

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.HEADER("This is header")
        oss.HEADER('No show', verbose=4)
        oss.HEADER('No show', keywords=('no',))
        assert stream.getvalue() == Dedent(
            '''
            --------------------------------------------------------------------------------
            This is header
            --------------------------------------------------------------------------------

            '''
        )

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.ERROR('Oops!')
        oss.ERROR('Oops!', verbose=4)
        oss.ERROR('Oops!', keywords=('no',))
        assert stream.getvalue() == Dedent(
            '''
            ********************************************************************************
            ERROR
              Oops!
            ********************************************************************************

            '''
        )

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.flat_output = False
        oss.PROCESSING('...', 'Doing')
        oss.PROCESSING('Done')
        oss.PROCESSING('...', 'Multi\nline\ndoing')
        oss.PROCESSING('Done')
        oss.flat_output = True
        oss.PROCESSING('...', 'Doing')
        oss.PROCESSING('Done')
        oss.PROCESSING('No show', verbose=4)
        oss.PROCESSING('No show', keywords=('no',))
        assert stream.getvalue() == Dedent(
            '''
            ...Doing\\rDone
            ...Multi
               line
               doing
            \\rDone
            Doing...Done

            '''
        )

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.DT('caption', 'value')
        oss.DT('No show', verbose=4)
        oss.DT('No show', keywords=('no',))
        assert (stream.getvalue() == 'caption value:\n')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.DD('caption', 'value')
        oss.DD('No show', 'No show', verbose=4)
        oss.DD('No show', 'No show', keywords=('no',))
        assert (stream.getvalue() == 'caption:\n    value\n')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.LINE('-')
        oss.LINE('X', verbose=4)
        oss.LINE('X', keywords=('no',))
        assert (stream.getvalue() == '-' * 80 + '\n')

        stream = StringIO()
        oss.SetOutputStream(stream)
        oss.Indent()
        oss.Indent()
        oss.P('alpha')
        oss.Dedent()
        oss.P('bravo')
        oss.ResetIndentation()
        oss.P('charlie')
        assert (stream.getvalue() == '        alpha\n    bravo\ncharlie\n')
Example #8
0
    def __enter__(self):
        '''
        Copies the current environment and sets the given environment

        :param dict(str:str) environ:
            A dictionary of environment variables names and values
        '''
        self._old_environ = os.environ.copy()
        self._old_sys_path = sys.path[:]

        if not self._update:
            os.environ.clear()
            if self._change_sys_path:
                new_sys_path = sys.path[:]
                new_sys_path = map(CanonicalPath, new_sys_path)

                # Keeping python_home paths so this instance of Python continues to work.
                python_home = CanonicalPath(GetExecutableDir())
                new_sys_path = [
                    i for i in new_sys_path if i.startswith(python_home)
                ]

                sys.path = new_sys_path

        if self._update:
            # Merge some list variables to include new stuff
            def SetMerged(variable):
                merged_values = []

                new_value = self._new_environ.get(variable)
                if new_value is not None:
                    merged_values += new_value.split(os.pathsep)

                current_value = os.environ.get(variable)
                if current_value is not None:
                    merged_values += [
                        i for i in current_value.split(os.pathsep)
                        if i not in merged_values
                    ]

                merged = os.pathsep.join(merged_values)
                if len(merged) > 0:
                    self._new_environ[variable] = merged

            SetMerged('PATH')
            SetMerged('PYTHONPATH')
            SetMerged('LD_LIBRARY_PATH')

        try:
            # Update environment variables
            os.environ.update(self._new_environ)

            if self._change_sys_path:
                sys.path += os.environ.get('PYTHONPATH', '').split(os.pathsep)

        except Exception, e:
            stream = StringIO()
            oss = TextOutput(stream)
            PrintEnvironment(self._new_environ, oss)
            Reraise(
                e, 'While entering an EnvironmentContextManager with:%s' %
                stream.getvalue())