コード例 #1
0
 /// <summary>
 /// Converts keyword result to RF XmlRpc Structure
 /// </summary>
 public static XmlRpcStruct ToXmlRpcResult(KeywordResult kwresult)
 {
     var result = new XmlRpcStruct();
     //add status
     result.Add("status",kwresult.status.ToString());
     //add error, traceback, output
     result.Add("error",kwresult.error);
     result.Add("traceback",kwresult.traceback);
     result.Add("output",kwresult.output);
     //add return
     if ([email protected]().Equals(typeof(System.Int64)))
     {
         //64bit int has to be returned as string
         result.Add("return",[email protected]());
     }
     else
     {
         result.Add("return",kwresult.@return);
     }
     //check error type
     if (kwresult.status==KeywordStatus.FAIL)
     {
         if (kwresult.errortype==KeywordErrorTypes.Continuable)
         {
             //continuable error
             result.Add("continuable",true);
         }
         if (kwresult.errortype==KeywordErrorTypes.Fatal)
         {
             //fatal error
             result.Add("fatal",true);
         }
     }
     return result;
 }
コード例 #2
0
 /// <summary>
 /// Executes keyword with arguments, returns a keyword result
 /// </summary>
 public KeywordResult ExecuteKeyword(string name, object[] args)
 {
     //setup
     var keyword = _keywords.GetKeyword(name);
     var method = keyword.Method;
     var kwresult = new KeywordResult();
     var numargs = keyword.ArgumentCount;
     //check number of arguments
     if (args.Length!=numargs) throw new InvalidKeywordArgumentsException("Incorrect number of keyword arguments supplied");
     //setup trace listener
     Trace.Listeners.Add(_tracelistener);
     //invoke
     _timer.Start();
     try
     {
         if (method.ReturnParameter.ParameterType.Equals(typeof(void)))
         {
             method.Invoke(_instance, args);
             kwresult.@return = "";
         }
         else
         {
             kwresult.@return = method.Invoke(_instance, args);
             if (kwresult.@return==null)
             {
                 kwresult.@return = "";
             }
         }
         kwresult.status = KeywordStatus.PASS;
     }
     catch (TargetInvocationException ie)
     {
         kwresult.CaptureException(ie.InnerException);
     }
     catch (Exception e)
     {
         kwresult.CaptureException(e);
     }
     //stop timer
     _timer.Stop();
     kwresult.duration = _timer.Elapsed.TotalSeconds;
     //stop trace listener
     _tracelistener.Flush();
     Trace.Listeners.Remove(_tracelistener);
     kwresult.output = System.Text.Encoding.Default.GetString(_tracecontent.ToArray());
     _tracecontent.SetLength(0);
     //finish
     return kwresult;
 }