Package org.rascalmpl.interpreter

Source Code of org.rascalmpl.interpreter.TestEvaluator

/*******************************************************************************
* Copyright (c) 2009-2013 CWI
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:

*   * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI
*   * Paul Klint - Paul.Klint@cwi.nl - CWI
*   * Mark Hills - Mark.Hills@cwi.nl (CWI)
*   * Arnold Lankamp - Arnold.Lankamp@cwi.nl
*   * Wietse Venema - wietsevenema@gmail.com - CWI
*******************************************************************************/
package org.rascalmpl.interpreter;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;

import org.rascalmpl.interpreter.control_exceptions.Throw;
import org.rascalmpl.interpreter.env.ModuleEnvironment;
import org.rascalmpl.interpreter.result.AbstractFunction;
import org.rascalmpl.interpreter.staticErrors.StaticError;
import org.rascalmpl.library.cobra.Cobra;
import org.rascalmpl.library.cobra.QuickCheck;

public class TestEvaluator {

  private final Evaluator eval;
  private final ITestResultListener testResultListener;

  public TestEvaluator(Evaluator eval, ITestResultListener testResultListener){
    super();

    this.eval = eval;
    this.testResultListener = testResultListener;
  }

  public void test(String moduleName) {
    ModuleEnvironment topModule = eval.getHeap().getModule(moduleName);

    if (topModule != null) {
      runTests(topModule, topModule.getTests());
    }
  }

  public void test() {
    ModuleEnvironment topModule = (ModuleEnvironment) eval.getCurrentEnvt().getRoot();

    runTests(topModule, topModule.getTests());

    for (String i : topModule.getImports()) {
      ModuleEnvironment mod = topModule.getImport(i);
     
      if (mod != null) {
        runTests(mod, mod.getTests());
      }
    }
  }

  private void runTests(ModuleEnvironment env, List<AbstractFunction> tests) {
    testResultListener.start(tests.size());

//    try {
    for (int i = tests.size() - 1; i >= 0; i--) {
      AbstractFunction test = tests.get(i);
      if (test.hasTag("ignore") || test.hasTag("Ignore") || test.hasTag("ignoreInterpreter") || test.hasTag("IgnoreInterpreter")) {
        continue;
      }

      try{
        QuickCheck qc = QuickCheck.getInstance();
        StringWriter sw = new StringWriter();
        PrintWriter out = new PrintWriter(sw);
        int maxDepth = Cobra.readIntTag(test, Cobra.MAXDEPTH, 5);
        int tries = Cobra.readIntTag(test, Cobra.TRIES, 500);

        boolean result = qc.quickcheck(test, maxDepth, tries, false, out);
        if (!result) {
          out.flush();
          testResultListener.report(false, test.getName(), test.getAst().getLocation(), sw.getBuffer()
              .toString(), null);
        } else {
          testResultListener.report(true, test.getName(), test.getAst().getLocation(), sw.getBuffer()
              .toString(), null);
        }
      }
      catch(StaticError e) {
        testResultListener.report(false, test.getName(), test.getAst().getLocation(), e.getMessage(), e);
      }
      catch(Throw e){
        testResultListener.report(false, test.getName(), test.getAst().getLocation(), e.getMessage(), e);
      }
      catch(Throwable e){
        testResultListener.report(false, test.getName(), test.getAst().getLocation(), e.getMessage(), e);
      }
    }
    //    }
    //    finally {
    testResultListener.done();
    //    }
  }




}
TOP

Related Classes of org.rascalmpl.interpreter.TestEvaluator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.