import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import ch.ubique.inieditor.IniEditor;
public class BaseINIData implements IData {
private String defaultPath = "data/";
private String split = ",";
private String blocksplit = "#";
public Object[][] getData(String caseName, String dataFile) {
return getData(caseName, dataFile,0) ;
}
public Object[][] getData(String caseName, String dataFile,int colNum) {
IniEditor configEditor = new IniEditor();
List<String[]> lines = new ArrayList<String[]>();
Object[][] datas = null;
try {
configEditor.load(defaultPath + dataFile);
List<?> columns = configEditor.optionNames(caseName);
for(Object col : columns) {
String line = configEditor.get(caseName, col.toString());
lines.add(line.split(split));
}
int max = getMaxLength(lines);
if(colNum<=0||colNum>=max){
datas = new Object[max][columns.size()];
for(int i=0; i<max; i++) {
List<Object> o = new ArrayList<Object>();
for(String[] s : lines) {
if(s.length > i && !s[i].isEmpty()) {
if(isArrayParam(s[i])){
o.add(getArrayParam(s[i]));
}
else if(isSetParam(s[i])){
o.add(getSetParam(s[i]));
}
else{
o.add(s[i]);
}
}
else {
o.add("");
}
}
datas[i] = o.toArray();
}
}else{
max=colNum;
datas = new Object[max][columns.size()];
for(int i=0; i<max; i++) {
List<Object> o = new ArrayList<Object>();
for(String[] s : lines) {
if(s.length > i && !s[i].isEmpty()) {
if(isArrayParam(s[i])){
o.add(getArrayParam(s[i]));
}
else if(isSetParam(s[i])){
o.add(getSetParam(s[i]));
}
else{
o.add(s[i]);
}
}
else {
o.add("");
}
}
datas[i] = o.toArray();
}
}
return datas;
}
catch(Exception loadConfigException) {
loadConfigException.printStackTrace();
return null;
}
}
/**
* 读取整块数据从数据文件中
* @param dataFile 数据文件
* @param caseName 测试用例名称
* @param isclean 是否需要清理空格和回车
* @return Object[][] 返回的object[][]对象
*/
public Object[][] readBlockFromDataFile(String dataFile, String caseName, boolean isclean) {
StringBuilder data = new StringBuilder();
Object result[][] = new Object[1][1];
try {
BufferedReader br = new BufferedReader(new FileReader(defaultPath+dataFile));
String s;
while((s=br.readLine())!=null){
if(isReachCaseName(cleanEnter(s),caseName)){
while((s=br.readLine())!=null){
if(isReachEnd(cleanEnter(s))){
br.close();
result[0][0] = data.toString();
return result;
}
if(isclean){
data.append(cleanEnter(s));
}
else {
data.append(s+"\n");
}
}
}
}
result[0][0] = data.toString();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private boolean isReachCaseName(String line, String caseName) {
if(line.startsWith(blocksplit)){
if(line.equalsIgnoreCase(blocksplit + caseName)){
return true;
}
return false;
}
return false;
}
private boolean isReachEnd(String line) {
if(line.startsWith(blocksplit)){
return true;
}
return false;
}
private String cleanEnter(String line)
{
return line.trim().replaceAll("\n", "");
}
private int getMaxLength(List<String[]> lines) {
int max = 0;
for(String[] s : lines) {
if(max< s.length) max = s.length;
}
return max;
}
private Object[] getArrayParam(String s) {
s = s.replace("{", "");
s = s.replace("}", "");
return s.split(";");
}
private Object getSetParam(String s) {
s = s.replace("[", "");
s = s.replace("]", "");
String[] ss = s.split(";");
List<String> ls = new ArrayList<String>();
for(String sss:ss) {
ls.add(sss);
}
return ls;
}
private boolean isArrayParam(String s) {
if(s.startsWith("{") && s.endsWith("}")) return true;
return false;
}
private boolean isSetParam(String s) {
if(s.startsWith("[") && s.endsWith("]")) return true;
return false;
}
public void setFilePath(String p) {
defaultPath = p;
}
public String getFilePath() {
return defaultPath;
}
public void setSplit(String s) {
split = s;
}
public String getSplit() {
return split;
}
public void setBlockSplit(String bs) {
blocksplit = bs;
}
public String getBlockSplit() {
return blocksplit;
}
}
public static Object[][] FarmData(){
Object[][] data= new BaseINIData().getData("Test","orderData");
return data;
}
[Test]
url=
phone=