Your e-Business Quality Partner eValid™ -- Automated Web Quality Solution
Browser-Based, Client-Side, Functional Testing & Validation,
Load & Performance Tuning, Page Timing, Website Analysis,
and Rich Internet Application Monitoring.

eValid -- Interactive Mode -- C/C++ Example
eValid Home

Introduction
This page presents the detailed C/C++ program/script for operation of eValid in Interactive Mode. This example follows the outline given in the example interactive mode structure.

C/C++ Code
Here is the C/C++ code that implements the interactive mode structure.

// Interactive Mode Example.cpp
//
// Notes: 
//  - An ascii file called "commands.txt" must exist
//    in the same path as the sample program and must
//    contain a list of eValid script commands to execute.
//  - This sample program must have permission to
//    create and write to the file "C:\interactive_mode.evs".
// - This sample program performs no error checking.
//

#include "stdafx.h"
#include <windows.h>
#include <fstream>
#include <string>

#define EVALID_PATH  "evalid.exe"
#define SCRIPT_FILE  "c:\\interactive_mode.evs"
#define COMMAND_FILE "commands.txt"

using namespace std;

void runEvalid()
{
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  string commandLine;

  memset(&si, 0, sizeof(si));
  si.cb = sizeof(si);
 
  commandLine = EVALID_PATH;
  commandLine += " -i \"";
  commandLine += SCRIPT_FILE;
  commandLine += "\"";

  LPTSTR lpszCommand = new TCHAR[commandLine.length() + 1];
  strcpy(lpszCommand, commandLine.c_str());

  CreateProcess(NULL, lpszCommand, NULL, NULL, 
    FALSE, 0, NULL, NULL, &si, &pi);

 delete [] lpszCommand;

}

// Writes the line(s) to the evalid script file.
//
// The function waits until script file is empty 
// (zero file size) before the string is written.  
// Set truncate to true to override this constraint.
//
// This function makes attempts to write to the
// script file indefinitely until the script
// file has been write-unlocked.

void writeScriptLine(const std::string& scriptLine, bool truncate = false)
{
  for (bool done = false; !done; Sleep(10))
  {
    ios_base::open_mode mode = 
    ios_base::out | (truncate ? 0 : ios_base::app);
  
    ofstream out;
    out.open(SCRIPT_FILE, mode);
    if (!out.is_open())
    continue;
  
  // Current file position is zero 
  // if appending from an empty file.

  out.seekp(0, ios_base::end);
  int pos = out.tellp();
  if (pos == 0)
    {
    out << scriptLine << "\n";
    done = true;
    }
  out.close();
  }
}

int main(int argc, char* argv[])
{
  ifstream in;
  string scriptLine;

  // Gonna start eValid with a blank script file
  writeScriptLine(" ", true);
  
  // Launch eValid in Interactive Mode
  runEvalid();

  // Open command file for reading
  in.open(COMMAND_FILE, ios_base::in);

  // Process command file, reading one line from the file
  // at a time and writing it to the eValid script file

  while (!in.eof())
  {
  // Read one script line
  getline(in, scriptLine, '\n');

  // Write eValid command into script file
  writeScriptLine(scriptLine);

  // Analyze resulting logfiles (optional)
  }

  // Close file
  in.close(); 

  // Close eValid with the ExitNow command
  writeScriptLine("ExitNow");
 
  return 0;
}