Logo Search packages:      
Sourcecode: libgnucrypto-java version File versions  Download package

SimpleTestHarness.java

// Copyright (c) 1998, 1999, 2001  Red Hat, Inc.
// Written by Tom Tromey <tromey@cygnus.com>

// This file is part of Mauve.

// Mauve is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.

// Mauve is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Mauve; see the file COPYING.  If not, write to
// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
// Boston, MA 02110-1301, USA.

// KNOWN BUGS:
//   - should look for /*{ ... }*/ and treat contents as expected
//     output of test.  In this case we should redirect System.out
//     to a temp file we create.

package gnu.testlet;
import java.io.*;
import java.util.Vector;

00030 public class SimpleTestHarness
    extends TestHarness
    implements gnu.testlet.config
{
  private int count = 0;
  private int failures = 0;
  private static Vector expected_xfails = new Vector ();
  private int xfailures = 0;
  private int xpasses = 0;
  private int total = 0;
  private boolean verbose = false;
  private boolean debug = false;
  private boolean results_only=false;
  private String description;
  private String last_check;

  private final String getDescription (String pf)
    {
      return (pf + ": " + description
            + ((last_check == null) ? "" : (": " + last_check))
            + " (number " + (count + 1) + ")");
    }

  public void check (boolean result)
    {
      if (! result)
      {
        String desc;
        if (!expected_xfails.contains (desc = getDescription ("FAIL")))
          {
            System.out.println (desc);
            ++failures;
          }
        else if (verbose || results_only)
          {
            System.out.println ("X" + desc);
            ++xfailures;
          }
      }
      else if (verbose || results_only)
      {
        if (expected_xfails.contains (getDescription ("FAIL")))
          {
            System.out.println (getDescription ("XPASS"));
            ++xpasses;
          }
        else
          {
            System.out.println (getDescription ("PASS"));
          }
      }
      ++count;
      ++total;
    }

  public String getSourceDirectory ()
    {
      return srcdir;
    }

  public String getTempDirectory ()
    {
      return tmpdir;
    }

  public String getPathSeparator ()
    {
      return pathSeparator;
    }

  public String getSeparator ()
    {
      return separator;
    }

  public Reader getResourceReader (String name)
    throws ResourceNotFoundException
    {
      return (new BufferedReader (new InputStreamReader (
            getResourceStream (name))));
    }

  public InputStream getResourceStream (String name)
    throws ResourceNotFoundException
    {
      // The following code assumes File.separator is a single character.
      if (File.separator.length () > 1)
      throw new Error ("File.separator length is greater than 1");
      String realName = name.replace ('#', File.separator.charAt (0));
      try
      {
        return
          new FileInputStream (getSourceDirectory ()
                        + File.separator
                        + realName);
      }
      catch (FileNotFoundException ex)
      {
        throw new ResourceNotFoundException (ex.getLocalizedMessage ()
                        + ": " + getSourceDirectory ()
                        + File.separator + realName);
      }
    }

  public void checkPoint (String name)
    {
      last_check = name;
      count = 0;
    }

  public void verbose (String message)
    {
      if (verbose)
      System.out.println (message);
    }

  public void debug (String message)
    {
      debug(message, true);
    }

  public void debug (String message, boolean newline)
    {
      if (debug)
        {
          if (newline)
          System.out.println (message);
          else
          System.out.print (message);
        }
    }

  public void debug (Throwable ex)
    {
      if (debug)
      ex.printStackTrace(System.out);
    }

  public void debug(Object[] o, String desc)
  {
    debug("Dumping Object Array: " + desc);
    if (o == null)
      {
        debug("null");
        return;
      }

    for (int i = 0; i < o.length; i++)
      if (o[i] instanceof Object[])
        debug((Object[])o[i], desc + " element " + i);
      else
        debug("  Element " + i + ": " + o[i]);
  }

  protected void runtest (String name)
    {
      // Try to ensure we start off with a reasonably clean slate.
      System.gc();
      System.runFinalization();

      checkPoint (null);

      Testlet t = null;
      try
      {
        Class k = Class.forName (name);

          Object o = k.newInstance();
          if (!(o instanceof Testlet))
            return;

        t = (Testlet)o;
      }
      catch (Throwable ex)
      {
        String d = "FAIL: uncaught exception loading " + name;
        if (verbose)
          d += ": " + ex.toString();
        System.out.println (d);
        debug (ex);
        ++failures;
        ++total;
      }

      if (t != null)
      {
        description = name;
        try
          {
            t.test (this);
          }
        catch (Throwable ex)
          {
            String d = ("FAIL: " + description
                    + ": uncaught exception at "
                    + ((last_check == null) ? "" :
                       ("\"" + last_check + "\""))
                    +" number "
                    + (count + 1));
            if (verbose)
            d += ": " + ex.toString();
            System.out.println (d);
            debug (ex);
            ++failures;
            ++total;
          }
      }
    }

  protected int done ()
    {
      if (!results_only)
      {
          System.out.println(failures + " of " + total + " tests failed");
          if (xpasses > 0)
            System.out.println(xpasses + " of " + total
                      + " tests unexpectedly passed");
          if (xfailures > 0)
            System.out.println(xfailures + " of " + total
                      + " tests expectedly failed");
      }
      return failures > 0 ? 1 : 0;

    }

  protected SimpleTestHarness (boolean verbose, boolean debug)
    {
      this(verbose, debug, false);
    }

  protected SimpleTestHarness (boolean verbose, boolean debug,
                           boolean results_only)
    {
      this.verbose = verbose;
      this.debug = debug;
      this.results_only= results_only;

      try
        {
          BufferedReader xfile = new BufferedReader (new FileReader ("xfails"));
        String str;
          while ((str = xfile.readLine ()) != null)
            expected_xfails.addElement (str);
        }
      catch (FileNotFoundException ex)
        {
          // Nothing.
        }
      catch (IOException ex)
        {
          // Nothing.
        }
    }

  public static void main (String[] args)
    {
      boolean verbose = false;
      boolean debug = false;
      boolean results_only = false;
      String file = null;
      int i;

      for (i = 0; i < args.length; i++)
      {
        if (args[i].equals("-verbose"))
          verbose = true;
        else if (args[i].equals("-debug"))
          debug = true;
        else if (args[i].equals("-resultsonly"))
          {
            results_only = true;
            verbose = false;
            debug = false;
          }
          else if (args[i].equalsIgnoreCase("-file"))
            try
            {
              file = args[++i];
            }
            catch (Exception x)
            {
              throw new RuntimeException ("Missing file path after '-file'. Exit");
            }
        else
          break;
        }

      SimpleTestHarness harness
      = new SimpleTestHarness (verbose, debug, results_only);

      BufferedReader r = null;
      if (file != null)
        try
        {
          r = new BufferedReader (new FileReader (file));
        }
        catch (FileNotFoundException x)
        {
          throw new RuntimeException ("Unable to find \""+file+"\". Exit");
        }
      else
        r = new BufferedReader (new InputStreamReader (System.in));
      while (true)
      {
        String cname = null;
        try
          {
            cname = r.readLine ();
            if (cname == null)
            break;
            if (verbose)
            System.out.println (cname);
          }
        catch (IOException x)
          {
            // Nothing.
          }
        if (verbose)
          System.out.println ("----");
        harness.runtest (cname);
      }

      System.exit(harness.done());
    }
}

Generated by  Doxygen 1.6.0   Back to index