Object generateJson()

in DDT-Framework/src/main/groovy/ddt/framework/ReportUtils.groovy [102:260]


  Object generateJson (TestCaseRunner testRunner) {
   //log.info " ... into generateJson ...  "

   def testcasesList = new ArrayList()
   def tsMap         = new LinkedHashMap()

   def testCaseRunResult = new TestCaseResult(
                                name: "",
								time: 0,
								failSign: false,
								resultMessages: new ArrayList(),
								failure: new LinkedHashMap())
   
   for(int r=0; r <= testRunner.getResults().size()-1; r++) {
	 def result = testRunner.getResults().get(r)
	 def testStep = result.getTestStep()
	 
     // go through result messages to search for TC_NAME_PATTERN
     for(message in result.getMessages()) {
	    //log.info "test step result message ${message}"
	    def matcher = ( message =~ TC_NAME_PATTERN )
		if ( matcher ) {
		  //log.info "when pattern is matched -> ${matcher.group(0)}"
		  //log.info "current TC ${currentTC}"
		  
		  if ( testCaseRunResult.name == "" ) {
		     testCaseRunResult.name = matcher.group(1)
			 //log.info "currentTC ${testCaseRunResult.name}"
			 testcasesList.add(testCaseRunResult)
		   }
		  else
		  if ( testCaseRunResult.name != matcher.group(1) ) {
		     //log.info "...when another test case name..."
			 
			 def findSimularTestCase = findResultByTestCaseName(testcasesList, matcher.group(1))
			 //log.info "after a try to find simular test case ${findSimularTestCase}"
			 if ( findSimularTestCase ) {
			    // setup found test case to continue
			    testCaseRunResult = findSimularTestCase
				//log.info "... when found the same test..."
			 }
			 else {
			    //log.info "... when start new test..."
				
				testCaseRunResult = new TestCaseResult(
                                        name: matcher.group(1),
						        		time: 0,
						        		failSign: false,
						        		resultMessages: new ArrayList(),
						        		failure: new LinkedHashMap())
				testcasesList.add(testCaseRunResult)
				
			 }

		    } 
		  
		} 
	  } // for (message .... to search TC_NAME_PATTERN ...
	 
		
	    // sum time amount
        testCaseRunResult.time = testCaseRunResult.time + result.getTimeTaken()		
	  
	    // get test step type (i.e. 'groovy', 'delay', 'properties', 'request', 'restrequest', 'jdbc', etc.)
        def type = testStep.config.type    
	    //log.info "test step type ${type}"	

		// collect specific test step info 
        switch(type){    
	      case 'manualTestStep':              // manual test step -> PAUSE
     	    testCaseRunResult.resultMessages.add("step ${testStep.name} (user do some manual actions)")
		    break
			
          case 'groovy':                      // Script test step -> Before, DataDriver, goto Lopper... , After
		    break
			
          case 'delay':                       // Delay test step -> WAIT
            testCaseRunResult.resultMessages.add("step ${testStep.name} (execution waits some defined in milliseconds time)")			
            break
	
          //case 'properties':               //Properties test step - NOT used in current imlementation
            //break

          //case 'request':                   //SOAP Request/Response test step - NOT used in current implementation
            //break
			
		  case ['restrequest','jdbc']:       // Rest,Jdbc request test step -> GET, PUT, POST, DELETE, OPTIONS, JDBC
		     testCaseRunResult.resultMessages.add("step ${testStep.name}")

             def requestResponse = result?.response
			 
			 if ( requestResponse != null ) {
             def rawRequestData = requestResponse.getRawRequestData()
			   if ( rawRequestData != null ) {
			     def rawReq = new String(rawRequestData,"UTF-8")
			     //log.info "rawReq ${rawReq}"
				 testCaseRunResult.resultMessages.add("REQUEST: " + rawReq)
			   } else {
			     testCaseRunResult.resultMessages.add("NO raw request")
			   }
			   
			  def rawResponseData = requestResponse.getRawResponseData()
			    if ( rawResponseData != null ) {
			      def rawRes = new String(rawResponseData,"UTF-8")
			      //log.info "rawRes ${rawRes}"
				  testCaseRunResult.resultMessages.add("RESPONSE: " + rawRes)
				 } else {
				  testCaseRunResult.resultMessages.add("NO raw response")
				 }
			  } else {
			    testCaseRunResult.resultMessages.add("NO sent request and incoming response at all")
			  }
		
            break		
		    
        }  // switch(type) ...		
		
		// collect result messages
       for(message in result.getMessages()) {
    	 //log.info "test step result message ${message}"
	     def matcher1 = ( message =~ TC_NAME_PATTERN )
	      if ( !matcher1 ) {
		    testCaseRunResult.resultMessages.add(message)
			//log.info "collect result messages ${message}"
		  } 
	    }	// for ...	
		
		// process fails
        if ( result?.getStatus() == TestStepStatus.FAILED ) {
		  //log.info "...when Fail is detected..."
		  if ( testCaseRunResult.failSign == false ) {
		    //log.info "...collect info about fail..."
		     testCaseRunResult.failure.put("type","Failing due to failed test step")
			 testCaseRunResult.failure.put("message","Failing due to failed test step ${testStep.name}")
			 testCaseRunResult.failure.put("info",testCaseRunResult.resultMessages.collect())

		  }
		  testCaseRunResult.failSign = true		  
		}
       
	   // last iteration
	   if ( r == testRunner.getResults().size()-1 ) {
	    //log.info "... last iteration ..."

       tsMap.put("testcases",testcasesList)
	   tsMap.put("name","${projectName}.${suiteName}")
	   tsMap.put("errors","0")	   
	   addSumTestsInfo(testcasesList, tsMap)
	   
	   }   // if ... last iteration ...

	
    }   //  for(result ...
	
	
  //log.info "collected Map Object ${tsMap.toString()}"
  return JsonOutput.toJson(tsMap)
  
  }  // ... generateJson method