Example #1
0
    def _analyze(self, code_unit):
        """Analyze a single code unit.
        
        Returns a 4-tuple: (statements, excluded, missing, missing formatted).

        """
        from parser import CodeParser

        filename = code_unit.filename
        ext = os.path.splitext(filename)[1]
        source = None
        if ext == '.py':
            if not os.path.exists(filename):
                source = self.file_locator.get_zip_data(filename)
                if not source:
                    raise CoverageException(
                        "No source for code '%s'." % code_unit.filename
                        )

        parser = CodeParser()
        statements, excluded, line_map = parser.parse_source(
            text=source, filename=filename, exclude=self.exclude_re
            )

        # Identify missing statements.
        missing = []
        execed = self.data.executed_lines(filename)
        for line in statements:
            lines = line_map.get(line)
            if lines:
                for l in range(lines[0], lines[1]+1):
                    if l in execed:
                        break
                else:
                    missing.append(line)
            else:
                if line not in execed:
                    missing.append(line)

        return (
            statements, excluded, missing, format_lines(statements, missing)
            )
Example #2
0
	def process_data(self,data,username_and_repo_name):
		'''analyze the data and generate the test code'''
		self.trace_data = data
		'''
		source_code
		source_lines_and_number
		per_line_dependencies
		AST
		file_name
		type_recording
		lines
		assigns
		globals
		kw
		arg
		return_value
		per_line_locals
		function_name
		'''
		parsed = ast.parse(self.trace_data['source_code'])
		p = CodeParser()
		p.visit(parsed)
		#print self.trace_data['function_name']
		self.trace_data['username_and_repo_name'] = username_and_repo_name
		self.trace_data['AST'] = ast.dump(parsed)
		self.trace_data['assigns'] = p.get_assigns()
		self.trace_data['decorators'] = p.get_decorators()
		self.trace_data['loops'] = p.get_loops()
		self.trace_data['calls'] = p.get_calls()
		#print self.trace_data['assigns']
		#print self.trace_data['calls']
		"""for local in self.trace_data['per_line_locals']:
			print local
			print '\n\n'"""

		self.trace_data['return_calls'] = p.get_returns()
		self.trace_data['imports'] = p.get_imports()
		self.trace_data['mocked_out_functions'] = []
		self.test_code['function']['def'] = "def test_" + self.trace_data['function_name']
		self.test_data = {'mocked_out_calls':[],'fixtures':[],'imports':[]}
		self.specify_parameters()
		self.specify_parameter_values()
		self.specify_return_value()
		self.specify_patches()
		self.specify_mock_return_values()
    def _analyze(self, code_unit):
        """Analyze a single code unit.
        
        Returns a 4-tuple: (statements, excluded, missing, missing formatted).

        """
        from parser import CodeParser

        filename = code_unit.filename
        ext = os.path.splitext(filename)[1]
        source = None
        if ext == '.py':
            if not os.path.exists(filename):
                source = self.file_locator.get_zip_data(filename)
                if not source:
                    raise CoverageException("No source for code '%s'." %
                                            code_unit.filename)

        parser = CodeParser()
        statements, excluded, line_map = parser.parse_source(
            text=source, filename=filename, exclude=self.exclude_re)

        # Identify missing statements.
        missing = []
        execed = self.data.executed_lines(filename)
        for line in statements:
            lines = line_map.get(line)
            if lines:
                for l in range(lines[0], lines[1] + 1):
                    if l in execed:
                        break
                else:
                    missing.append(line)
            else:
                if line not in execed:
                    missing.append(line)

        return (statements, excluded, missing,
                format_lines(statements, missing))