gradu { get; set; }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Test/Properties/PublishProfiles/FolderProfile.pubxml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 | FileSystem
8 | Release
9 | Any CPU
10 | net7.0
11 | ..\Bin\Test\publish\win-x64\
12 | false
13 | win-x64
14 | true
15 | false
16 |
17 |
--------------------------------------------------------------------------------
/Test/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "profiles": {
3 | "Test": {
4 | "commandName": "Project",
5 | "environmentVariables": {
6 | "ASPNETCORE_ENVIRONMENT": "Development"
7 | }
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/Test/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Url": "https://newlifex.com/",
3 | "ConnectionStrings": {
4 | "MySQL.AppSettings": {
5 | "connectionString": /*中间注释*/ "Server=.;Port=3306;Database=mysql;Uid=MySQL.default;Pwd=;",
6 | "providerName": "MySql.Data.MySqlClient"
7 | // 不支持放在最后的注释,链接中的双斜杠被当成注释
8 | // 独立一行注释
9 | },
10 | "sqlserver": {
11 | "connectionString": "Server=127.0.0.1;Database=Membership;Uid=root;Pwd=root;",
12 | "providerName": "SqlServer"
13 | },
14 | "MySQL.AppSettings.default": {
15 | /*"connectionString": "Server=.;Port=3306;Database=mysql;Uid=MySQL.default;Pwd=;",*/
16 | /*"providerName": "MySql.Data.MySqlClient"*/
17 | },
18 | "TDengine": {
19 | "connectionString": "Server=gz01.newlifex.com;Port=6030;Database=db;user=root;password=taosdata",
20 | "providerName": "TDengine"
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Test/form.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 表单提交
7 |
8 |
9 | 用户信息
10 |
11 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Test2/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Test2/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using NewLife.Log;
4 | using NewLife.Threading;
5 | using NewLife;
6 |
7 | namespace Test2
8 | {
9 | internal class Program
10 | {
11 | static void Main(string[] args)
12 | {
13 | XTrace.UseConsole();
14 |
15 | TimerScheduler.Default.Log = XTrace.Log;
16 |
17 | while (true)
18 | {
19 | var sw = Stopwatch.StartNew();
20 | #if !DEBUG
21 | try
22 | {
23 | #endif
24 | Test1();
25 | #if !DEBUG
26 | }
27 | catch (Exception ex)
28 | {
29 | XTrace.WriteException(ex?.GetTrue());
30 | }
31 | #endif
32 |
33 | sw.Stop();
34 | Console.WriteLine("OK! 耗时 {0}", sw.Elapsed);
35 | //Thread.Sleep(5000);
36 | GC.Collect();
37 | GC.WaitForPendingFinalizers();
38 | var key = Console.ReadKey(true);
39 | if (key.Key != ConsoleKey.C) break;
40 | }
41 | }
42 |
43 | static void Test1()
44 | {
45 | var str = $"{DateTime.Now:yyyy}年,学无先后达者为师!";
46 | str.SpeakAsync();
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Test2/Test2.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | Exe
4 | net4.5
5 | 9.0
6 | $([System.DateTime]::Now.ToString(`yyyy.MMdd`))
7 | $(VersionPrefix).$(VersionSuffix)
8 | $(Version)
9 | $(VersionPrefix).*
10 | false
11 | ..\Bin\Test2
12 | false
13 | latest
14 | 1701;1702;NU5104;NETSDK1138;CS7035
15 |
16 |
17 | $(DefineConstants);DEBUG
18 | full
19 | false
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Caching/MemoryQueueTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading;
5 | using NewLife.Caching;
6 | using NewLife.Log;
7 | using Xunit;
8 |
9 | namespace XUnitTest.Caching;
10 |
11 | public class MemoryQueueTests
12 | {
13 | [Fact]
14 | public async void Test1()
15 | {
16 | XTrace.WriteLine("MemoryQueueTests.Test1");
17 |
18 | var q = new MemoryQueue();
19 |
20 | Assert.True(q.IsEmpty);
21 | Assert.Equal(0, q.Count);
22 |
23 | q.Add("test");
24 | q.Add("newlife", "stone");
25 |
26 | Assert.False(q.IsEmpty);
27 | Assert.Equal(3, q.Count);
28 |
29 | var s1 = q.TakeOne();
30 | Assert.Equal("test", s1);
31 |
32 | var ss = q.Take(3).ToArray();
33 | Assert.Equal(2, ss.Length);
34 |
35 | XTrace.WriteLine("begin TokeOneAsync");
36 | ThreadPool.QueueUserWorkItem(s =>
37 | {
38 | Thread.Sleep(1100);
39 | XTrace.WriteLine("add message");
40 | q.Add("delay");
41 | });
42 |
43 | var s2 = await q.TakeOneAsync(15, default);
44 | XTrace.WriteLine("end TokeOneAsync");
45 | Assert.Equal("delay", s2);
46 | }
47 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Collections/CollectionHelperTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using Xunit;
5 |
6 | namespace XUnitTest.Collections;
7 |
8 | public class CollectionHelperTests
9 | {
10 | [Fact]
11 | public void ToArrayTest()
12 | {
13 | var vs = new[] { 12, 34, 56, 78, 90 };
14 | var list = new List(vs);
15 | var list2 = list as IList;
16 |
17 | var vs2 = list2.ToArray();
18 | Assert.Equal(vs.Length, vs2.Length);
19 | Assert.Equal(vs[0], vs2[0]);
20 | Assert.Equal(vs[1], vs2[1]);
21 | Assert.Equal(vs[2], vs2[2]);
22 | Assert.Equal(vs[3], vs2[3]);
23 | Assert.Equal(vs[4], vs2[4]);
24 |
25 | //var vs3 = list2.ToArray(2);
26 | //Assert.Equal(vs.Length + 2, vs3.Length);
27 | //Assert.Equal(vs[0], vs3[2]);
28 | //Assert.Equal(vs[1], vs3[3]);
29 | //Assert.Equal(vs[2], vs3[4]);
30 | //Assert.Equal(vs[3], vs3[5]);
31 | //Assert.Equal(vs[4], vs3[6]);
32 | }
33 |
34 | [Fact]
35 | public void CheckNullable()
36 | {
37 | var dic = new Dictionary()
38 | {
39 | ["a"] = "a",
40 | ["b"] = null,
41 | ["c"] = "c"
42 | };
43 |
44 | var rs = dic is IDictionary;
45 | Assert.True(rs);
46 |
47 | rs = dic is IDictionary;
48 | Assert.True(rs);
49 | }
50 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Common/LockTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using NewLife.Log;
3 | using Xunit;
4 |
5 | namespace XUnitTest.Common
6 | {
7 | public class LockTests
8 | {
9 | [Fact(DisplayName = "测试lock是否阻塞本线程")]
10 | public void TestLock()
11 | {
12 | lock (_lock)
13 | {
14 | Test(3);
15 | }
16 | }
17 |
18 | private Object _lock = new Object();
19 | void Test(Int32 n)
20 | {
21 | // lock并不会阻塞本线程,同一个线程第二次lock同一个对象时,直接进去
22 | XTrace.WriteLine("LockTestA {0}", n);
23 | lock (_lock)
24 | {
25 | XTrace.WriteLine("LockTestB {0}", n);
26 | if (n > 1) Test(n - 1);
27 | XTrace.WriteLine("LockTestC {0}", n);
28 | }
29 | }
30 | }
31 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Common/SysConfigTest.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Common;
2 | using Xunit;
3 |
4 | namespace XUnitTest.Common;
5 |
6 | public class SysConfigTest
7 | {
8 | [Fact(DisplayName = "系统名称")]
9 | public void DisplayNameTest()
10 | {
11 | var asm = SysConfig.SysAssembly;
12 | Assert.NotNull(asm);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Data/GeoHashTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using NewLife.Data;
3 | using Xunit;
4 |
5 | namespace XUnitTest.Data
6 | {
7 | public class GeoHashTests
8 | {
9 | [Fact]
10 | public void Encode()
11 | {
12 | // 鸟巢
13 | Assert.Equal("wx4g8c9vn", GeoHash.Encode(116.402843, 39.999375));
14 | // 水立方
15 | Assert.Equal("wx4g89tkz", GeoHash.Encode(116.3967, 39.99932));
16 | // 故宫
17 | Assert.Equal("wx4g0ffev", GeoHash.Encode(116.40382, 39.918118));
18 | }
19 |
20 | [Fact]
21 | public void Decode()
22 | {
23 | var gp1 = GeoHash.Decode("wx4g8c9vn");
24 | Assert.True(Math.Abs(116.402843 - gp1.Longitude) < 0.0001);
25 | Assert.True(Math.Abs(39.999375 - gp1.Latitude) < 0.0001);
26 |
27 | var gp2 = GeoHash.Decode("wx4g89tkz");
28 | Assert.True(Math.Abs(116.3967 - gp2.Longitude) < 0.0001);
29 | Assert.True(Math.Abs(39.99932 - gp2.Latitude) < 0.0001);
30 |
31 | var gp3 = GeoHash.Decode("wx4g0ffev");
32 | Assert.True(Math.Abs(116.40382 - gp3.Longitude) < 0.0001);
33 | Assert.True(Math.Abs(39.918118 - gp3.Latitude) < 0.0001);
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Expressions/MathTests.cs:
--------------------------------------------------------------------------------
1 | using System.Linq;
2 | using NewLife;
3 | using NewLife.Expressions;
4 | using NewLife.Log;
5 | using Xunit;
6 |
7 | namespace XUnitTest.Expressions
8 | {
9 | public class MathTests
10 | {
11 | [Fact]
12 | public void Test1()
13 | {
14 | var exp = "99-(12+34*56)/78";
15 | XTrace.WriteLine("表达式:{0}", exp);
16 |
17 | var me = new MathExpression();
18 | var expRpn = me.ToExpression(exp);
19 | var str = expRpn.Join(",");
20 | XTrace.WriteLine("逆波兰:{0}", str);
21 | Assert.Equal("99,12,34,56,*,+,78,/,-", str);
22 |
23 | var rs = me.Complie(expRpn);
24 | XTrace.WriteLine("结 果:{0}", rs);
25 | Assert.Equal(74.43589743589743, rs);
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Extension/ProcessHelperTests.cs:
--------------------------------------------------------------------------------
1 | using System.Diagnostics;
2 | using NewLife;
3 | using NewLife.Log;
4 | using Xunit;
5 |
6 | namespace XUnitTest.Extension;
7 |
8 | public class ProcessHelperTests
9 | {
10 | [Fact(Skip = "Test")]
11 | public void GetCommandLine()
12 | {
13 | foreach (var item in Process.GetProcesses())
14 | {
15 | if (item.ProcessName == "dotnet")
16 | {
17 | var cmd = ProcessHelper.GetCommandLine(item.Id);
18 | XTrace.WriteLine("{0}: {1}", item.ProcessName, cmd);
19 |
20 | Assert.Contains("dotnet.exe", cmd);
21 | }
22 | }
23 | }
24 |
25 | [Fact(Skip = "Test")]
26 | public void GetCommandLineArgs()
27 | {
28 | foreach (var item in Process.GetProcesses())
29 | {
30 | if (item.ProcessName == "dotnet")
31 | {
32 | var cmds = ProcessHelper.GetCommandLineArgs(item.Id);
33 | XTrace.WriteLine("{0}: {1}", item.ProcessName, cmds.Join(" "));
34 |
35 | Assert.True(cmds.Length >= 2);
36 | Assert.EndsWith("dotnet.exe", cmds[0]);
37 | }
38 | }
39 | }
40 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/GeoArea.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace NewLife.Data
4 | {
5 | /// 地理区域
6 | public class GeoArea
7 | {
8 | #region 属性
9 | /// 编码
10 | public Int32 Code { get; set; }
11 |
12 | /// 名称
13 | public String Name { get; set; }
14 |
15 | /// 父级
16 | public Int32 ParentCode { get; set; }
17 |
18 | /// 中心
19 | public String Center { get; set; }
20 |
21 | /// 边界
22 | public String Polyline { get; set; }
23 |
24 | /// 级别
25 | public String Level { get; set; }
26 | #endregion
27 |
28 | /// 已重载。
29 | ///
30 | public override String ToString() => $"{Code} {Name}";
31 | }
32 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Http/leaf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NewLifeX/X/14956ea83fd5b6946f11adbf01c08dc61e84c2c6/XUnitTest.Core/Http/leaf.png
--------------------------------------------------------------------------------
/XUnitTest.Core/IO/ExcelReaderTests.cs:
--------------------------------------------------------------------------------
1 | using System.Text;
2 | using NewLife;
3 | using NewLife.IO;
4 | using Xunit;
5 |
6 | namespace XUnitTest.IO;
7 |
8 | public class ExcelReaderTests
9 | {
10 | [Fact]
11 | public void Test1()
12 | {
13 | var type = GetType();
14 | var stream = type.Assembly.GetManifestResourceStream(type.Namespace + ".excel.xlsx");
15 | Assert.NotNull(stream);
16 |
17 | var reader = new ExcelReader(stream, Encoding.UTF8);
18 | var rows = reader.ReadRows().ToList();
19 | Assert.Equal(927, rows.Count);
20 |
21 | var names = "序号,名字,昵称,启用,年龄,生日,时间,余额,比率,开始时间,结束时间".Split(',');
22 | var fields = rows[0].Cast().ToArray();
23 | Assert.Equal(names.Length, fields.Length);
24 | for (var i = 0; i < names.Length; i++)
25 | {
26 | Assert.Equal(names[i], fields[i]);
27 | }
28 |
29 | var values = "111,Stone,大石头,1,36.6,1984-07-01,2020-03-04 20:08:45,323.452,0.234,11:22:00,23:59:00".Split(',');
30 | var row1 = rows[1];
31 | Assert.Equal(values.Length, row1.Length);
32 | for (var i = 0; i < values.Length; i++)
33 | {
34 | if (row1[i] is DateTime dt)
35 | Assert.Equal(values[i].ToDateTime(), dt);
36 | else if (row1[i] is TimeSpan ts)
37 | Assert.Equal(TimeSpan.Parse(values[i]), ts);
38 | else
39 | Assert.Equal(values[i], row1[i]);
40 | }
41 | }
42 |
43 | //[Fact]
44 | public void Test2()
45 | {
46 | var reader = new ExcelReader("test.xlsx");
47 | var rows = reader.ReadRows().ToList();
48 | Assert.Equal(927, rows.Count);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/XUnitTest.Core/IO/excel.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NewLifeX/X/14956ea83fd5b6946f11adbf01c08dc61e84c2c6/XUnitTest.Core/IO/excel.xlsx
--------------------------------------------------------------------------------
/XUnitTest.Core/Log/LevelLogTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Text;
5 | using NewLife.Log;
6 | using Xunit;
7 | using NewLife.Reflection;
8 | using System.Threading;
9 |
10 | namespace XUnitTest.Log
11 | {
12 | public class LevelLogTests
13 | {
14 | [Fact]
15 | public void CreateTest()
16 | {
17 | var p = "LevelLog\\";
18 | if (Directory.Exists(p.GetFullPath())) Directory.Delete(p.GetFullPath(), true);
19 |
20 | var log = new LevelLog(p, "{1}\\{0:yyyy_MM_dd}.log");
21 | log.Level = LogLevel.All;
22 |
23 | var logs = log.GetValue("_logs") as IDictionary;
24 | Assert.NotNull(logs);
25 | Assert.Equal(5, logs.Count);
26 |
27 | log.Debug("debug");
28 | log.Info("info");
29 | log.Warn("warn");
30 | log.Error("error");
31 | log.Fatal("fatal");
32 |
33 | // 等待日志落盘
34 | Thread.Sleep(2000);
35 |
36 | var f = p + $"debug\\{DateTime.Today:yyyy_MM_dd}.log";
37 | Assert.True(File.Exists(f.GetFullPath()));
38 |
39 | f = p + $"info\\{DateTime.Today:yyyy_MM_dd}.log";
40 | Assert.True(File.Exists(f.GetFullPath()));
41 |
42 | f = p + $"warn\\{DateTime.Today:yyyy_MM_dd}.log";
43 | Assert.True(File.Exists(f.GetFullPath()));
44 |
45 | f = p + $"error\\{DateTime.Today:yyyy_MM_dd}.log";
46 | Assert.True(File.Exists(f.GetFullPath()));
47 |
48 | f = p + $"fatal\\{DateTime.Today:yyyy_MM_dd}.log";
49 | Assert.True(File.Exists(f.GetFullPath()));
50 | }
51 | }
52 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Log/NetworkLogTests.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Log;
2 | using Xunit;
3 |
4 | namespace XUnitTest.Log;
5 |
6 | public class NetworkLogTests
7 | {
8 | [Fact]
9 | public void UdpLog()
10 | {
11 | using var netLog = new NetworkLog();
12 | netLog.Write(LogLevel.Info, "This is {0}", Environment.MachineName);
13 | netLog.Write(LogLevel.Info, "I am {0}", Environment.UserName);
14 | }
15 |
16 | [Fact]
17 | public void TcpLog()
18 | {
19 | using var netLog = new NetworkLog("tcp://127.0.0.1:514");
20 | netLog.Write(LogLevel.Info, "This is {0}", Environment.MachineName);
21 | netLog.Write(LogLevel.Info, "I am {0}", Environment.UserName);
22 | }
23 |
24 | [Fact]
25 | public void HttpLog()
26 | {
27 | using var netLog = new NetworkLog("http://baidu.com/log");
28 | netLog.Write(LogLevel.Info, "This is {0}", Environment.MachineName);
29 | netLog.Write(LogLevel.Info, "I am {0}", Environment.UserName);
30 |
31 | for (var i = 0; i < 10; i++)
32 | {
33 | netLog.Write(LogLevel.Info, "Hello +" + i);
34 | }
35 | }
36 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Log/PerfCounterTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using System.Threading;
5 | using NewLife.Log;
6 | using Xunit;
7 | using NewLife.Reflection;
8 | using System.Diagnostics;
9 |
10 | namespace XUnitTest.Log
11 | {
12 | public class PerfCounterTests
13 | {
14 | [Fact]
15 | public void Test()
16 | {
17 | var counter = new PerfCounter();
18 |
19 | XTrace.WriteLine("IsHighResolution={0}", Stopwatch.IsHighResolution);
20 | XTrace.WriteLine("Frequency={0:n0}", Stopwatch.Frequency);
21 | var tickFrequency = typeof(CounterHelper).GetValue("tickFrequency");
22 | XTrace.WriteLine("tickFrequency={0:n0}", tickFrequency);
23 |
24 | var ts = counter.StartCount();
25 | var count = 10000;
26 | Thread.SpinWait(count);
27 |
28 | var usCost = counter.StopCount(ts);
29 | XTrace.WriteLine("Thread.SpinWait({0}) = {1}us", count, usCost);
30 |
31 | //Assert.True(usCost >= 1000);
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Net/NetSeverTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Net.Sockets;
4 | using System.Text;
5 | using System.Threading;
6 | using NewLife;
7 | using NewLife.Log;
8 | using NewLife.Net;
9 | using Xunit;
10 |
11 | namespace XUnitTest.Net
12 | {
13 | public class NetSeverTests
14 | {
15 | [Fact]
16 | public void TcpEmptyData()
17 | {
18 | var server = new NetServer
19 | {
20 | Port = 7777,
21 |
22 | Log = XTrace.Log,
23 | SessionLog = XTrace.Log,
24 | SocketLog = XTrace.Log,
25 | LogSend = true,
26 | LogReceive = true,
27 | };
28 |
29 | server.Received += (s, e) =>
30 | {
31 | var ss = s as INetSession;
32 | ss.Send(e.Packet);
33 | };
34 |
35 | server.Start();
36 |
37 | {
38 | var uri = new NetUri($"tcp://127.0.0.1:{server.Port}");
39 | var client = new TcpClient();
40 | client.Connect(uri.EndPoint);
41 |
42 | var ns = client.GetStream();
43 | ns.Write("Stone@NewLife.com".GetBytes());
44 |
45 | var buf = new Byte[1024];
46 | var rs = ns.Read(buf, 0, buf.Length);
47 | }
48 |
49 | Thread.Sleep(3_000);
50 | }
51 | }
52 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Net/UpgradeTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Net.Http;
4 | using NewLife;
5 | using NewLife.Http;
6 | using NewLife.Log;
7 | using NewLife.Net;
8 | using Xunit;
9 |
10 | namespace XUnitTest.Net
11 | {
12 | public class UpgradeTests
13 | {
14 | [Fact]
15 | public void CopyAndReplace()
16 | {
17 | //Directory.Delete("./Update", true);
18 |
19 | var url = "http://x.newlifex.com/star/staragent50.zip";
20 | var fileName = Path.GetFileName(url);
21 | //fileName = "Update".CombinePath(fileName).EnsureDirectory(true);
22 |
23 | var ug = new Upgrade { Log = XTrace.Log };
24 | ug.Download(url, fileName);
25 |
26 | // 解压
27 | var source = ug.Extract(ug.SourceFile);
28 |
29 | // 覆盖
30 | var dest = "./updateTest";
31 | ug.CopyAndReplace(source, dest);
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/XUnitTest.Core/PropertyInfo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using Xunit;
5 |
6 | //[assembly: TestCaseOrderer("Xunit.Extensions.Ordering.TestCaseOrderer", "Xunit.Extensions.Ordering")]
--------------------------------------------------------------------------------
/XUnitTest.Core/Reflection/AssemblyXTests.cs:
--------------------------------------------------------------------------------
1 | using NewLife;
2 | using NewLife.Reflection;
3 | using Xunit;
4 |
5 | namespace XUnitTest.Reflection;
6 |
7 | public class AssemblyXTests
8 | {
9 | [Fact]
10 | public void GetCompileTime()
11 | {
12 | {
13 | var ver = "2.0.8153.37437";
14 | var time = AssemblyX.GetCompileTime(ver);
15 | Assert.Equal("2022-04-28 20:47:54".ToDateTime(), time);
16 | }
17 | {
18 | var ver = "9.0.2022.427";
19 | var time = AssemblyX.GetCompileTime(ver);
20 | Assert.Equal("2022-04-27 00:00:00".ToDateTime(), time);
21 | }
22 | {
23 | var ver = "9.0.2022.0427-beta0344";
24 | var time = AssemblyX.GetCompileTime(ver);
25 | Assert.Equal("2022-04-27 03:44:00".ToDateTime(), time.ToUniversalTime());
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Security/Crc16Tests.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Security;
2 | using Xunit;
3 |
4 | namespace XUnitTest.Security;
5 |
6 | public class Crc16Tests
7 | {
8 | [Fact]
9 | public void TestComputeWithByteArray()
10 | {
11 | var data = "123456789"u8.ToArray();
12 | var crc = Crc16.Compute(data);
13 | Assert.Equal(0x31C3, crc);
14 | }
15 |
16 | [Fact]
17 | public void TestComputeWithStream()
18 | {
19 | var data = "123456789"u8.ToArray();
20 | using var stream = new MemoryStream(data);
21 | var crc = Crc16.Compute(stream, -1);
22 | Assert.Equal(0x31C3, crc);
23 | }
24 |
25 | [Fact]
26 | public void TestComputeWithReadOnlySpan()
27 | {
28 | var data = "123456789"u8.ToArray();
29 | var crc = Crc16.Compute(new ReadOnlySpan(data));
30 | Assert.Equal(0x31C3, crc);
31 | }
32 |
33 | [Fact]
34 | public void TestComputeModbusWithByteArray()
35 | {
36 | var data = "123456789"u8.ToArray();
37 | var crc = Crc16.ComputeModbus(data, 0);
38 | Assert.Equal(0x4B37, crc);
39 | }
40 |
41 | [Fact]
42 | public void TestComputeModbusWithStream()
43 | {
44 | var data = "123456789"u8.ToArray();
45 | using var stream = new MemoryStream(data);
46 | var crc = Crc16.ComputeModbus(stream);
47 | Assert.Equal(0x4B37, crc);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Security/KeyBlobMagicNumber.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace XUnitTest.Security
7 | {
8 | enum KeyBlobMagicNumber
9 | {
10 | ECDH_PUBLIC_P256 = 0x314B4345,
11 | ECDH_PRIVATE_P256 = 0x324B4345,
12 | ECDH_PUBLIC_P384 = 0x334B4345,
13 | ECDH_PRIVATE_P384 = 0x344B4345,
14 | ECDH_PUBLIC_P521 = 0x354B4345,
15 | ECDH_PRIVATE_P521 = 0x364B4345,
16 | ECDH_PUBLIC_GENERIC = 0x504B4345,
17 | ECDH_PRIVATE_GENERIC = 0x564B4345,
18 | ECDSA_PUBLIC_P256 = 0x31534345,
19 | ECDSA_PRIVATE_P256 = 0x32534345,
20 | ECDSA_PUBLIC_P384 = 0x33534345,
21 | ECDSA_PRIVATE_P384 = 0x34534345,
22 | ECDSA_PUBLIC_P521 = 0x35534345,
23 | ECDSA_PRIVATE_P521 = 0x36534345,
24 | ECDSA_PUBLIC_GENERIC = 0x50444345,
25 | ECDSA_PRIVATE_GENERIC = 0x56444345,
26 | RSAPUBLIC = 0x31415352,
27 | RSAPRIVATE = 0x32415352,
28 | RSAFULLPRIVATE = 0x33415352,
29 | KEY_DATA_BLOB = 0x4D42444B
30 | }
31 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Security/RandTests.cs:
--------------------------------------------------------------------------------
1 | using NewLife.Data;
2 | using NewLife.Security;
3 | using Xunit;
4 |
5 | namespace XUnitTest.Security
6 | {
7 | public class RandTests
8 | {
9 | [Fact]
10 | public void Fill()
11 | {
12 | var area = new GeoArea();
13 | Rand.Fill(area);
14 |
15 | Assert.True(area.Code > 0);
16 | Assert.NotEmpty(area.Name);
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Serialization/FDLibBaseCfg.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Xml.Serialization;
7 |
8 | namespace XUnitTest.Serialization
9 | {
10 | public class FDLibBaseCfg
11 | {
12 | ///
13 | ///
14 | ///
15 | public string id { get; set; }
16 |
17 | ///
18 | ///
19 | ///
20 | public string FDID { get; set; }
21 |
22 | ///
23 | ///
24 | ///
25 | public string name { get; set; }
26 |
27 | ///
28 | ///
29 | ///
30 | public string faceLibType { get; set; }
31 |
32 | }
33 |
34 | [XmlRootAttribute("FDLibBaseCfgList", Namespace = "http://www.isapi.org/ver20/XMLSchema")]
35 | public class FDLibBaseCfgList
36 | {
37 |
38 | public string xmlns { get; set; }
39 | ///
40 | ///
41 | ///
42 | [XmlAttribute]
43 | public string version { get; set; }
44 |
45 | ///
46 | /// FDLibBaseCfg
47 | ///
48 | [XmlElement("FDLibBaseCfg")]
49 | public IList FDLibBaseCfgs { get; set; }
50 |
51 |
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Serialization/StarAgent.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | true
5 |
6 | 7F0F011A
7 |
8 | iyvV8YhOA5DfQuta
9 |
10 | udp://127.0.0.1:5500
11 |
12 | Release
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Web/TokenProviderTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Text;
4 | using NewLife;
5 | using NewLife.Security;
6 | using NewLife.Web;
7 | using Xunit;
8 |
9 | namespace XUnitTest.Web;
10 |
11 | public class TokenProviderTests
12 | {
13 | [Fact]
14 | public void Test()
15 | {
16 | var prv = new TokenProvider();
17 |
18 | // 加载或生成密钥
19 | var rs = prv.ReadKey("keys/test.prvkey", true);
20 | Assert.True(rs);
21 | Assert.True(File.Exists("keys/test.prvkey".GetFullPath()));
22 | Assert.True(File.Exists("keys/test.pubkey".GetFullPath()));
23 | Assert.NotEmpty(prv.Key);
24 |
25 | // 生成令牌
26 | var user = Rand.NextString(8);
27 | var time = DateTime.Now.AddHours(2);
28 | var token = prv.Encode(user, time);
29 |
30 | Assert.NotEmpty(token);
31 | var data = token.Substring(null, ".").ToBase64().ToStr();
32 | Assert.Equal($"{user},{time.ToUniversalTime().ToInt()}", data);
33 |
34 | // 解码令牌
35 | var prv2 = new TokenProvider();
36 | prv2.ReadKey("keys/test.pubkey", false);
37 | var rs2 = prv2.TryDecode(token, out var user2, out var time2);
38 |
39 | Assert.True(rs2);
40 | Assert.Equal(user, user2);
41 | Assert.Equal(time.Trim(), time2.Trim());
42 |
43 | // 破坏数据
44 | token = $"Stone,{time.ToUniversalTime().ToInt()}".GetBytes().ToUrlBase64() + "." + token.Substring(".");
45 | var rs3 = prv2.TryDecode(token, out var user3, out var time3);
46 |
47 | Assert.False(rs3);
48 | Assert.NotEqual(user, user3);
49 | Assert.Equal(time.Trim(), time3.Trim());
50 | }
51 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/Web/WebClientTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using NewLife;
5 | using NewLife.Web;
6 | using Xunit;
7 |
8 | namespace XUnitTest.Web;
9 |
10 | public class WebClientTests
11 | {
12 | [Fact]
13 | public void GetLinks()
14 | {
15 | var client = new WebClientX();
16 | var links = client.GetLinks("http://x.newlifex.com");
17 | Assert.NotEmpty(links);
18 |
19 | var names = "System.Data.SQLite.win-x64,System.Data.SQLite.win,System.Data.SQLite_net80,System.Data.SQLite_netstandard21,System.Data.SQLite_netstandard20,System.Data.SQLite".Split(",", ";");
20 |
21 | links = links.Where(e => e.Name.EqualIgnoreCase(names) || e.FullName.EqualIgnoreCase(names)).ToArray();
22 | var link = links.OrderByDescending(e => e.Version).ThenByDescending(e => e.Time).FirstOrDefault();
23 |
24 | Assert.NotNull(link);
25 | Assert.Equal("System.Data.SQLite.win-x64", link.Name);
26 | Assert.True(link.Time >= "2024-05-14".ToDateTime());
27 | Assert.Null(link.Version);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/XUnitTest.Core/Yun/BaiduMapTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using NewLife.Http;
7 | using NewLife.Yun;
8 | using Xunit;
9 | using NewLife;
10 | using System.Net.Http;
11 |
12 | namespace XUnitTest.Yun
13 | {
14 | public class BaiduMapTests
15 | {
16 | [Fact]
17 | public async void IpLocation()
18 | {
19 | var html = new HttpClient().GetString("http://myip.ipip.net");
20 | var ip = html?.Substring("IP:", " ");
21 | Assert.NotEmpty(ip);
22 |
23 | var map = new BaiduMap();
24 | var rs = await map.IpLocationAsync(ip);
25 |
26 | Assert.NotNull(rs);
27 |
28 | var addrs = (rs["full_address"] + "").Split('|');
29 | Assert.Equal(7, addrs.Length);
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/XUnitTest.Core/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Url": "https://newlifex.com/",
3 | "Title": "本地标题",
4 | "ConnectionStrings": {
5 | "MySQL.AppSettings": {
6 | "connectionString": /*中间注释*/ "Server=.;Port=3306;Database=mysql;Uid=MySQL.default;Pwd=;",
7 | "providerName": "MySql.Data.MySqlClient"
8 | // 不支持放在最后的注释,链接中的双斜杠被当成注释
9 | // 独立一行注释
10 | },
11 | "sqlserver": {
12 | "connectionString": "Server=127.0.0.1;Database=Membership;Uid=root;Pwd=root;",
13 | "providerName": "SqlServer"
14 | },
15 | "MySQL.AppSettings.default": {
16 | /*"connectionString": "Server=.;Port=3306;Database=mysql;Uid=MySQL.default;Pwd=;",*/
17 | /*"providerName": "MySql.Data.MySqlClient"*/
18 | },
19 | "TDengine": {
20 | "connectionString": "Server=gz01.newlifex.com;Port=6030;Database=db;user=root;password=taosdata",
21 | "providerName": "TDengine"
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/global.json:
--------------------------------------------------------------------------------
1 | {
2 | "sdk": {
3 | "version": "9.0.0",
4 | "rollForward": "latestMajor",
5 | "allowPrerelease": true
6 | }
7 | }
8 |
--------------------------------------------------------------------------------