using System.IO; | |
namespace Export2TTCN | |
{ | |
public class FileExport | |
{ | |
private string[] fileBuffer; | |
private int rowNumber; | |
private string filename; | |
private const int indent = 2; | |
private int act_indent = 0; | |
public void ind_p() | |
{ | |
act_indent += indent; | |
} | |
public void ind_n() | |
{ | |
if (act_indent == 0) return; | |
act_indent -= indent; | |
} | |
private string getindented(string row) | |
{ | |
for (int i = 0; i < act_indent; i++) | |
{ | |
row = row.Insert(0, " "); | |
} | |
return row; | |
} | |
public FileExport(string filename) | |
{ | |
this.filename = filename; | |
fileBuffer = new string[128]; | |
rowNumber = 0; | |
File.Delete(filename); | |
} | |
public void write(string row) | |
{ | |
fileBuffer[rowNumber++] = getindented(row); | |
if (rowNumber == 128) | |
{ | |
dump(); | |
} | |
} | |
public void dump() | |
{ | |
FileStream writer; | |
writer = new FileStream(filename, FileMode.OpenOrCreate); | |
writer.Seek(0, SeekOrigin.End); | |
for (int i = 0; i < rowNumber; i++) | |
{ | |
writer.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(fileBuffer[i]), 0, fileBuffer[i].Length); | |
writer.WriteByte(10); | |
} | |
writer.Close(); | |
rowNumber = 0; | |
} | |
public void write_tc(string row) //write testcase rows | |
{ | |
fileBuffer[rowNumber++] = getindented(row); | |
if (rowNumber == 128) | |
{ | |
dump_tc(); | |
} | |
} | |
public void dump_tc() //dump testcase rows | |
{ | |
FileStream writer; | |
writer = new FileStream(filename, FileMode.OpenOrCreate); | |
writer.Seek(-3, SeekOrigin.End); | |
for (int i = 0; i < rowNumber; i++) | |
{ | |
writer.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(fileBuffer[i]), 0, fileBuffer[i].Length); | |
writer.WriteByte(10); | |
} | |
writer.Close(); | |
rowNumber = 0; | |
} | |
} | |
public abstract class TTCNExporter | |
{ | |
private FileExport file; | |
private bool started = true; | |
private int nof_testcases = 0; | |
private string modulename; | |
private string filename; | |
public bool is_started() { return !started; } | |
protected TTCNExporter(string p_modulename, string p_path) | |
{ | |
modulename = p_modulename; | |
filename = p_path + p_modulename + ".ttcn"; | |
} | |
protected abstract void write_imports(); | |
protected abstract void write_types(); | |
protected abstract void write_altsteps(); | |
protected abstract void write_else(); | |
protected abstract void beginning_tc(); | |
protected abstract void ending_tc(); | |
private void start_testcase() | |
{ | |
nof_testcases++; | |
file.ind_p(); | |
file.write_tc("\n"); | |
file.write_tc("testcase Testcase_" + nof_testcases + "() runs on SpecExpl_CT"); | |
file.write_tc("{"); | |
file.ind_p(); | |
beginning_tc(); | |
file.write_tc("log(\"START TESTCASE: Testcase_" + nof_testcases + "\");"); | |
} | |
public void start() | |
{ | |
if (started) | |
{ | |
file = new FileExport(filename); | |
started = file == null; | |
file.write("module " + modulename); | |
file.write("{"); | |
file.ind_p(); | |
write_imports(); | |
write_types(); | |
write_altsteps(); | |
write_else(); | |
file.ind_n(); | |
file.write("}"); | |
file.dump(); | |
} | |
start_testcase(); | |
} | |
public void end() | |
{ | |
file.write_tc("log(\"THE END\");"); | |
ending_tc(); | |
file.ind_n(); | |
file.write_tc("}"); | |
file.ind_n(); | |
file.write_tc("}"); | |
file.dump_tc(); | |
} | |
protected void write(string row) | |
{ | |
file.write(row); | |
} | |
public void write_tc(string row) | |
{ | |
file.write_tc(row); | |
} | |
public void ind_p() | |
{ | |
file.ind_p(); | |
} | |
public void ind_n() | |
{ | |
file.ind_n(); | |
} | |
} | |
} |