mirror of
https://github.com/BepInEx/BepInEx.git
synced 2026-10-20 01:46:13 +00:00
Port tests to new API
This commit is contained in:
1 parent
141d1d0b14
commit
1449bcc353
4 files changed
+204
-201
No files matched your search
@@ -28,18 +28,24 @@ namespace BepInEx.Configuration
|
||||
|
||||
public LegacyConfigurationProvider(string filePath)
|
||||
{
|
||||
if (!File.Exists(filePath))
|
||||
throw new FileNotFoundException(filePath);
|
||||
this.filePath = filePath;
|
||||
}
|
||||
|
||||
public void Load()
|
||||
public virtual IEnumerable<string> ReadAllLines()
|
||||
{
|
||||
if (!File.Exists(filePath))
|
||||
throw new FileNotFoundException(filePath);
|
||||
return File.ReadAllLines(filePath);
|
||||
}
|
||||
|
||||
public virtual void Load()
|
||||
{
|
||||
|
||||
items.Clear();
|
||||
|
||||
var currentSection = new string[0];
|
||||
|
||||
foreach (var rawLine in File.ReadAllLines(filePath))
|
||||
|
||||
foreach (var rawLine in ReadAllLines())
|
||||
{
|
||||
var line = rawLine.Trim();
|
||||
|
||||
@@ -64,7 +70,7 @@ namespace BepInEx.Configuration
|
||||
}
|
||||
|
||||
// TODO: Write to TOML instead
|
||||
public void Save() => throw new System.NotImplementedException();
|
||||
public virtual void Save() => throw new System.NotImplementedException();
|
||||
|
||||
public ConfigurationNode Get(string[] path)
|
||||
{
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
extern alias UEC;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using UEC::UnityEngine;
|
||||
@@ -12,58 +9,10 @@ namespace BepInEx.Configuration.Tests
|
||||
[TestClass]
|
||||
public class ConfigFileTests
|
||||
{
|
||||
private static ConcurrentBag<ConfigFile> _toRemove;
|
||||
|
||||
[ClassInitialize]
|
||||
public static void Init(TestContext context) => _toRemove = new ConcurrentBag<ConfigFile>();
|
||||
|
||||
[ClassCleanup]
|
||||
public static void Cleanup()
|
||||
{
|
||||
foreach (var configFile in _toRemove)
|
||||
File.Delete(configFile.ConfigFilePath);
|
||||
}
|
||||
|
||||
private static ConfigFile MakeConfig()
|
||||
{
|
||||
var configPath = Path.GetTempFileName();
|
||||
if (configPath == null) throw new InvalidOperationException("Wtf");
|
||||
var config = new ConfigFile(configPath, true);
|
||||
_toRemove.Add(config);
|
||||
return config;
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SaveTest() => MakeConfig().Save();
|
||||
|
||||
[TestMethod]
|
||||
public void SaveTestValueChange()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
var lines = File.ReadAllLines(c.ConfigFilePath);
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("[Cat]")));
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("## Test")));
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("Key = 0")));
|
||||
|
||||
c.Save();
|
||||
lines = File.ReadAllLines(c.ConfigFilePath);
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("[Cat]")));
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("## Test")));
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("Key = 0")));
|
||||
|
||||
w.Value = 69;
|
||||
lines = File.ReadAllLines(c.ConfigFilePath);
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("[Cat]")));
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("## Test")));
|
||||
Assert.AreEqual(1, lines.Count(x => x.Equals("Key = 69")));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void AutoSaveTest()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
|
||||
var eventFired = new AutoResetEvent(false);
|
||||
@@ -74,35 +23,10 @@ namespace BepInEx.Configuration.Tests
|
||||
Assert.IsFalse(eventFired.WaitOne(200));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ReadTest()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
File.WriteAllText(c.ConfigFilePath, "[Cat]\n# Test\nKey=1\n");
|
||||
c.Reload();
|
||||
var w = c.Bind("Cat", "Key", 0, "Test");
|
||||
Assert.AreEqual(w.Value, 1);
|
||||
var w2 = c.Bind("Cat", "Key2", 0, new ConfigDescription("Test"));
|
||||
Assert.AreEqual(w2.Value, 0);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ReadTest2()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
Assert.AreEqual(w.Value, 0);
|
||||
|
||||
File.WriteAllText(c.ConfigFilePath, "[Cat]\n# Test\nKey = 1 \n");
|
||||
|
||||
c.Reload();
|
||||
Assert.AreEqual(w.Value, 1);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FileWatchTestNoSelfReload()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
|
||||
var eventFired = new AutoResetEvent(false);
|
||||
c.ConfigReloaded += (sender, args) => eventFired.Set();
|
||||
@@ -112,59 +36,10 @@ namespace BepInEx.Configuration.Tests
|
||||
Assert.IsFalse(eventFired.WaitOne(200));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void EventTestWrapper()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
|
||||
File.WriteAllText(c.ConfigFilePath, "[Cat]\n# Test\nKey=1\n");
|
||||
|
||||
var eventFired = false;
|
||||
w.SettingChanged += (sender, args) => eventFired = true;
|
||||
|
||||
c.Reload();
|
||||
|
||||
Assert.IsTrue(eventFired);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PersistHomeless()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
|
||||
File.WriteAllText(c.ConfigFilePath, "[Cat]\n# Test\nKey=1\nHomeless=0");
|
||||
c.Reload();
|
||||
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
|
||||
c.Save();
|
||||
|
||||
Assert.IsTrue(File.ReadAllLines(c.ConfigFilePath)
|
||||
.Single(x => x.StartsWith("Homeless") && x.EndsWith("0")) != null);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void EventTestReload()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var eventFired = false;
|
||||
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
w.SettingChanged += (sender, args) => eventFired = true;
|
||||
|
||||
Assert.IsFalse(eventFired);
|
||||
|
||||
File.WriteAllText(c.ConfigFilePath, "[Cat]\n# Test\nKey=1\n");
|
||||
c.Reload();
|
||||
|
||||
Assert.IsTrue(eventFired);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ValueRangeTest()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test", new AcceptableValueRange<int>(0, 2)));
|
||||
|
||||
Assert.AreEqual(0, w.Value);
|
||||
@@ -180,7 +55,7 @@ namespace BepInEx.Configuration.Tests
|
||||
[ExpectedException(typeof(ArgumentException))]
|
||||
public void ValueRangeBadTypeTest()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
c.Bind("Cat", "Key", 0, new ConfigDescription("Test", new AcceptableValueRange<float>(1, 2)));
|
||||
Assert.Fail();
|
||||
}
|
||||
@@ -188,34 +63,16 @@ namespace BepInEx.Configuration.Tests
|
||||
[TestMethod]
|
||||
public void ValueRangeDefaultTest()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test", new AcceptableValueRange<int>(1, 2)));
|
||||
|
||||
Assert.AreEqual(w.Value, 1);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ValueRangeLoadTest()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
|
||||
File.WriteAllText(c.ConfigFilePath, "[Cat]\nKey = 1\n");
|
||||
c.Reload();
|
||||
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test", new AcceptableValueRange<int>(0, 2)));
|
||||
|
||||
Assert.AreEqual(w.Value, 1);
|
||||
|
||||
File.WriteAllText(c.ConfigFilePath, "[Cat]\nKey = 5\n");
|
||||
c.Reload();
|
||||
|
||||
Assert.AreEqual(w.Value, 2);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ValueListTest()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", "kek",
|
||||
new ConfigDescription("Test", new AcceptableValueList<string>("lel", "kek", "wew", "why")));
|
||||
|
||||
@@ -236,7 +93,7 @@ namespace BepInEx.Configuration.Tests
|
||||
var d = KeyboardShortcut.Deserialize(s);
|
||||
Assert.AreEqual(shortcut, d);
|
||||
|
||||
var c = MakeConfig();
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", new KeyboardShortcut(KeyCode.A, KeyCode.LeftShift));
|
||||
Assert.AreEqual(new KeyboardShortcut(KeyCode.A, KeyCode.LeftShift), w.Value);
|
||||
|
||||
@@ -250,7 +107,7 @@ namespace BepInEx.Configuration.Tests
|
||||
{
|
||||
Assert.AreEqual(KeyboardShortcut.Empty, new KeyboardShortcut());
|
||||
|
||||
var c = MakeConfig();
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
|
||||
var w = c.Bind("Cat", "Key", KeyboardShortcut.Empty, new ConfigDescription("Test"));
|
||||
|
||||
@@ -270,49 +127,5 @@ namespace BepInEx.Configuration.Tests
|
||||
|
||||
Assert.AreEqual(testShortcut, w.Value);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StringEscapeChars()
|
||||
{
|
||||
const string testVal = "new line\n test \t\0";
|
||||
|
||||
var c = MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", testVal, new ConfigDescription("Test"));
|
||||
|
||||
Assert.AreEqual(testVal, w.Value);
|
||||
Assert.IsFalse(w.GetSerializedValue().Any(x => x == '\n'));
|
||||
|
||||
w.SetSerializedValue(w.GetSerializedValue());
|
||||
Assert.AreEqual(testVal, w.Value);
|
||||
|
||||
c.Save();
|
||||
c.Reload();
|
||||
|
||||
Assert.AreEqual(testVal, w.Value);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void UnescapedPathString()
|
||||
{
|
||||
var c = MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", "", new ConfigDescription("Test"));
|
||||
|
||||
var unescaped = @"D:\test\p ath";
|
||||
foreach (var testVal in new[] { unescaped, @"D:\\test\\p ath" })
|
||||
{
|
||||
File.WriteAllText(c.ConfigFilePath, $"[Cat]\n# Test\nKey={testVal}\n");
|
||||
c.Reload();
|
||||
|
||||
Assert.AreEqual(unescaped, w.Value);
|
||||
|
||||
w.SetSerializedValue(w.GetSerializedValue());
|
||||
Assert.AreEqual(unescaped, w.Value);
|
||||
|
||||
c.Save();
|
||||
c.Reload();
|
||||
|
||||
Assert.AreEqual(unescaped, w.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
using System.Linq;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace BepInEx.Configuration.Tests
|
||||
{
|
||||
[TestClass]
|
||||
public class LegacyConfigTests
|
||||
{
|
||||
[TestMethod]
|
||||
public void ReadTest()
|
||||
{
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig(@"
|
||||
[Cat]
|
||||
# Test
|
||||
Key=1
|
||||
");
|
||||
c.Reload();
|
||||
var w = c.Bind("Cat", "Key", 0, "Test");
|
||||
Assert.AreEqual(w.Value, 1);
|
||||
var w2 = c.Bind("Cat", "Key2", 0, new ConfigDescription("Test"));
|
||||
Assert.AreEqual(w2.Value, 0);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ReadTest2()
|
||||
{
|
||||
var (c, provider) = LegacyTestConfigProvider.MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
Assert.AreEqual(w.Value, 0);
|
||||
|
||||
provider.FileContents = @"
|
||||
[Cat]
|
||||
# Test
|
||||
Key=1
|
||||
";
|
||||
|
||||
c.Reload();
|
||||
Assert.AreEqual(w.Value, 1);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void EventTestWrapper()
|
||||
{
|
||||
var (c, p) = LegacyTestConfigProvider.MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
|
||||
p.FileContents = @"
|
||||
[Cat]
|
||||
# Test
|
||||
Key=1
|
||||
";
|
||||
|
||||
var eventFired = false;
|
||||
w.SettingChanged += (sender, args) => eventFired = true;
|
||||
|
||||
c.Reload();
|
||||
|
||||
Assert.IsTrue(eventFired);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void EventTestReload()
|
||||
{
|
||||
var (c, p) = LegacyTestConfigProvider.MakeConfig();
|
||||
var eventFired = false;
|
||||
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test"));
|
||||
w.SettingChanged += (sender, args) => eventFired = true;
|
||||
|
||||
Assert.IsFalse(eventFired);
|
||||
|
||||
p.FileContents = @"
|
||||
[Cat]
|
||||
# Test
|
||||
Key=1
|
||||
";
|
||||
c.Reload();
|
||||
|
||||
Assert.IsTrue(eventFired);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StringEscapeChars()
|
||||
{
|
||||
const string testVal = "new line\n test \t\0";
|
||||
|
||||
var (c, _) = LegacyTestConfigProvider.MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", testVal, new ConfigDescription("Test"));
|
||||
|
||||
Assert.AreEqual(testVal, w.Value);
|
||||
Assert.IsFalse(w.GetSerializedValue().Any(x => x == '\n'));
|
||||
|
||||
w.SetSerializedValue(w.GetSerializedValue());
|
||||
Assert.AreEqual(testVal, w.Value);
|
||||
|
||||
c.Save();
|
||||
c.Reload();
|
||||
|
||||
Assert.AreEqual(testVal, w.Value);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void UnescapedPathString()
|
||||
{
|
||||
var (c, p) = LegacyTestConfigProvider.MakeConfig();
|
||||
var w = c.Bind("Cat", "Key", "", new ConfigDescription("Test"));
|
||||
|
||||
var unescaped = @"D:\test\p ath";
|
||||
foreach (var testVal in new[] { unescaped, @"D:\\test\\p ath" })
|
||||
{
|
||||
p.FileContents = $@"
|
||||
[Cat]
|
||||
# Test
|
||||
Key={testVal}
|
||||
";
|
||||
c.Reload();
|
||||
|
||||
Assert.AreEqual(unescaped, w.Value);
|
||||
|
||||
w.SetSerializedValue(w.GetSerializedValue());
|
||||
Assert.AreEqual(unescaped, w.Value);
|
||||
|
||||
c.Save();
|
||||
c.Reload();
|
||||
|
||||
Assert.AreEqual(unescaped, w.Value);
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ValueRangeLoadTest()
|
||||
{
|
||||
var (c, p) = LegacyTestConfigProvider.MakeConfig();
|
||||
|
||||
p.FileContents = @"
|
||||
[Cat]
|
||||
Key = 1
|
||||
";
|
||||
c.Reload();
|
||||
|
||||
var w = c.Bind("Cat", "Key", 0, new ConfigDescription("Test", new AcceptableValueRange<int>(0, 2)));
|
||||
|
||||
Assert.AreEqual(w.Value, 1);
|
||||
|
||||
p.FileContents = @"
|
||||
[Cat]
|
||||
Key = 5
|
||||
";
|
||||
c.Reload();
|
||||
|
||||
Assert.AreEqual(w.Value, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BepInEx.Configuration.Tests
|
||||
{
|
||||
public class LegacyTestConfigProvider : LegacyConfigurationProvider
|
||||
{
|
||||
public string FileContents { get; set; }
|
||||
|
||||
public LegacyTestConfigProvider() : base("none")
|
||||
{
|
||||
}
|
||||
|
||||
public override IEnumerable<string> ReadAllLines()
|
||||
{
|
||||
return FileContents.Split(Environment.NewLine);
|
||||
}
|
||||
|
||||
public override void Save()
|
||||
{
|
||||
// Do nothing for now, there is nothing to save
|
||||
}
|
||||
|
||||
public static (ConfigFile Config, LegacyTestConfigProvider Provider) MakeConfig(string contents = "")
|
||||
{
|
||||
var provider = new LegacyTestConfigProvider{ FileContents = contents };
|
||||
return (new ConfigFile(provider, false, null), provider);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user