544 lines
19 KiB
C#
544 lines
19 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using DotNetDBF;
|
|
using DotNetDBF.Enumerable;
|
|
using NUnit.Framework;
|
|
|
|
namespace DotNetDBFTest
|
|
{
|
|
public interface ITestInterface
|
|
{
|
|
string F1 { get; set; }
|
|
|
|
string F2 { get; set; }
|
|
|
|
string F3 { get; set; }
|
|
}
|
|
|
|
[TestFixture]
|
|
public class DotNetDBFTest : AssertionHelper
|
|
{
|
|
private string TestPath([CallerMemberName] string name = null)
|
|
=> Path.Combine(Path.GetTempPath(), name + "_121212.dbf");
|
|
|
|
private string TestRAFPath([CallerMemberName] string name = null)
|
|
=> Path.Combine(Path.GetTempPath(), name + "_raf-1212.dbf");
|
|
|
|
|
|
private string TestClipLongPath([CallerMemberName] string name = null)
|
|
=> Path.Combine(Path.GetTempPath(), name + "_cliplong.dbf");
|
|
|
|
private string TestMemoPath([CallerMemberName] string name = null)
|
|
=> Path.Combine(Path.GetTempPath(), name + "_clipmemo.dbf");
|
|
|
|
private string TestSelectPath([CallerMemberName] string name = null)
|
|
=> Path.Combine(Path.GetTempPath(), name + "_select.dbf");
|
|
|
|
private string GetCharacters(int aLength)
|
|
{
|
|
var chars = new[] {"a", "b", "c", "d", "e", "f", "g", " "};
|
|
var returnval = string.Join(string.Empty,
|
|
Enumerable.Range(0, aLength).Select(it => chars[it % chars.Length]).ToArray());
|
|
Assert.That(returnval.Length, EqualTo(aLength), "GetCharacters() did not return correct length string");
|
|
return returnval;
|
|
}
|
|
|
|
|
|
private static void println(String s)
|
|
{
|
|
Console.WriteLine(s);
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void checkDataType_N()
|
|
{
|
|
Decimal writtenValue;
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
using (var writer = new DBFWriter())
|
|
{
|
|
var field = new DBFField("F1", NativeDbType.Numeric, 15, 0);
|
|
writer.Fields = new[] {field};
|
|
|
|
writtenValue = 123456789012345L;
|
|
writer.AddRecord(writtenValue);
|
|
writer.Write(fos);
|
|
}
|
|
using (
|
|
Stream fis =
|
|
File.Open(TestPath(),
|
|
FileMode.Open,
|
|
FileAccess.Read))
|
|
using (var reader = new DBFReader(fis))
|
|
{
|
|
var readValues = reader.NextRecord();
|
|
|
|
Assert.That(readValues[0], EqualTo(writtenValue), "Written Value Equals Read");
|
|
}
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void checkLongCharLengthWithClipper()
|
|
{
|
|
var fieldLength = 750;
|
|
string writtenValue;
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestClipLongPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
var writer = new DBFWriter();
|
|
var field = new DBFField("F1", NativeDbType.Char, fieldLength);
|
|
writer.Fields = new[] {field};
|
|
|
|
writtenValue = GetCharacters(fieldLength);
|
|
writer.AddRecord(writtenValue);
|
|
writer.Write(fos);
|
|
}
|
|
using (
|
|
Stream fis =
|
|
File.Open(TestClipLongPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
var reader = new DBFReader(fis);
|
|
Assert.That(reader.Fields.First().FieldLength, EqualTo(fieldLength));
|
|
var readValues = reader.NextRecord();
|
|
|
|
Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read");
|
|
}
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void checkDataType_M()
|
|
{
|
|
var fieldLength = 2400;
|
|
MemoValue writtenValue;
|
|
using (Stream fos = File.Open(TestMemoPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite))
|
|
using (var writer = new DBFWriter
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestMemoPath(), "DBT")
|
|
})
|
|
{
|
|
var field = new DBFField("F1", NativeDbType.Memo);
|
|
writer.Fields = new[] {field};
|
|
|
|
writtenValue = new MemoValue(GetCharacters(fieldLength));
|
|
writer.AddRecord(writtenValue);
|
|
writer.Write(fos);
|
|
}
|
|
using (Stream fis = File.Open(TestMemoPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite))
|
|
using (var reader = new DBFReader(fis)
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestMemoPath(), "DBT")
|
|
})
|
|
{
|
|
var readValues = reader.NextRecord();
|
|
|
|
Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void checkSelect()
|
|
{
|
|
var fieldLength = 2400;
|
|
string writtenValue;
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
var writer = new DBFWriter
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
};
|
|
var field = new DBFField("F1", NativeDbType.Memo);
|
|
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
|
|
var field3 = new DBFField("F3", NativeDbType.Char, 10);
|
|
writer.Fields = new[] {field, field2, field3};
|
|
|
|
writtenValue = "alpha";
|
|
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
|
|
writer.Write(fos);
|
|
}
|
|
using (
|
|
Stream fis =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
var reader = new DBFReader(fis)
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
};
|
|
reader.SetSelectFields("F3");
|
|
var readValues = reader.NextRecord();
|
|
|
|
Assert.That(readValues[0], StartsWith(writtenValue), "Written Value not equaling Read");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void checkSelectDynamic()
|
|
{
|
|
var fieldLength = 2400;
|
|
string writtenValue;
|
|
string writtenMemo;
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
using (var writer = new DBFWriter
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
var field = new DBFField("F1", NativeDbType.Memo);
|
|
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
|
|
var field3 = new DBFField("F3", NativeDbType.Char, 10);
|
|
writer.Fields = new[] {field, field2, field3};
|
|
|
|
writtenValue = "alpha";
|
|
writtenMemo = GetCharacters(fieldLength);
|
|
writer.AddRecord(new MemoValue(writtenMemo), 10, writtenValue);
|
|
writer.Write(fos);
|
|
}
|
|
using (
|
|
Stream fis =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
using (var reader = new DBFReader(fis)
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
reader.SetSelectFields("F1", "F3");
|
|
var readValues = reader.DynamicAllRecords().First();
|
|
|
|
Assert.That(readValues.F1.ToString(), EqualTo(writtenMemo), "Written Value not equaling Read");
|
|
Assert.That(readValues.F3, EqualTo(writtenValue), "Written Value not equaling Read");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void checkAnnoymous()
|
|
{
|
|
var fieldLength = 2400;
|
|
string writtenValue;
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
var writer = new DBFWriter
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
};
|
|
var field = new DBFField("F1", NativeDbType.Memo);
|
|
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
|
|
var field3 = new DBFField("F3", NativeDbType.Char, 10);
|
|
writer.Fields = new[] {field, field2, field3};
|
|
|
|
writtenValue = "alpha";
|
|
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
|
|
writer.Write(fos);
|
|
}
|
|
using (
|
|
Stream fis =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
var reader = new DBFReader(fis)
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
};
|
|
|
|
var readValues = reader.AllRecords(new {F2 = default(decimal), F3 = default(string)});
|
|
|
|
Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read");
|
|
}
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void checkProxy()
|
|
{
|
|
var fieldLength = 2400;
|
|
string writtenValue;
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
using (var writer = new DBFWriter {
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
|
|
;
|
|
var field = new DBFField("F1", NativeDbType.Memo);
|
|
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
|
|
var field3 = new DBFField("F3", NativeDbType.Char, 10);
|
|
writer.Fields = new[] {field, field2, field3};
|
|
|
|
writtenValue = "alpha";
|
|
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
|
|
writer.Write(fos);
|
|
}
|
|
}
|
|
using (
|
|
Stream fis =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
using (var reader = new DBFReader(fis)
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
|
|
var readValues = reader.AllRecords<ITestInterface>();
|
|
|
|
Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read");
|
|
}
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void checkDynamicProxy()
|
|
{
|
|
var fieldLength = 2400;
|
|
string writtenValue;
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
using (var writer = new DBFWriter
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
var field = new DBFField("F1", NativeDbType.Memo);
|
|
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
|
|
var field3 = new DBFField("F3", NativeDbType.Char, 10);
|
|
writer.Fields = new[] {field, field2, field3};
|
|
|
|
writtenValue = "alpha";
|
|
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
|
|
writer.Write(fos);
|
|
}
|
|
using (
|
|
Stream fis =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
using (var reader = new DBFReader(fis)
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
var readValues = reader.DynamicAllRecords();
|
|
|
|
Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read");
|
|
}
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void checkDynamicProxyWhere()
|
|
{
|
|
var fieldLength = 2400;
|
|
string writtenValue;
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestSelectPath(),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
using (var writer = new DBFWriter
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
var field = new DBFField("F1", NativeDbType.Memo);
|
|
var field2 = new DBFField("F2", NativeDbType.Numeric, 10);
|
|
var field3 = new DBFField("F3", NativeDbType.Char, 10);
|
|
writer.Fields = new[] {field, field2, field3};
|
|
|
|
writtenValue = "alpha";
|
|
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue);
|
|
|
|
writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 12, "beta");
|
|
|
|
writer.Write(fos);
|
|
}
|
|
|
|
using (var reader = new DBFReader(TestSelectPath())
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
var readValues = reader.DynamicAllRecords();
|
|
|
|
Assert.That(Equals(readValues.Count(), 2), "All Records not matching");
|
|
}
|
|
|
|
using (var reader = new DBFReader(TestSelectPath())
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 10);
|
|
|
|
Assert.That(Equals(readValues.Count(), 1), "All Records not matching");
|
|
}
|
|
|
|
using (var reader = new DBFReader(TestSelectPath())
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 12);
|
|
|
|
Assert.That(Equals(readValues.Count(), 1), "All Records not matching");
|
|
}
|
|
using (var reader = new DBFReader(TestSelectPath())
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
|
})
|
|
{
|
|
var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 13);
|
|
|
|
Assert.That(Equals(readValues.Count(), 0), "All Records not matching");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void checkRAFwriting()
|
|
{
|
|
println("Writing in RAF mode ... ");
|
|
|
|
if (File.Exists(TestRAFPath()))
|
|
{
|
|
File.Delete(TestRAFPath());
|
|
}
|
|
using (var writer = new DBFWriter(TestRAFPath()))
|
|
{
|
|
var fields = new DBFField[2];
|
|
|
|
fields[0] = new DBFField("F1", NativeDbType.Char, 10);
|
|
|
|
fields[1] = new DBFField("F2", NativeDbType.Numeric, 2);
|
|
|
|
writer.Fields = fields;
|
|
|
|
|
|
writer.WriteRecord("Red", 10);
|
|
writer.WriteRecord("Blue", 20);
|
|
}
|
|
|
|
println("done.");
|
|
|
|
println("Appending to this file");
|
|
|
|
using (var writer = new DBFWriter(TestRAFPath()))
|
|
{
|
|
writer.WriteRecord("Green", 33);
|
|
|
|
writer.WriteRecord("Yellow", 44);
|
|
}
|
|
println("done.");
|
|
}
|
|
|
|
[Test]
|
|
public void ShowPaths()
|
|
{
|
|
println(TestPath());
|
|
|
|
println(TestRAFPath());
|
|
|
|
println(TestClipLongPath());
|
|
}
|
|
|
|
[Test]
|
|
public void Test()
|
|
{
|
|
using (
|
|
Stream fis =
|
|
File.Open(@"f:\st\dev\testdata\p.dbf",
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
using (var reader = new DBFReader(fis)
|
|
{
|
|
DataMemoLoc = Path.ChangeExtension(@"f:\st\dev\testdata\p.dbf", "DBT")
|
|
})
|
|
{
|
|
var readValues = reader.NextRecord();
|
|
|
|
Console.WriteLine(readValues);
|
|
}
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void test1()
|
|
{
|
|
Assert.DoesNotThrow(() => { new DBFWriter(); }, "Can't Create empty DBFWriter Object");
|
|
}
|
|
|
|
[Test]
|
|
public void test2()
|
|
{
|
|
Assert.DoesNotThrow(() => { new DBFField(); }, "Can't Create empty DBFWriter Object");
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void test3()
|
|
{
|
|
WriteSample();
|
|
ReadSample();
|
|
}
|
|
|
|
public void WriteSample([CallerMemberName] string name = null)
|
|
{
|
|
var field = new DBFField {Name = "F1", DataType = NativeDbType.Numeric};
|
|
var writer = new DBFWriter {Fields = new[] {field}};
|
|
writer.AddRecord(3);
|
|
using (
|
|
Stream fos =
|
|
File.Open(TestPath(name),
|
|
FileMode.OpenOrCreate,
|
|
FileAccess.ReadWrite))
|
|
{
|
|
writer.Write(fos);
|
|
}
|
|
}
|
|
|
|
|
|
public void ReadSample([CallerMemberName] string name = null)
|
|
{
|
|
using (var reader = new DBFReader(TestPath(name)))
|
|
{
|
|
Assert.That(reader.RecordCount, EqualTo(1));
|
|
}
|
|
}
|
|
}
|
|
} |