Package fit

Source Code of fit.FitMatcher

// Modified or written by Object Mentor, Inc. for inclusion with FitNesse.
// Copyright (c) 2002 Cunningham & Cunningham, Inc.
// Released under the terms of the GNU General Public License version 2 or later.
package fit;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import fit.exception.FitMatcherException;

class FitMatcher {
  private String expression;
  private Object parameter;

  public FitMatcher(String expression, Object parameter) {
    this.expression = expression;
    this.parameter = parameter;
  }

  public boolean matches() throws Exception {
    Pattern p = Pattern.compile("\\s*_?\\s*(<|>|<=|>=)\\s*([-+]?[\\d]*\\.?[\\d]+)");
    Matcher m = p.matcher(expression);
    if (m.matches()) {
      String op = m.group(1);
      String operandString = m.group(2);
      double operand = Double.parseDouble(operandString);
      double n = ((Number) parameter).doubleValue();
      if (op.equals("<")) return (n < operand);
      if (op.equals(">")) return (n > operand);
      if (op.equals("<=")) return (n <= operand);
      if (op.equals(">=")) return (n >= operand);
      return false;
    }

    p = Pattern.compile("\\s*([-+]?[\\d]*\\.?[\\d]+)\\s*(<|>|<=|>=)\\s*_\\s*(<|>|<=|>=)\\s*([-+]?[\\d]*\\.?[\\d]+)");
    m = p.matcher(expression);
    if (m.matches()) {
      double a = Double.parseDouble(m.group(1));
      String aop = m.group(2);
      String bop = m.group(3);
      double b = Double.parseDouble(m.group(4));
      double n = ((Number) parameter).doubleValue();

      boolean an = false;
      if (aop.equals("<")) an = a < n;
      if (aop.equals("<=")) an = a <= n;
      if (aop.equals(">")) an = a > n;
      if (aop.equals(">=")) an = a >= n;

      boolean nb = false;
      if (bop.equals("<")) nb = n < b;
      if (bop.equals("<=")) nb = n <= b;
      if (bop.equals(">")) nb = n > b;
      if (bop.equals(">=")) nb = n >= b;

      return an && nb;
    }
    throw new FitMatcherException("Invalid FitMatcher Expression");
  }

  public String message() {
    String message = null;
    String parmString = "<b>" + parameter.toString() + "</b>";
    if (!expression.contains("_"))
      message = parmString + expression;
    else
      message = expression.replaceFirst("_", parmString);
    return message;
  }
}
TOP

Related Classes of fit.FitMatcher

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.