All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fitnesse.fixtures.LoopingActionFixture Maven / Gradle / Ivy

The newest version!
// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.fixtures;

import java.lang.reflect.Method;
import java.util.Stack;

import fit.ActionFixture;
import fit.Parse;

public class LoopingActionFixture extends ActionFixture {

  Stack loopContexts = new Stack<>();
  Parse rows;

  boolean isSpecialName(String name) {
    return name.equals("do") || name.equals("while");
  }

  Method getAction(String name) throws SecurityException, NoSuchMethodException {
    String methodName = isSpecialName(name) ? ("action_" + name) : name;
    return getClass().getMethod(methodName, new Class[]{});
  }

  @Override
  public void doRows(Parse rows) {
    this.rows = rows;
    while (this.rows != null) {
      doRow(this.rows);
      this.rows = this.rows.more;
    }
  }

  @Override
  public void doCells(Parse cells) {
    this.cells = cells;
    try {
      Method action = getAction(cells.text());
      action.invoke(this);
    }
    catch (Exception e) {
      exception(cells, e);
    }
  }

  public void action_do() {
    loopContexts.push(rows);
  }

  public void action_while() throws Exception {
    String methodName = cells.more.text();
    Method action = getActor().getClass().getMethod(methodName);
    Boolean result = (Boolean) action.invoke(getActor());
    if (result.booleanValue()) {
      rows = loopContexts.peek();
    } else {
      loopContexts.pop();
    }
  }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy