package org.test4j.spec.scenario.step.xml; import java.util.Map; /** * 用例场景方法描述+具体参数构造器 * * @author darui.wudr 2012-6-29 下午4:32:51 */ public class MethodDescription { private char[] chars; private int length; private Map<String, String> paras; public MethodDescription(String template, Map<String, String> paras) { this.chars = template.toCharArray(); this.length = this.chars.length; this.paras = paras; } public String getMethodDisplayText() { StringBuilder buff = new StringBuilder(); for (int index = 0; index < length; index++) { char ch = chars[index]; switch (ch) { case '$': String var = this.getVariable(index); if (var == null) { buff.append(ch); } else { buff.append("\n").append(var).append("=").append(this.paras.get(var)); index = index + var.length() + VAR_START.length(); } break; default: buff.append(ch); } } return buff.toString(); } String getVariable(int start) { if (start + VAR_START.length() + 1 >= length) { return null; } boolean isStart = this.isVarStart(start); if (isStart == false) { return null; } StringBuilder variable = new StringBuilder(); for (int index = start + VAR_START.length(); index < length; index++) { char ch = chars[index]; switch (ch) { case '}':// 碰到},是个合法变量 return variable.toString(); case '{':// 不是一个合法的变量 return null; default: variable.append(ch); } } return null; } /** * 是否是变量开始提示符 * * @param start * @return */ private boolean isVarStart(int start) { for (int index = 0; index < VAR_START.length(); index++) { if (chars[start + index] != VAR_START.charAt(index)) { return false; } } return true; } /** * 变量开始提示符 */ public final static String VAR_START = "$_#_@_&{"; }