mirror of
https://github.com/BililiveRecorder/BililiveRecorder.git
synced 2024-11-16 03:32:20 +08:00
Update config parser tests
This commit is contained in:
parent
34bf5c31f5
commit
d29471406b
|
@ -1,80 +1,91 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Threading.Tasks;
|
||||||
using BililiveRecorder.Core.Config;
|
using BililiveRecorder.Core.Config;
|
||||||
using BililiveRecorder.Core.Config.V1;
|
using BililiveRecorder.Core.Config.V3;
|
||||||
using BililiveRecorder.Core.Config.V2;
|
using VerifyXunit;
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace BililiveRecorder.Core.UnitTests.Config
|
namespace BililiveRecorder.Core.UnitTests.Config
|
||||||
{
|
{
|
||||||
|
[UsesVerify]
|
||||||
public class ConfigTests
|
public class ConfigTests
|
||||||
{
|
{
|
||||||
private const string V2TestString1 = "{\"version\":2,\"global\":{\"EnabledFeature\":{\"HasValue\":false,\"Value\":0},\"ClipLengthPast\":{\"HasValue\":false,\"Value\":0},\"ClipLengthFuture\":{\"HasValue\":false,\"Value\":0},\"TimingStreamRetry\":{\"HasValue\":false,\"Value\":0},\"TimingStreamConnect\":{\"HasValue\":false,\"Value\":0},\"TimingDanmakuRetry\":{\"HasValue\":false,\"Value\":0},\"TimingCheckInterval\":{\"HasValue\":false,\"Value\":0},\"TimingWatchdogTimeout\":{\"HasValue\":false,\"Value\":0},\"RecordDanmakuFlushInterval\":{\"HasValue\":false,\"Value\":0},\"Cookie\":{\"HasValue\":false,\"Value\":null},\"WebHookUrls\":{\"HasValue\":false,\"Value\":null},\"LiveApiHost\":{\"HasValue\":false,\"Value\":null},\"RecordFilenameFormat\":{\"HasValue\":false,\"Value\":null},\"ClipFilenameFormat\":{\"HasValue\":false,\"Value\":null},\"CuttingMode\":{\"HasValue\":false,\"Value\":0},\"CuttingNumber\":{\"HasValue\":false,\"Value\":0},\"RecordDanmaku\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuRaw\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuSuperChat\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuGift\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuGuard\":{\"HasValue\":false,\"Value\":false}},\"rooms\":[{\"RoomId\":{\"HasValue\":true,\"Value\":1},\"AutoRecord\":{\"HasValue\":false,\"Value\":false},\"CuttingMode\":{\"HasValue\":false,\"Value\":0},\"CuttingNumber\":{\"HasValue\":false,\"Value\":0},\"RecordDanmaku\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuRaw\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuSuperChat\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuGift\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuGuard\":{\"HasValue\":false,\"Value\":false}},{\"RoomId\":{\"HasValue\":true,\"Value\":2},\"AutoRecord\":{\"HasValue\":false,\"Value\":false},\"CuttingMode\":{\"HasValue\":false,\"Value\":0},\"CuttingNumber\":{\"HasValue\":false,\"Value\":0},\"RecordDanmaku\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuRaw\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuSuperChat\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuGift\":{\"HasValue\":false,\"Value\":false},\"RecordDanmakuGuard\":{\"HasValue\":false,\"Value\":false}}]}";
|
|
||||||
|
|
||||||
private static readonly List<object[]> V1 = new()
|
|
||||||
{
|
|
||||||
new object[] { "{\"version\":1}", 1 },
|
|
||||||
new object[] { "{\"version\":1,\"data\":\"\"}", 1 },
|
|
||||||
};
|
|
||||||
|
|
||||||
private static readonly List<object[]> V2 = new()
|
|
||||||
{
|
|
||||||
new object[] { "{\"version\":2}", 2 },
|
|
||||||
new object[] { "{\"version\":2,\"data\":{}}", 2 },
|
|
||||||
new object[] { V2TestString1, 2 },
|
|
||||||
};
|
|
||||||
|
|
||||||
public static IEnumerable<object[]> GetTestData(int version)
|
|
||||||
=> version switch
|
|
||||||
{
|
|
||||||
0 => V1.Concat(V2).AsEnumerable(),
|
|
||||||
1 => V1.AsEnumerable(),
|
|
||||||
2 => V2.AsEnumerable(),
|
|
||||||
_ => throw new ArgumentException()
|
|
||||||
};
|
|
||||||
|
|
||||||
[Theory, MemberData(nameof(GetTestData), 0)]
|
|
||||||
public void Parse(string data, int ver)
|
|
||||||
{
|
|
||||||
var result = JsonConvert.DeserializeObject<ConfigBase>(data);
|
|
||||||
|
|
||||||
var type = ver switch
|
|
||||||
{
|
|
||||||
1 => typeof(ConfigV1Wrapper),
|
|
||||||
2 => typeof(ConfigV2),
|
|
||||||
_ => throw new Exception("not supported")
|
|
||||||
};
|
|
||||||
|
|
||||||
Assert.Equal(type, result.GetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void V2Test1()
|
public Task CanSerializeToJsonAsync()
|
||||||
{
|
{
|
||||||
var obj = JsonConvert.DeserializeObject<ConfigBase>(V2TestString1);
|
var config = new ConfigV3()
|
||||||
|
|
||||||
var v2 = Assert.IsType<ConfigV2>(obj);
|
|
||||||
Assert.Equal(2, v2.Rooms.Count);
|
|
||||||
Assert.Equal(1, v2.Rooms[0].RoomId);
|
|
||||||
Assert.Equal(2, v2.Rooms[1].RoomId);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void Save()
|
|
||||||
{
|
|
||||||
ConfigBase config = new ConfigV2()
|
|
||||||
{
|
{
|
||||||
Rooms = new List<RoomConfig>
|
Rooms = new List<RoomConfig>
|
||||||
{
|
{
|
||||||
new RoomConfig { RoomId = 1 },
|
new RoomConfig { RoomId = 1, AutoRecord = true },
|
||||||
new RoomConfig { RoomId = 2 }
|
new RoomConfig { RoomId = 2 },
|
||||||
|
new RoomConfig { RoomId = int.MaxValue, RecordDanmaku = false }
|
||||||
},
|
},
|
||||||
Global = new GlobalConfig()
|
Global = new GlobalConfig()
|
||||||
|
{
|
||||||
|
FileNameRecordTemplate = "TEST TEMPLATE VALUE",
|
||||||
|
RecordDanmakuRaw = true,
|
||||||
|
RecordMode = RecordMode.RawData,
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var json = JsonConvert.SerializeObject(config);
|
var json = ConfigParser.SaveJson(config);
|
||||||
|
|
||||||
|
return Verifier.Verify(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData(@"{""version"":1,""data"":""{\""roomlist\"":[{\""enabled\"":true,\""id\"":1},{\""enabled\"":true,\""id\"":3},{\""enabled\"":true,\""id\"":5},{\""enabled\"":false,\""id\"":999},{\""enabled\"":false,\""id\"":2147483647}],\""record_filename_format\"":\""TEST_FILE_NAME_TEMPLATE!!\""}""}")]
|
||||||
|
[InlineData(@"{""version"":2,""global"":{""RecordFilenameFormat"":{""HasValue"":true,""Value"":""TEST_FILE_NAME_TEMPLATE!!""}},""rooms"":[{""RoomId"":{""HasValue"":true,""Value"":1},""AutoRecord"":{""HasValue"":true,""Value"":true}},{""RoomId"":{""HasValue"":true,""Value"":3},""AutoRecord"":{""HasValue"":true,""Value"":true}},{""RoomId"":{""HasValue"":true,""Value"":5},""AutoRecord"":{""HasValue"":true,""Value"":true}},{""RoomId"":{""HasValue"":true,""Value"":999},""AutoRecord"":{""HasValue"":true,""Value"":false}},{""RoomId"":{""HasValue"":true,""Value"":2147483647},""AutoRecord"":{""HasValue"":true,""Value"":false}}]}")]
|
||||||
|
[InlineData(@"{""version"":3,""global"":{""FileNameRecordTemplate"":{""HasValue"":true,""Value"":""TEST_FILE_NAME_TEMPLATE!!""}},""rooms"":[{""RoomId"":{""HasValue"":true,""Value"":1},""AutoRecord"":{""HasValue"":true,""Value"":true}},{""RoomId"":{""HasValue"":true,""Value"":3},""AutoRecord"":{""HasValue"":true,""Value"":true}},{""RoomId"":{""HasValue"":true,""Value"":5},""AutoRecord"":{""HasValue"":true,""Value"":true}},{""RoomId"":{""HasValue"":true,""Value"":999},""AutoRecord"":{""HasValue"":true,""Value"":false}},{""RoomId"":{""HasValue"":true,""Value"":2147483647},""AutoRecord"":{""HasValue"":true,""Value"":false}}]}")]
|
||||||
|
public void CanLoadEveryVersion(string configString)
|
||||||
|
{
|
||||||
|
var config = ConfigParser.LoadJson(configString)!;
|
||||||
|
|
||||||
|
Assert.NotNull(config);
|
||||||
|
|
||||||
|
Assert.True(config.Global.HasFileNameRecordTemplate);
|
||||||
|
Assert.Equal("TEST_FILE_NAME_TEMPLATE!!", config.Global.FileNameRecordTemplate);
|
||||||
|
|
||||||
|
Assert.False(config.Global.HasRecordMode);
|
||||||
|
|
||||||
|
Assert.Collection(config.Rooms,
|
||||||
|
room =>
|
||||||
|
{
|
||||||
|
Assert.True(room.AutoRecord);
|
||||||
|
Assert.Equal(1, room.RoomId);
|
||||||
|
|
||||||
|
Assert.False(room.HasRecordDanmaku);
|
||||||
|
},
|
||||||
|
room =>
|
||||||
|
{
|
||||||
|
Assert.True(room.AutoRecord);
|
||||||
|
Assert.Equal(3, room.RoomId);
|
||||||
|
|
||||||
|
Assert.False(room.HasRecordDanmaku);
|
||||||
|
},
|
||||||
|
room =>
|
||||||
|
{
|
||||||
|
Assert.True(room.AutoRecord);
|
||||||
|
Assert.Equal(5, room.RoomId);
|
||||||
|
|
||||||
|
Assert.False(room.HasRecordDanmaku);
|
||||||
|
},
|
||||||
|
room =>
|
||||||
|
{
|
||||||
|
Assert.False(room.AutoRecord);
|
||||||
|
Assert.Equal(999, room.RoomId);
|
||||||
|
|
||||||
|
Assert.False(room.HasRecordDanmaku);
|
||||||
|
},
|
||||||
|
room =>
|
||||||
|
{
|
||||||
|
Assert.False(room.AutoRecord);
|
||||||
|
Assert.Equal(int.MaxValue, room.RoomId);
|
||||||
|
|
||||||
|
Assert.False(room.HasRecordDanmaku);
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"global":{"RecordMode":{"HasValue":true,"Value":1},"RecordDanmakuRaw":{"HasValue":true,"Value":true},"FileNameRecordTemplate":{"HasValue":true,"Value":"TEST TEMPLATE VALUE"}},"rooms":[{"RoomId":{"HasValue":true,"Value":1},"AutoRecord":{"HasValue":true,"Value":true}},{"RoomId":{"HasValue":true,"Value":2}},{"RoomId":{"HasValue":true,"Value":2147483647},"RecordDanmaku":{"HasValue":true}}]}
|
Loading…
Reference in New Issue
Block a user