Function decorator which adds "context" around a group of TestCases and may have
        a `before` and `after` func.

            >>> s = Suite()
            >>> @s.context('context 1')
            ... def _():
            ...     @s.before
            ...     def _(): print('before 1 called.')
            ...     @s.it('runs a test')
            ...     def _(): print('test case 1 called.')
            >>> @s.context('context 2')
            ... def _():
            ...     @s.before
            ...     def _(): print('before 2 called.')
            ...     @s.it('runs a test')
            ...     def _(): print('test case 2 called.')
            >>> tc1 = list(s.nodes())[2]
            >>> tc1.run()
            before 1 called.
            test case 1 called.
            >>> tc1 = list(s.nodes())[4]
            >>> tc1.run()
            before 2 called.
            test case 2 called.

def context(self, message):
        '''
        Function decorator which adds "context" around a group of TestCases and may have
        a `before` and `after` func.

            >>> s = Suite()
            >>> @s.context('context 1')
            ... def _():
            ...     @s.before
            ...     def _(): print('before 1 called.')
            ...     @s.it('runs a test')
            ...     def _(): print('test case 1 called.')
            >>> @s.context('context 2')
            ... def _():
            ...     @s.before
            ...     def _(): print('before 2 called.')
            ...     @s.it('runs a test')
            ...     def _(): print('test case 2 called.')
            >>> tc1 = list(s.nodes())[2]
            >>> tc1.run()
            before 1 called.
            test case 1 called.
            >>> tc1 = list(s.nodes())[4]
            >>> tc1.run()
            before 2 called.
            test case 2 called.
        '''
        def decorator(context_func):
            self.push_container(message)
            context_func()
            self.pop_container()
        return decorator