diff --git a/Assets/Editor/Test/MinimalTest.cs b/Assets/Editor/Test/MinimalTest.cs new file mode 100644 index 0000000..814cfa5 --- /dev/null +++ b/Assets/Editor/Test/MinimalTest.cs @@ -0,0 +1,89 @@ +using System.Collections; +using System.Net.Http; +using NUnit.Framework; +using UnityEngine.TestTools; + +namespace MinimalUtility.Test +{ + using WebRequest; + using TestUtils = MinimalUtility.Editor.TestUtils; + + public class MinimalTest + { + [UnityTest, Order(0), Timeout(300000)] + public IEnumerator WebRequestTest() + { +#if ENABLE_UNITASK + return Cysharp.Threading.Tasks.UniTask.ToCoroutine(async () => + { + const string uri = "https://httpbin.org/post"; + + using var client = new HttpClient(new UnityWebRequestHttpMessageHandler()); + using var request = new HttpRequestMessage(HttpMethod.Post, uri) + { + Content = new ByteArrayContent(new byte[] {1, 2, 3, 4, 5}) + { + Headers = + { + ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json") + } + } + }; + using var response = await client.SendAsync(request); + await TestContext.Out.WriteLineAsync(await response.Content.ReadAsStringAsync()); + }); +#else + yield break; +#endif + } + + + [UnityTest, Order(1), Timeout(300000)] + public IEnumerator UniTaskPackageRemoveTest() + { + yield return PackageRemoveTest("com.cysharp.unitask"); + Assert.Pass(); + } + + [UnityTest, Order(2), Timeout(300000)] + public IEnumerator R3PackageRemoveTest() + { + yield return PackageRemoveTest("com.cysharp.r3"); + Assert.Pass(); + } + + [UnityTest, Order(3), Timeout(300000)] + public IEnumerator VContainerPackageRemoveTest() + { + yield return PackageRemoveTest("jp.hadashikick.vcontainer"); + Assert.Pass(); + } + + [UnityTest, Order(4), Timeout(300000)] + public IEnumerator UGUIPackageRemoveTest() + { + yield return PackageRemoveTest("com.unity.ugui"); + Assert.Pass(); + } + + [Test, Order(5)] + public void CompileCheckTest() + { + var result = TestUtils.SuccessCompile(UnityEditor.BuildTarget.StandaloneOSX); + Assert.IsTrue(result); + } + + private static IEnumerator PackageRemoveTest(string packageName) + { + var request = UnityEditor.PackageManager.Client.Remove(packageName); + while (!request.IsCompleted) + { + yield return null; + } + if (request.Status != UnityEditor.PackageManager.StatusCode.Success) + { + throw new System.Exception("Failed to remove package: " + packageName); + } + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Test/MinimalTest.cs.meta b/Assets/Editor/Test/MinimalTest.cs.meta new file mode 100644 index 0000000..0cad045 --- /dev/null +++ b/Assets/Editor/Test/MinimalTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b431b79de9964ef482748dfe75e5d1da +timeCreated: 1735706894 \ No newline at end of file diff --git a/Assets/Editor/Test/MinimalUtility.Test.asmdef b/Assets/Editor/Test/MinimalUtility.Test.asmdef index ad8a874..e968830 100644 --- a/Assets/Editor/Test/MinimalUtility.Test.asmdef +++ b/Assets/Editor/Test/MinimalUtility.Test.asmdef @@ -4,7 +4,9 @@ "references": [ "GUID:27619889b8ba8c24980f49ee34dbb44a", "GUID:0acc523941302664db1f4e527237feb3", - "GUID:bf0b7d05fd3af8e4aa4966bcda55ac92" + "GUID:2294a65d721f9974ca66d13b434e6b7b", + "GUID:bf0b7d05fd3af8e4aa4966bcda55ac92", + "GUID:f51ebe6a0ceec4240a699833d6309b23" ], "includePlatforms": [ "Editor" @@ -17,6 +19,12 @@ ], "autoReferenced": false, "defineConstraints": [], - "versionDefines": [], + "versionDefines": [ + { + "name": "com.cysharp.unitask", + "expression": "", + "define": "ENABLE_UNITASK" + } + ], "noEngineReferences": false } \ No newline at end of file diff --git a/Assets/Editor/Test/PackageTest.cs b/Assets/Editor/Test/PackageTest.cs deleted file mode 100644 index 8900a72..0000000 --- a/Assets/Editor/Test/PackageTest.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System.Collections; -using NUnit.Framework; -using UnityEngine.TestTools; - -namespace Editor.Test -{ - public abstract class PackageTestBase - { - protected abstract string packageName { get; } - - public virtual IEnumerator PackageRemoveTest() - { - var request = UnityEditor.PackageManager.Client.Remove(packageName); - while (!request.IsCompleted) - { - yield return null; - } - Assert.IsTrue(request.Status == UnityEditor.PackageManager.StatusCode.Success); - } - - public virtual void CompileCheckTest() - { - var result = MinimalUtility.Editor.TestUtils.SuccessCompile(UnityEditor.BuildTarget.StandaloneOSX); - Assert.IsTrue(result); - } - } - - public class UniTaskPackageTest : PackageTestBase - { - protected override string packageName => "com.cysharp.unitask"; - - [UnityTest, Order(0), Timeout(300000)] - public override IEnumerator PackageRemoveTest() - { - return base.PackageRemoveTest(); - } - - [Test, Order(1)] - public override void CompileCheckTest() - { - base.CompileCheckTest(); - } - } - - public class R3PackageTest : PackageTestBase - { - protected override string packageName => "com.cysharp.r3"; - - [UnityTest, Order(0), Timeout(300000)] - public override IEnumerator PackageRemoveTest() - { - return base.PackageRemoveTest(); - } - - [Test, Order(1)] - public override void CompileCheckTest() - { - base.CompileCheckTest(); - } - } - - public class VContainerPackageTest : PackageTestBase - { - protected override string packageName => "jp.hadashikick.vcontainer"; - - [UnityTest, Order(0), Timeout(300000)] - public override IEnumerator PackageRemoveTest() - { - return base.PackageRemoveTest(); - } - - [Test, Order(1)] - public override void CompileCheckTest() - { - base.CompileCheckTest(); - } - } - - public class UGUIPackageTest : PackageTestBase - { - protected override string packageName => "com.unity.ugui"; - - [UnityTest, Order(0), Timeout(300000)] - public override IEnumerator PackageRemoveTest() - { - return base.PackageRemoveTest(); - } - - [Test, Order(1)] - public override void CompileCheckTest() - { - base.CompileCheckTest(); - } - } - - public class TMPPackageTest : PackageTestBase - { - protected override string packageName => "com.unity.textmeshpro"; - - [UnityTest, Order(0), Timeout(300000)] - public override IEnumerator PackageRemoveTest() - { - return base.PackageRemoveTest(); - } - - [Test, Order(1)] - public override void CompileCheckTest() - { - base.CompileCheckTest(); - } - } -} \ No newline at end of file diff --git a/Assets/Editor/Test/PackageTest.cs.meta b/Assets/Editor/Test/PackageTest.cs.meta deleted file mode 100644 index bbcf5c4..0000000 --- a/Assets/Editor/Test/PackageTest.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5e68a77a01314260be75c3cc5971ebcf -timeCreated: 1735582506 \ No newline at end of file diff --git a/Documentation/docs/toc.yml b/Documentation/docs/toc.yml index 8018e48..d80e8da 100644 --- a/Documentation/docs/toc.yml +++ b/Documentation/docs/toc.yml @@ -46,8 +46,6 @@ - name: 実装Tips(他ライブラリ拡張) - name: uGUI拡張 href: ugui-extensions.md -- name: UniTask拡張 - href: unitask-extensions.md - name: R3拡張 href: r3-extensions.md - name: VContainer拡張 diff --git a/Documentation/docs/unitask-extensions.md b/Documentation/docs/unitask-extensions.md deleted file mode 100644 index cb13a8c..0000000 --- a/Documentation/docs/unitask-extensions.md +++ /dev/null @@ -1,2 +0,0 @@ -# UniTask拡張 -WaitForEndFrameSafeだが、これは削除を検討中 \ No newline at end of file diff --git a/Packages/MinimalUtility/Runtime/StringUtils.Join.cs b/Packages/MinimalUtility/Runtime/StringUtils.Join.cs index de01435..7435d42 100644 --- a/Packages/MinimalUtility/Runtime/StringUtils.Join.cs +++ b/Packages/MinimalUtility/Runtime/StringUtils.Join.cs @@ -1,7 +1,6 @@ #nullable enable using System; -using System.Buffers; using System.Collections.Generic; using System.Runtime.CompilerServices; @@ -30,14 +29,7 @@ public static partial class StringUtils /// 連結された文字列. /// がnullの場合にスローされます. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static string Join(in char separator, IEnumerable values) - { - var separatorArray = ArrayPool.Shared.Rent(1); - separatorArray[0] = separator; - var result = Join(new ReadOnlySpan(separatorArray), values); - ArrayPool.Shared.Return(separatorArray); - return result; - } + public static string Join(in char separator, IEnumerable values) => Join(stackalloc char[]{ separator }, values); /// /// 内部でを使用したstring.Join. diff --git a/Packages/MinimalUtility/Runtime/Tasks.meta b/Packages/MinimalUtility/Runtime/Tasks.meta deleted file mode 100644 index 4070c2e..0000000 --- a/Packages/MinimalUtility/Runtime/Tasks.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 252eb46d6544447ab6996325ad27068e -timeCreated: 1721553051 \ No newline at end of file diff --git a/Packages/MinimalUtility/Runtime/Tasks/UniTaskExtensions.cs b/Packages/MinimalUtility/Runtime/Tasks/UniTaskExtensions.cs deleted file mode 100644 index 4444427..0000000 --- a/Packages/MinimalUtility/Runtime/Tasks/UniTaskExtensions.cs +++ /dev/null @@ -1,56 +0,0 @@ -#if ENABLE_UNITASK -#nullable enable - -using System.Runtime.CompilerServices; -using System.Threading; -using Cysharp.Threading.Tasks; -using UnityEngine; - -namespace MinimalUtility.Tasks -{ - /// - /// の拡張メソッド. - /// - public static class UniTaskExtensions - { - /// - /// は内部にコルーチンを含む. - /// そのためコルーチンの駆動元であるが非表示になるとエラーが発生する. - /// それを回避したうえで安全にフレーム終わりまで待機する. - /// - /// コルーチン駆動の基盤となる. - /// 即座にキャンセルするかどうか. - /// フレーム終わりまで待機する. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async UniTask WaitForEndFrameSafe(this MonoBehaviour monoBehaviour, bool cancelImmediately = false) - { - await UniTask.WaitUntil( - monoBehaviour, - static m => m.isActiveAndEnabled, - cancellationToken: monoBehaviour.destroyCancellationToken, - cancelImmediately: cancelImmediately); - await UniTask.WaitForEndOfFrame(monoBehaviour, monoBehaviour.destroyCancellationToken, cancelImmediately); - } - - /// - /// は内部にコルーチンを含む. - /// そのためコルーチンの駆動元であるが非表示になるとエラーが発生する. - /// それを回避したうえで安全にフレーム終わりまで待機する. - /// - /// コルーチン駆動の基盤となる. - /// キャンセルトークン. - /// 即座にキャンセルするかどうか. - /// フレーム終わりまで待機する. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async UniTask WaitForEndFrameSafe(this MonoBehaviour monoBehaviour, CancellationToken cancellationToken, bool cancelImmediately = false) - { - await UniTask.WaitUntil( - monoBehaviour, - static m => m.isActiveAndEnabled, - cancellationToken: cancellationToken, - cancelImmediately: cancelImmediately); - await UniTask.WaitForEndOfFrame(monoBehaviour, cancellationToken, cancelImmediately); - } - } -} -#endif \ No newline at end of file diff --git a/Packages/MinimalUtility/Runtime/Tasks/UniTaskExtensions.cs.meta b/Packages/MinimalUtility/Runtime/Tasks/UniTaskExtensions.cs.meta deleted file mode 100644 index 5fa8e51..0000000 --- a/Packages/MinimalUtility/Runtime/Tasks/UniTaskExtensions.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5cc50413e3c44a06abd3bc67bdf9eb52 -timeCreated: 1723733324 \ No newline at end of file diff --git a/Packages/MinimalUtility/Runtime/WebRequest/NativeArrayContent.cs b/Packages/MinimalUtility/Runtime/WebRequest/NativeArrayContent.cs new file mode 100644 index 0000000..c365c07 --- /dev/null +++ b/Packages/MinimalUtility/Runtime/WebRequest/NativeArrayContent.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using Unity.Collections; + +namespace MinimalUtility.WebRequest +{ + /// + /// を基盤とする. + /// + public sealed class NativeArrayContent : HttpContent + { + private readonly NativeArray.ReadOnly _data; + private readonly IDisposable _handler; + + public NativeArrayContent(NativeArray.ReadOnly data, IDisposable handler) + { + _data = data; + _handler = handler; + } + + protected override Task SerializeToStreamAsync(Stream stream, TransportContext _) + { + stream.Write(_data.AsReadOnlySpan()); + return Task.CompletedTask; + } + + protected override bool TryComputeLength(out long length) + { + length = _data.Length; + return true; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + _handler.Dispose(); + } + base.Dispose(disposing); + } + } +} \ No newline at end of file diff --git a/Packages/MinimalUtility/Runtime/WebRequest/NativeArrayContent.cs.meta b/Packages/MinimalUtility/Runtime/WebRequest/NativeArrayContent.cs.meta new file mode 100644 index 0000000..e816f1e --- /dev/null +++ b/Packages/MinimalUtility/Runtime/WebRequest/NativeArrayContent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 407a29dc55624c12958476b8e477b2cb +timeCreated: 1735705633 \ No newline at end of file diff --git a/Packages/MinimalUtility/Runtime/WebRequest/UnityWebRequestHttpMessageHandler.cs b/Packages/MinimalUtility/Runtime/WebRequest/UnityWebRequestHttpMessageHandler.cs index eb6e882..3b02e48 100644 --- a/Packages/MinimalUtility/Runtime/WebRequest/UnityWebRequestHttpMessageHandler.cs +++ b/Packages/MinimalUtility/Runtime/WebRequest/UnityWebRequestHttpMessageHandler.cs @@ -1,13 +1,11 @@ #if ENABLE_WEBREQUEST && ENABLE_UNITASK #nullable enable -using System.IO; using System.Net; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Cysharp.Threading.Tasks; -using Unity.Collections; using UnityEngine.Networking; namespace MinimalUtility.WebRequest @@ -22,11 +20,11 @@ public sealed class UnityWebRequestHttpMessageHandler : HttpMessageHandler protected override async Task SendAsync(HttpRequestMessage requestMessage, CancellationToken cancellationToken) { var data = requestMessage.Content == null ? null : await requestMessage.Content.ReadAsByteArrayAsync(); - using var uploadHandler = new UploadHandlerRaw(data); + var uploadHandler = new UploadHandlerRaw(data); uploadHandler.contentType = requestMessage.Headers.Accept.ToString(); - using var downloadHandler = new DownloadHandlerBuffer(); - using var webRequest = new UnityWebRequest(requestMessage.RequestUri, requestMessage.Method.ToString(), downloadHandler, uploadHandler); + var downloadHandler = new DownloadHandlerBuffer(); + var webRequest = new UnityWebRequest(requestMessage.RequestUri, requestMessage.Method.ToString(), downloadHandler, uploadHandler); foreach (var (key, values) in requestMessage.Headers) { @@ -38,7 +36,7 @@ protected override async Task SendAsync(HttpRequestMessage var response = new HttpResponseMessage((HttpStatusCode)webRequest.responseCode) { RequestMessage = requestMessage, - Content = new NativeArrayContent(downloadHandler.nativeData), + Content = new NativeArrayContent(downloadHandler.nativeData, webRequest), Version = HttpVersion.Version10 }; @@ -51,30 +49,5 @@ protected override async Task SendAsync(HttpRequestMessage return response; } } - - /// - /// を基盤とする. - /// - public sealed class NativeArrayContent : HttpContent - { - private readonly NativeArray.ReadOnly _data; - - public NativeArrayContent(NativeArray.ReadOnly data) - { - _data = data; - } - - protected override Task SerializeToStreamAsync(Stream stream, TransportContext _) - { - stream.Write(_data.AsReadOnlySpan()); - return Task.CompletedTask; - } - - protected override bool TryComputeLength(out long length) - { - length = _data.Length; - return true; - } - } } #endif \ No newline at end of file