Roxen.git / server / etc / test / tests / pike_async_process_test_common.pike

version» Context lines:

Roxen.git/server/etc/test/tests/pike_async_process_test_common.pike:1: + int verbose; + Configuration c; + function do_when_done;    -  + string http_url; + int current_test, tests_failed; + Process.Process test; +  + string indent( int l, string what ) + { +  array q = what/"\n"; + // if( q[-1] == "" ) q = q[..sizeof(q)-2]; +  string i = (" "*l+"| "); +  return i+q*("\n"+i)+"\n"; + } +  + string do_describe_error( mixed err ) + { +  if( stringp( err ) ) +  return indent(2,err + (strlen(err)?(err[-1] == '\n' ? "": "\n" ):"")); +  err = (array)err; +  err[1] = err[1][sizeof(err[1])-3..]; +  return indent(2, describe_backtrace( err ) ); + } +  + string common_wait( mapping m ) + { +  int err = test->wait(); +  if( err == 100 ) return "Illegal arguments"; +  if( err == 99 ) return "Timeout"; +  if( !m[10] && (err == 10) ) +  return "The external pike script triggered an error"; +  if( !m[1] && (err == 1) ) +  return "The external pike script failed to compile"; +  return err && ( m[ err ] || ("Unknown error "+err) ); + } +  + void run_pikescript( string p, string ... args ) + { +  if( !http_url ) +  foreach( c->query("URLs"), string url ) +  if( has_prefix( url, "http://" ) ) +  http_url = url; +  +  if( !http_url ) +  { +  werror("Cannot run test -- no HTTP port open\n"); +  return; +  } +  +  test = Process.create_process( ({ +  "pike", +  combine_path( __FILE__, "../"+p ), +  http_url +  })+args ); + } +  + void current_test_done() + { + #define IND(X) this_object()[ "test_"+current_test+(X) ] +  if( !test || test->status() ) +  { +  if( function fp = IND("_check") ) +  if( string fail = fp( ) ) +  { +  tests_failed++; +  if( verbose ) report_debug(" FAILED\n"); +  report_debug(do_describe_error(IND("_desc")+" FAILED\n" )); +  report_debug(do_describe_error( fail )); +  } +  else if( verbose ) +  report_debug(" PASS\n"); +  +  +  current_test++; +  if( function t = IND("") ) +  { +  if( verbose ) +  report_debug("%3d %c%-66s ", current_test,' ',IND("_desc")[..65] ); +  if( mixed err = catch { +  t(); +  } ) +  { +  if( verbose ) report_debug(" FAILED\n"); +  report_debug(do_describe_error( err ) ); +  } +  call_out( current_test_done, 0.1 ); +  } +  else +  do_when_done( (current_test-1), tests_failed ); +  } +  else +  call_out( current_test_done, 0.1 ); + } +  +  +  + void low_run_tests( Configuration _c, function go_on ) + { +  do_when_done = go_on; +  c = _c; +  call_out( current_test_done, 0 ); + } +  +  + void create( int v ) + { +  verbose = v; + }   Newline at end of file added.