From be5281aa5fba3cac9ce49a113ec731d892853c84 Mon Sep 17 00:00:00 2001 From: Leonhard Seidel Date: Thu, 21 Sep 2023 20:20:28 +0200 Subject: [PATCH 1/3] added an overload to pass a cancellationtoken into the async calls inside --- .../LibreTranslate.Net.Test1.cs | 45 +++++++++++++++++-- LibreTranslate.Net/LibreTranslate.cs | 16 ++++++- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs b/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs index f216c3f..6103e0a 100644 --- a/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs +++ b/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs @@ -1,4 +1,6 @@ using NUnit.Framework; +using System.Threading; +using System.Threading.Tasks; namespace LibreTranslate.Net.Tests { @@ -12,18 +14,18 @@ public void Setup() [Test] public void Test1() { - var libreTranslate = new LibreTranslate(); + var libreTranslate = new LibreTranslate("https://translate.rinderha.cc"); var englishText = "Hello World!"; var TranslateAsyncTask = libreTranslate.TranslateAsync(new Translate() { - ApiKey = "MySecretApiKey", + ApiKey = "", Source = LanguageCode.English, Target = LanguageCode.Spanish, Text = englishText }); - System.Threading.Tasks.Task.Run(() => TranslateAsyncTask).Wait(); + Task.Run(() => TranslateAsyncTask).Wait(); var spanishText = TranslateAsyncTask.Result; - Assert.AreEqual(spanishText, "¡Hola Mundo!"); + Assert.AreEqual("¡Hola Mundo!", spanishText); //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.En)); //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.Ar)); @@ -36,5 +38,40 @@ public void Test1() //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.Es)); //assumes server has all languages available! } + + [Test] + public void Test2() + { + var libreTranslate = new LibreTranslate("https://translate.rinderha.cc"); + var englishText = "Hello World!"; + var tokenSource = new CancellationTokenSource(); + Task.Run(() => InnerTestAsyncDecouple()); + Thread.Sleep(200); + tokenSource.Cancel(); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.En)); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.Ar)); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.Zh)); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.Fr)); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.De)); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.It)); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.Pt)); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.Ru)); + //Assert.True(translate.SupportedLanguages().Contains(LanguageCode.Es)); + //assumes server has all languages available! + + async void InnerTestAsyncDecouple() + { + var TranslateAsyncTask = libreTranslate.TranslateAsync(new Translate() + { + ApiKey = "", + Source = LanguageCode.English, + Target = LanguageCode.Spanish, + Text = englishText + }, + tokenSource.Token); + _ = await TranslateAsyncTask; + Assert.AreEqual(TaskStatus.Canceled, TranslateAsyncTask.Status); + } + } } } \ No newline at end of file diff --git a/LibreTranslate.Net/LibreTranslate.cs b/LibreTranslate.Net/LibreTranslate.cs index 91fd108..fd01b83 100644 --- a/LibreTranslate.Net/LibreTranslate.cs +++ b/LibreTranslate.Net/LibreTranslate.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; using Newtonsoft.Json; namespace LibreTranslate.Net @@ -47,7 +48,15 @@ public async Task> GetSupportedLanguagesAsync() /// /// /// - public async Task TranslateAsync(Translate translate) + public async Task TranslateAsync(Translate translate) => await TranslateAsync(translate, CancellationToken.None); + /// + /// Translates the text from one language to another. Can be cancelled by providing CancellationToken. + /// + /// + /// + /// + /// + public async Task TranslateAsync(Translate translate, CancellationToken cancellationToken) { var formUrlEncodedContent = new FormUrlEncodedContent(new Dictionary() { @@ -59,12 +68,15 @@ public async Task TranslateAsync(Translate translate) var response = await HttpClient.SendAsync(new HttpRequestMessage(HttpMethod.Post, "/translate") { Content = formUrlEncodedContent - }); + }, + cancellationToken); if (response.IsSuccessStatusCode) { var translatedText = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); + cancellationToken.ThrowIfCancellationRequested(); return translatedText.TranslatedText; } + cancellationToken.ThrowIfCancellationRequested(); return default; } } From 6864f7d2a26fad662480b46400a137cdcc653f2c Mon Sep 17 00:00:00 2001 From: Leonhard Seidel Date: Thu, 21 Sep 2023 20:23:25 +0200 Subject: [PATCH 2/3] Update LibreTranslate.Net.Test1.cs forgot to remove my instance xD --- LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs b/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs index 6103e0a..f164f9f 100644 --- a/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs +++ b/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs @@ -14,7 +14,7 @@ public void Setup() [Test] public void Test1() { - var libreTranslate = new LibreTranslate("https://translate.rinderha.cc"); + var libreTranslate = new LibreTranslate(); var englishText = "Hello World!"; var TranslateAsyncTask = libreTranslate.TranslateAsync(new Translate() { @@ -74,4 +74,4 @@ async void InnerTestAsyncDecouple() } } } -} \ No newline at end of file +} From fae1d1546d18acf389d87e67c2d15466d37fc5d4 Mon Sep 17 00:00:00 2001 From: Leonhard Seidel Date: Thu, 21 Sep 2023 20:24:09 +0200 Subject: [PATCH 3/3] Update LibreTranslate.Net.Test1.cs fumbled, forgot to remove the other one form the tests --- LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs b/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs index f164f9f..1c5b38d 100644 --- a/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs +++ b/LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs @@ -42,7 +42,7 @@ public void Test1() [Test] public void Test2() { - var libreTranslate = new LibreTranslate("https://translate.rinderha.cc"); + var libreTranslate = new LibreTranslate(); var englishText = "Hello World!"; var tokenSource = new CancellationTokenSource(); Task.Run(() => InnerTestAsyncDecouple());