Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 41 additions & 4 deletions LibreTranslate.Net.Tests/LibreTranslate.Net.Test1.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using NUnit.Framework;
using System.Threading;
using System.Threading.Tasks;

namespace LibreTranslate.Net.Tests
{
Expand All @@ -16,14 +18,14 @@ public void Test1()
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));
Expand All @@ -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();
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);
}
}
}
}
}
16 changes: 14 additions & 2 deletions LibreTranslate.Net/LibreTranslate.cs
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -47,7 +48,15 @@ public async Task<IEnumerable<SupportedLanguages>> GetSupportedLanguagesAsync()
/// <param name="toLang"></param>
/// <param name="text"></param>
/// <returns></returns>
public async Task<string> TranslateAsync(Translate translate)
public async Task<string> TranslateAsync(Translate translate) => await TranslateAsync(translate, CancellationToken.None);
/// <summary>
/// Translates the text from one language to another. Can be cancelled by providing CancellationToken.
/// </summary>
/// <param name="fromLang"></param>
/// <param name="toLang"></param>
/// <param name="text"></param>
/// <returns></returns>
public async Task<string> TranslateAsync(Translate translate, CancellationToken cancellationToken)
{
var formUrlEncodedContent = new FormUrlEncodedContent(new Dictionary<string, string>()
{
Expand All @@ -59,12 +68,15 @@ public async Task<string> TranslateAsync(Translate translate)
var response = await HttpClient.SendAsync(new HttpRequestMessage(HttpMethod.Post, "/translate")
{
Content = formUrlEncodedContent
});
},
cancellationToken);
if (response.IsSuccessStatusCode)
{
var translatedText = JsonConvert.DeserializeObject<TranslationResponse>(await response.Content.ReadAsStringAsync());
cancellationToken.ThrowIfCancellationRequested();
return translatedText.TranslatedText;
}
cancellationToken.ThrowIfCancellationRequested();
return default;
}
}
Expand Down