mirror of https://github.com/dahall/Vanara.git
163 lines
6.7 KiB
C#
163 lines
6.7 KiB
C#
using NUnit.Framework;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Vanara.Configuration;
|
|
using static Vanara.PInvoke.Kernel32;
|
|
|
|
namespace Vanara.PInvoke.Tests
|
|
{
|
|
[TestFixture]
|
|
public partial class WinBaseTests_Profile
|
|
{
|
|
private const int cnt = 20;
|
|
|
|
[Test]
|
|
public void PrivateProfileTest()
|
|
{
|
|
const string sec = "Section";
|
|
|
|
using var tmp = new TempFile("");
|
|
Assert.That(WritePrivateProfileSection(sec, MakeSectionKeys(), tmp.FullName), ResultIs.Successful);
|
|
Assert.That(WritePrivateProfileString(sec, "Key21", "Value1", tmp.FullName), ResultIs.Successful);
|
|
Assert.That(WritePrivateProfileStruct(sec, "Key22", new RECT(1, 2, 3, 4), tmp.FullName), ResultIs.Successful);
|
|
Assert.That(WritePrivateProfileStruct(sec, "Key23", 4, tmp.FullName), ResultIs.Successful);
|
|
TestContext.WriteLine(System.IO.File.ReadAllText(tmp.FullName));
|
|
|
|
Assert.That(GetPrivateProfileInt(sec, "Key1", 0, tmp.FullName), Is.EqualTo(1));
|
|
Assert.That(GetPrivateProfileInt(sec, "Key23", 0, tmp.FullName), Is.Not.EqualTo(4));
|
|
Assert.That(GetPrivateProfileInt(sec, "Key24", 0, tmp.FullName), Is.EqualTo(0));
|
|
|
|
var secVals = GetPrivateProfileSection(sec, tmp.FullName);
|
|
Assert.That(secVals.Length, Is.EqualTo(cnt + 3));
|
|
TestContext.WriteLine(string.Join("; ", secVals));
|
|
|
|
var secNames = GetPrivateProfileSectionNames(tmp.FullName);
|
|
Assert.That(secNames.Length, Is.EqualTo(1));
|
|
TestContext.WriteLine(string.Join("; ", secNames));
|
|
|
|
var sb = new StringBuilder(256);
|
|
Assert.That(GetPrivateProfileString(sec, "Key1", null, sb, (uint)sb.Capacity, tmp.FullName), Is.GreaterThan(0).And.Not.EqualTo(sb.Capacity - 2));
|
|
Assert.That(sb.ToString(), Is.EqualTo("1"));
|
|
sb.Clear();
|
|
Assert.That(GetPrivateProfileString(sec, "Key21", null, sb, (uint)sb.Capacity, tmp.FullName), Is.GreaterThan(0).And.Not.EqualTo(sb.Capacity - 2));
|
|
Assert.That(sb.ToString(), Is.EqualTo("Value1"));
|
|
sb.Clear();
|
|
Assert.That(GetPrivateProfileString(sec, "Key23", null, sb, (uint)sb.Capacity, tmp.FullName), Is.GreaterThan(0).And.Not.EqualTo(sb.Capacity - 2));
|
|
Assert.That(sb.ToString(), Is.EqualTo("0400000004"));
|
|
|
|
Assert.That(GetPrivateProfileStruct(sec, "Key22", out RECT r, tmp.FullName), Is.True);
|
|
Assert.That(r.bottom, Is.EqualTo(4));
|
|
Assert.That(GetPrivateProfileStruct(sec, "Key23", out int i, tmp.FullName), Is.True);
|
|
Assert.That(i, Is.EqualTo(4));
|
|
Assert.That(GetPrivateProfileStruct(sec, "Key0", out i, tmp.FullName), Is.False);
|
|
}
|
|
|
|
[Test]
|
|
public void PrivateProfileWrapperTest()
|
|
{
|
|
using var tmp = new TempFile("");
|
|
var ppf = new InitializationFile(tmp.FullName);
|
|
Assert.That(ppf.FullName, Is.EqualTo(tmp.FullName));
|
|
|
|
const string secName = "Section";
|
|
InitializationFile.InitializationFileSection sec = ppf.Sections.Add(secName);
|
|
Assert.That(sec.Name, Is.EqualTo(secName));
|
|
sec.AddRange(Enumerable.Range(0, cnt).Select(i => new KeyValuePair<string, string>($"Key{i}", i.ToString())));
|
|
sec.Add("Key20", string.Empty);
|
|
sec.SetValue("Key21", "Value");
|
|
Assert.That(sec["Key21"], Is.EqualTo("Value"));
|
|
sec["Key21"] = "Value1";
|
|
sec.SetValue("Key22", new RECT(1, 2, 3, 4));
|
|
sec.SetValue("Key23", 4L);
|
|
DumpFile();
|
|
Assert.That(ppf.Sections.Count, Is.EqualTo(1));
|
|
Assert.IsTrue(ppf.Sections.Contains(secName.ToLower()));
|
|
Assert.That(ppf.Sections[secName], Is.Not.Null.And.Property("Name").EqualTo(secName));
|
|
|
|
Assert.IsTrue(sec.TryGetValue("Key1", out int iVal));
|
|
Assert.That(iVal, Is.EqualTo(1));
|
|
Assert.IsTrue(sec.TryGetValue("Key1", out uint uVal));
|
|
Assert.That(uVal, Is.EqualTo(1));
|
|
Assert.IsTrue(sec.TryGetValue("Key23", out long lVal));
|
|
Assert.That(lVal, Is.EqualTo(4));
|
|
Assert.IsFalse(sec.TryGetValue("Key20", out iVal));
|
|
Assert.IsFalse(sec.TryGetValue("Key24", out iVal));
|
|
|
|
KeyValuePair<string, string>[] secVals = sec.ToArray();
|
|
Assert.That(secVals.Length, Is.EqualTo(cnt + 4));
|
|
TestContext.WriteLine(string.Join("; ", secVals.Select(kv => $"{kv.Key}={kv.Value}")));
|
|
|
|
var secNames = sec.Keys.ToArray();
|
|
Assert.That(secNames.Length, Is.EqualTo(cnt + 4));
|
|
TestContext.WriteLine(string.Join("; ", secNames));
|
|
|
|
Assert.That(sec["Key1"], Is.EqualTo("1"));
|
|
Assert.That(sec["Key21"], Is.EqualTo("Value1"));
|
|
Assert.That(sec["Key23"], Is.EqualTo("040000000000000004"));
|
|
Assert.IsTrue(sec.TryGetValue("Key20", out var sVal));
|
|
Assert.That(sVal, Is.EqualTo(""));
|
|
Assert.IsFalse(sec.TryGetValue("Key24", out sVal));
|
|
|
|
Assert.That(sec.TryGetValue("Key22", out RECT r), Is.True);
|
|
Assert.That(r.bottom, Is.EqualTo(4));
|
|
|
|
sec.Add("Key100", "100");
|
|
Assert.That(sec.Count, Is.EqualTo(cnt + 5));
|
|
Assert.IsFalse(sec.Remove(new KeyValuePair<string, string>("Key100", "200")));
|
|
Assert.IsTrue(sec.Remove(new KeyValuePair<string, string>("Key100", "100")));
|
|
Assert.That(sec.Count, Is.EqualTo(cnt + 4));
|
|
|
|
Assert.That(() => sec.Clear(), Throws.Nothing);
|
|
Assert.That(sec.Count, Is.Zero);
|
|
Assert.That(new FileInfo(tmp.FullName).Length, Is.GreaterThan(0));
|
|
DumpFile();
|
|
|
|
Assert.That(() => ppf.Sections.Add("Other"), Throws.Nothing);
|
|
Assert.That(ppf.Sections.Count, Is.EqualTo(2));
|
|
Assert.That(() => ppf.Sections.Remove(sec), Throws.Nothing);
|
|
Assert.That(ppf.Sections.Count, Is.EqualTo(1));
|
|
Assert.IsTrue(ppf.Sections.Contains("OTHER"));
|
|
Assert.That(() => ppf.Sections.Clear(), Throws.Nothing);
|
|
Assert.That(ppf.Sections.Count, Is.Zero);
|
|
Assert.That(new FileInfo(tmp.FullName).Length, Is.LessThan(8));
|
|
DumpFile();
|
|
|
|
void DumpFile() => TestContext.WriteLine("=============\r\n" + System.IO.File.ReadAllText(tmp.FullName));
|
|
}
|
|
|
|
[Test]
|
|
public void ProfileTest()
|
|
{
|
|
const string sec = "ImpossibleSection029340985634987";
|
|
|
|
try
|
|
{
|
|
Assert.That(WriteProfileSection(sec, MakeSectionKeys()), ResultIs.Successful);
|
|
Assert.That(WriteProfileString(sec, "Key21", "Value1"), ResultIs.Successful);
|
|
|
|
Assert.That(GetProfileInt(sec, "Key1", 0), Is.EqualTo(1));
|
|
Assert.That(GetProfileInt(sec, "Key24", 0), Is.EqualTo(0));
|
|
|
|
var secVals = GetProfileSection(sec);
|
|
Assert.That(secVals.Length, Is.EqualTo(cnt + 1));
|
|
TestContext.WriteLine(string.Join("; ", secVals));
|
|
|
|
var sb = new StringBuilder(256);
|
|
Assert.That(GetProfileString(sec, "Key1", null, sb, (uint)sb.Capacity), Is.GreaterThan(0).And.Not.EqualTo(sb.Capacity - 2));
|
|
Assert.That(sb.ToString(), Is.EqualTo("1"));
|
|
sb.Clear();
|
|
Assert.That(GetProfileString(sec, "Key21", null, sb, (uint)sb.Capacity), Is.GreaterThan(0).And.Not.EqualTo(sb.Capacity - 2));
|
|
Assert.That(sb.ToString(), Is.EqualTo("Value1"));
|
|
}
|
|
finally
|
|
{
|
|
// Cleanup changes to win.ini
|
|
WriteProfileString(sec, null, null);
|
|
}
|
|
}
|
|
|
|
private string[] MakeSectionKeys() => Enumerable.Range(0, cnt).Select(i => $"Key{i}={i}").ToArray();
|
|
}
|
|
} |