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