blob: c78c4564a710f4ff5e106a05cf74a4343c0bb95a [file] [log] [blame]
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();
}
}
}