package org.ninjadev.multivim.unittests.golftests;
import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.ninjadev.multivim.Buffer;
import org.ninjadev.multivim.Cursor;
import org.ninjadev.multivim.User;
import com.googlecode.lanterna.input.*;
@RunWith(Parameterized.class)
public class GolfTests {
public final static String PATH = "src/org/ninjadev/multivim/unittests/golftests/data/";
@Parameters()
public static Iterable<Object[]> data(){
File folder = new File(PATH);
File[] listOfFiles = folder.listFiles();
HashSet<String> ids = new HashSet<String>();
for(File file : listOfFiles){
ids.add(file.getName().substring(0,file.getName().lastIndexOf('.')));
}
Object[][] args = new Object[ids.size()][];
Object[] idsArray = ids.toArray();
for(int i=0;i<ids.size();i++){
args[i] = new Object[]{idsArray[i]};
}
return Arrays.asList(args);
}
private String testId;
public GolfTests(String testId){
this.testId = testId;
}
@Test
public void test() throws FileNotFoundException, IOException{
File input = new File(PATH + testId + ".input");
ArrayList<Key> inputCommands = new ArrayList<Key>();
for(Character c : new BufferedReader(new FileReader(input)).readLine().toCharArray()){
inputCommands.add(new Key(c));
}
User user = new User();
Buffer startBuffer = new Buffer().readFile(PATH + testId + ".start");
Buffer endBuffer = new Buffer().readFile(PATH + testId + ".end");
Cursor cursor = new Cursor(startBuffer, user);
user.cursors.put(startBuffer.bufferId, cursor);
user.getActiveViewPort().setBuffer(startBuffer);
for(Key command : inputCommands){
user.processCommand(command);
}
assertEquals(startBuffer.toString(), endBuffer.toString());
}
}