diff --git a/src/DataTables.GeneratorCore/TreeTableTemplate.cs b/src/DataTables.GeneratorCore/TreeTableTemplate.cs index 874bebd..05bd713 100644 --- a/src/DataTables.GeneratorCore/TreeTableTemplate.cs +++ b/src/DataTables.GeneratorCore/TreeTableTemplate.cs @@ -29,13 +29,11 @@ public override string TransformText() GenerationEnvironment.Clear(); var text = base.TransformText(); GenerationEnvironment.Clear(); - var marker = " #endregion" + Environment.NewLine + "}"; var insert = BuildTreeApi(); - var idx = text.IndexOf(marker, StringComparison.Ordinal); - if (idx < 0 && Environment.NewLine != "\n") + var idx = text.IndexOf(" #endregion\r\n}", StringComparison.Ordinal); + if (idx < 0) { - marker = " #endregion\n}"; - idx = text.IndexOf(marker, StringComparison.Ordinal); + idx = text.IndexOf(" #endregion\n}", StringComparison.Ordinal); } Write(idx < 0 ? text : text.Insert(idx, insert)); diff --git a/src/DataTables.GeneratorCore/TreeTableTemplate.tt b/src/DataTables.GeneratorCore/TreeTableTemplate.tt index 6cdcb56..6bb55f3 100644 --- a/src/DataTables.GeneratorCore/TreeTableTemplate.tt +++ b/src/DataTables.GeneratorCore/TreeTableTemplate.tt @@ -8,13 +8,11 @@ GenerationEnvironment.Clear(); var text = base.TransformText(); GenerationEnvironment.Clear(); - var marker = " #endregion" + Environment.NewLine + "}"; var insert = BuildTreeApi(); - var idx = text.IndexOf(marker, StringComparison.Ordinal); - if (idx < 0 && Environment.NewLine != "\n") + var idx = text.IndexOf(" #endregion\r\n}", StringComparison.Ordinal); + if (idx < 0) { - marker = " #endregion\n}"; - idx = text.IndexOf(marker, StringComparison.Ordinal); + idx = text.IndexOf(" #endregion\n}", StringComparison.Ordinal); } Write(idx < 0 ? text : text.Insert(idx, insert)); #><# diff --git a/src/DataTables.Unity/Assets/Tests/StreamingAssetsDataSourceTests.cs b/src/DataTables.Unity/Assets/Tests/StreamingAssetsDataSourceTests.cs index 83a8144..58c90ec 100644 --- a/src/DataTables.Unity/Assets/Tests/StreamingAssetsDataSourceTests.cs +++ b/src/DataTables.Unity/Assets/Tests/StreamingAssetsDataSourceTests.cs @@ -34,14 +34,11 @@ public async Task PackagedManifest_CompletesThroughStreamingAssetsTransport() } [Test] - public void MissingResource_MapsToStructuredDataSourceException() + public async Task MissingResource_MapsToStructuredDataSourceException() { var source = new StreamingAssetsDataSource(AppendPath(Application.streamingAssetsPath, "DataTablesTests")); - var exception = Assert.ThrowsAsync(async () => - { - await source.OpenReadAsync("Missing", CancellationToken.None); - }); + var exception = await ThrowsAsync(() => source.OpenReadAsync("Missing", CancellationToken.None).AsTask()); Assert.That(exception.SourceType, Is.EqualTo(DataSourceType.StreamingAssets)); Assert.That(exception.Operation, Is.EqualTo(DataSourceOperation.OpenRead)); @@ -51,17 +48,36 @@ public void MissingResource_MapsToStructuredDataSourceException() #if UNITY_ANDROID || UNITY_WEBGL [Test] - public void InFlightRequestCancellation_AbortsAndRemainsOperationCanceledException() + public async Task InFlightRequestCancellation_AbortsAndRemainsOperationCanceledException() { using var cancellation = new CancellationTokenSource(TimeSpan.FromSeconds(5)); var source = new StreamingAssetsDataSource("https://example.invalid/datatables-tests"); Task pending = source.OpenReadAsync("Never", cancellation.Token).AsTask(); cancellation.Cancel(); - Assert.ThrowsAsync(async () => await pending); + await ThrowsAsync(() => pending); } #endif + private static async Task ThrowsAsync(Func action) + where TException : Exception + { + try + { + await action(); + } + catch (TException exception) + { + return exception; + } + catch (Exception exception) + { + throw new AssertionException($"Expected {typeof(TException).Name} but caught {exception.GetType().Name}."); + } + + throw new AssertionException($"Expected {typeof(TException).Name} to be thrown."); + } + private static string AppendPath(string root, string segment) => root.Replace('\\', '/').TrimEnd('/') + "/" + Uri.EscapeDataString(segment); }