using System;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Text;
using Clifton.Tools.Xml;
using Vts.UnitTest;
namespace Clifton.Tools.Xml.UnitTests
{
[TestFixture]
[ProcessTest]
public class UnitTests
{
XmlDatabase config;
[Test, Sequence(1)]
public void Setup()
{
config=new XmlDatabase("Test");
}
[Test, Sequence(2)]
public void InsertRecord()
{
config.Insert("TestChildNode");
}
[Test, Sequence(3)]
public void InsertRecordWithValue()
{
config.Insert("TestChildNode2", "MyAttribute", "MyValue");
string ret=config.QueryScalar("TestChildNode2", "MyAttribute");
Assertion.Assert(ret=="MyValue", "Unexpected attribute value not set.");
}
[Test, Sequence(4)]
public void InsertRecordWithMultipleValues()
{
XmlDatabase.FieldValuePair[] fields=new XmlDatabase.FieldValuePair[]
{
new XmlDatabase.FieldValuePair("PK", "1"),
new XmlDatabase.FieldValuePair("Data", "Marc")
};
config.Insert("TestChildNode3", fields);
}
[Test, Sequence(5)]
public void UpdateField()
{
config.Update("TestChildNode2", "MyAttribute", "MyNewValue");
string ret=config.QueryScalar("TestChildNode2", "MyAttribute");
Assertion.Assert(ret=="MyNewValue", "Unexpected attribute value.");
}
[Test, Sequence(6)]
public void DeleteField()
{
config.DeleteField("TestChildNode2", "MyAttribute");
}
[Test, Sequence(7)]
public void InsertMultipleUniqueRecords()
{
XmlDatabase.FieldValuePair[] fields=new XmlDatabase.FieldValuePair[]
{
new XmlDatabase.FieldValuePair("PK", "1"),
new XmlDatabase.FieldValuePair("Data", "Marc")
};
config.Insert("Child/Grandchild", fields);
fields[0].Value="2";
fields[1].Value="Ian";
config.Insert("Child/Grandchild", fields);
fields[0].Value="3";
fields[1].Value="Karen";
config.Insert("Child/Grandchild", fields);
}
[Test, Sequence(8)]
public void QueryUniqueRecords()
{
string data;
data=config.QueryScalar("Child/Grandchild", "Data", "@PK='1'");
Assertion.Assert(data=="Marc", "Unexpected attribute value");
data=config.QueryScalar("Child/Grandchild", "Data", "@PK='2'");
Assertion.Assert(data=="Ian", "Unexpected attribute value");
data=config.QueryScalar("Child/Grandchild", "Data", "@PK='3'");
Assertion.Assert(data=="Karen", "Unexpected attribute value");
}
[Test, Sequence(9)]
public void DeleteUniqueRecord()
{
config.Delete("Child/Grandchild", "@PK='2'");
}
[Test, Sequence(10)]
public void VerifyMissingRecordNullReturn()
{
string data=config.QueryScalar("Child/Grandchild", "Data", "@PK='2'");
Assertion.Assert(data==null, "Null expected");
}
[Test, Sequence(11)]
public void UpdateMultipleRows()
{
config.Update("Child/Grandchild", "Data", "Bob");
string data;
data=config.QueryScalar("Child/Grandchild", "Data", "@PK='1'");
Assertion.Assert(data=="Bob", "Unexpected attribute value");
data=config.QueryScalar("Child/Grandchild", "Data", "@PK='3'");
Assertion.Assert(data=="Bob", "Unexpected attribute value");
}
[Test, Sequence(12)]
public void DeleteMultipleRows()
{
// Insert a new record to verify only selected records are being deleted.
XmlDatabase.FieldValuePair[] fields=new XmlDatabase.FieldValuePair[]
{
new XmlDatabase.FieldValuePair("PK", "2"),
new XmlDatabase.FieldValuePair("Data", "Anders")
};
config.Insert("Child/Grandchild", fields);
config.Delete("Child/Grandchild", "@Data='Bob'");
string data;
data=config.QueryScalar("Child/Grandchild", "Data", "@PK='1'");
Assertion.Assert(data==null, "Null expected");
data=config.QueryScalar("Child/Grandchild", "Data", "@PK='3'");
Assertion.Assert(data==null, "Null expected");
data=config.QueryScalar("Child/Grandchild", "Data", "@PK='2'");
Assertion.Assert(data=="Anders", "Unexpected attribute value");
}
[Test, Sequence(13)]
public void MultiRowMultiFieldUpdate()
{
XmlDatabase.FieldValuePair[] fields;
fields=new XmlDatabase.FieldValuePair[]
{
new XmlDatabase.FieldValuePair("PK", "1"),
new XmlDatabase.FieldValuePair("Name", "Marc"),
new XmlDatabase.FieldValuePair("PendingMail", "true"),
new XmlDatabase.FieldValuePair("LastSendTime", ""),
};
config.Insert("Email", fields);
fields=new XmlDatabase.FieldValuePair[]
{
new XmlDatabase.FieldValuePair("PK", "2"),
new XmlDatabase.FieldValuePair("Name", "Karen"),
new XmlDatabase.FieldValuePair("PendingMail", "true"),
new XmlDatabase.FieldValuePair("LastSendTime", ""),
};
config.Insert("Email", fields);
fields=new XmlDatabase.FieldValuePair[]
{
new XmlDatabase.FieldValuePair("PK", "3"),
new XmlDatabase.FieldValuePair("Name", "Ian"),
new XmlDatabase.FieldValuePair("PendingMail", "true"),
new XmlDatabase.FieldValuePair("LastSendTime", ""),
};
config.Insert("Email", fields);
string now=DateTime.Now.ToString();
fields=new XmlDatabase.FieldValuePair[]
{
new XmlDatabase.FieldValuePair("PendingMail", "false"),
new XmlDatabase.FieldValuePair("LastSendTime", now),
};
config.Update("Email", "@PendingMail='true'", fields);
}
[Test, Sequence(14)]
public void MultirowQuery()
{
DataTable dt=config.Query("Email", "@PendingMail='false'");
Assertion.Assert(dt.Rows.Count==3, "Didn't return expected number of rows");
}
[Test, Sequence(15)]
public void MultiRowQueryOfSingleField()
{
string[] data=config.QueryField("Email", "@PendingMail='false'", "PendingMail");
Assertion.Assert(data.Length==3, "Didn't return expected number of rows");
}
[Test, Sequence(16)]
public void MultiRowQueryOfMultipleFields()
{
DataTable dt=config.Query("Email", "@PendingMail='false'", new string[] {"PendingMail", "LastSendTime"});
Assertion.Assert(dt.Rows.Count==3, "Didn't return expected number of rows");
Assertion.Assert(dt.Columns.Count==2, "Didn't return expected number of columns");
}
[Test, Sequence(17)]
public void Save()
{
StringBuilder sb=new StringBuilder();
StringWriter sw=new StringWriter(sb);
config.SaveAs(sw);
Trace.WriteLine(sb.ToString());
}
[Test, Sequence(18)]
public void TestDataSet()
{
DataSet ds=new DataSet();
DataTable dt1=new DataTable("Table1");
DataTable dt2=new DataTable("Table2");
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
dt1.Columns.Add(new DataColumn("C1"));
dt1.Columns.Add(new DataColumn("C2"));
dt1.Columns.Add(new DataColumn("C3"));
dt2.Columns.Add(new DataColumn("C4"));
dt2.Columns.Add(new DataColumn("C5"));
dt2.Columns.Add(new DataColumn("C6"));
DataRow dr=dt1.NewRow();
dr["C1"]="1";
dr["C2"]="2";
dr["C3"]="3";
dt1.Rows.Add(dr);
dr=dt1.NewRow();
dr["C1"]="A";
dr["C2"]="B";
dr["C3"]="C";
dt1.Rows.Add(dr);
dr=dt2.NewRow();
dr["C4"]="4";
dr["C5"]="5";
dr["C6"]="6";
dt2.Rows.Add(dr);
ds.WriteXml("dataset.xml");
}
}
}