Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: ensure async/await is used for dotNetRDF tests #290

Merged
merged 3 commits into from
Jan 31, 2025
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ namespace OSLC4Net.Core.DotNetRdfProviderTests;
public class RdfXmlMediaTypeFormatterTests
{
[Fact]
public void TestRdfXmlSerialization()
public async Task TestRdfXmlSerializationAsync()
{
var changeRequest1 = new ChangeRequest(new Uri("http://com/somewhere/changeReuest"));

Expand All @@ -36,20 +36,24 @@ public void TestRdfXmlSerialization()

var formatter = new RdfXmlMediaTypeFormatter();

var rdfXml = Serialize(formatter, changeRequest1, OslcMediaType.APPLICATION_RDF_XML_TYPE);
var rdfXml = await SerializeAsync(formatter, changeRequest1,
OslcMediaType.APPLICATION_RDF_XML_TYPE);

Debug.WriteLine(rdfXml);

var changeRequest2 = Deserialize<ChangeRequest>(formatter, rdfXml, OslcMediaType.APPLICATION_RDF_XML_TYPE);
var changeRequest2 =
await DeserializeAsync<ChangeRequest>(formatter, rdfXml,
OslcMediaType.APPLICATION_RDF_XML_TYPE);

Assert.NotNull(changeRequest2);
Assert.Equal(changeRequest1.GetAbout(), changeRequest2.GetAbout());
Assert.Equal(changeRequest1.IsFixed(), changeRequest2.IsFixed());
Assert.Equal(changeRequest1.GetAffectedByDefects()[0].GetValue(), changeRequest2.GetAffectedByDefects()[0].GetValue());
Assert.Equal(changeRequest1.GetAffectedByDefects()[0].GetLabel(), changeRequest2.GetAffectedByDefects()[0].GetLabel());
}

[Fact]
public void TestRdfXmlCollectionSerialization()
public async Task TestRdfXmlCollectionSerializationAsync()
{
var crListOut = new List<ChangeRequest>();
var changeRequest1 = new ChangeRequest(new Uri("http://com/somewhere/changeRequest1"));
Expand All @@ -73,11 +77,16 @@ public void TestRdfXmlCollectionSerialization()
// TODO: fix overload confusion with one arg
var formatter = new RdfXmlMediaTypeFormatter(rdfGraph, true);

var rdfXml = SerializeCollection(formatter, crListOut, OslcMediaType.APPLICATION_RDF_XML_TYPE);
var rdfXml =
await SerializeCollectionAsync(formatter, crListOut,
OslcMediaType.APPLICATION_RDF_XML_TYPE);

Debug.WriteLine(rdfXml);

var crListIn = DeserializeCollection<ChangeRequest>(formatter, rdfXml, OslcMediaType.APPLICATION_RDF_XML_TYPE).ToList();
var crListIn =
(await DeserializeCollectionAsync<ChangeRequest>(formatter, rdfXml,
OslcMediaType.APPLICATION_RDF_XML_TYPE) ?? throw new InvalidOperationException())
.ToList();
Assert.Equal(crListOut.Count, crListIn.Count);

//No guarantees of order in a collection, use the "about" attribute to identify individual ChangeRequests
Expand Down Expand Up @@ -106,7 +115,7 @@ public void TestRdfXmlCollectionSerialization()
}

[Fact]
public void TestXmlSerialization()
public async Task TestXmlSerializationAsync()
{
var changeRequest1 = new ChangeRequest(new Uri("http://com/somewhere/changeReuest"));

Expand All @@ -115,20 +124,24 @@ public void TestXmlSerialization()

var formatter = new RdfXmlMediaTypeFormatter();

var rdfXml = Serialize(formatter, changeRequest1, OslcMediaType.APPLICATION_XML_TYPE);
var rdfXml =
await SerializeAsync(formatter, changeRequest1, OslcMediaType.APPLICATION_XML_TYPE);

Debug.WriteLine(rdfXml);

var changeRequest2 = Deserialize<ChangeRequest>(formatter, rdfXml, OslcMediaType.APPLICATION_XML_TYPE);
var changeRequest2 =
await DeserializeAsync<ChangeRequest>(formatter, rdfXml,
OslcMediaType.APPLICATION_XML_TYPE);

Assert.NotNull(changeRequest2);
Assert.Equal(changeRequest1.GetAbout(), changeRequest2.GetAbout());
Assert.Equal(changeRequest1.IsFixed(), changeRequest2.IsFixed());
Assert.Equal(changeRequest1.GetAffectedByDefects()[0].GetValue(), changeRequest2.GetAffectedByDefects()[0].GetValue());
Assert.Equal(changeRequest1.GetAffectedByDefects()[0].GetLabel(), changeRequest2.GetAffectedByDefects()[0].GetLabel());
}

[Fact]
public void TestTurtleSerialization()
public async Task TestTurtleSerializationAsync()
{
var changeRequest1 = new ChangeRequest(new Uri("http://com/somewhere/changeReuest"));

Expand All @@ -137,73 +150,83 @@ public void TestTurtleSerialization()

var formatter = new RdfXmlMediaTypeFormatter();

var turtle = Serialize(formatter, changeRequest1, OslcMediaType.TEXT_TURTLE_TYPE);
var turtle =
await SerializeAsync(formatter, changeRequest1, OslcMediaType.TEXT_TURTLE_TYPE);

Debug.WriteLine(turtle);

var changeRequest2 = Deserialize<ChangeRequest>(formatter, turtle, OslcMediaType.TEXT_TURTLE_TYPE);
var changeRequest2 =
await DeserializeAsync<ChangeRequest>(formatter, turtle,
OslcMediaType.TEXT_TURTLE_TYPE);

Assert.NotNull(changeRequest2);
Assert.Equal(changeRequest1.GetAbout(), changeRequest2.GetAbout());
Assert.Equal(changeRequest1.IsFixed(), changeRequest2.IsFixed());
Assert.Equal(changeRequest1.GetAffectedByDefects()[0].GetValue(), changeRequest2.GetAffectedByDefects()[0].GetValue());
Assert.Equal(changeRequest1.GetAffectedByDefects()[0].GetLabel(), changeRequest2.GetAffectedByDefects()[0].GetLabel());
}

private static string Serialize<T>(MediaTypeFormatter formatter, T value, MediaTypeHeaderValue mediaType)
private static async Task<string> SerializeAsync<T>(MediaTypeFormatter formatter, T value,
MediaTypeHeaderValue mediaType)
{
Stream stream = new MemoryStream();
HttpContent content = new StreamContent(stream);
await using Stream stream = new MemoryStream();
using HttpContent content = new StreamContent(stream);

content.Headers.ContentType = mediaType;

formatter.WriteToStreamAsync(typeof(T), value, stream, content, null).Wait();
await formatter.WriteToStreamAsync(typeof(T), value, stream, content, null);
stream.Position = 0;

return content.ReadAsStringAsync().Result;
return await content.ReadAsStringAsync();
}

private static string SerializeCollection<T>(MediaTypeFormatter formatter, IEnumerable<T> value, MediaTypeHeaderValue mediaType)
private static async Task<string> SerializeCollectionAsync<T>(MediaTypeFormatter formatter,
IEnumerable<T> value, MediaTypeHeaderValue mediaType)
{
Stream stream = new MemoryStream();
HttpContent content = new StreamContent(stream);
await using Stream stream = new MemoryStream();
using HttpContent content = new StreamContent(stream);

content.Headers.ContentType = mediaType;

formatter.WriteToStreamAsync(typeof(T), value, stream, content, null).Wait();
await formatter.WriteToStreamAsync(typeof(T), value, stream, content, null);
stream.Position = 0;

return content.ReadAsStringAsync().Result;
return await content.ReadAsStringAsync();
}

private static T Deserialize<T>(MediaTypeFormatter formatter, string str, MediaTypeHeaderValue mediaType) where T : class
private static async Task<T?> DeserializeAsync<T>(MediaTypeFormatter formatter, string str,
MediaTypeHeaderValue mediaType) where T : class
{
Stream stream = new MemoryStream();
var writer = new StreamWriter(stream);
HttpContent content = new StreamContent(stream);
await using Stream stream = new MemoryStream();
await using var writer = new StreamWriter(stream);
using HttpContent content = new StreamContent(stream);

content.Headers.ContentType = mediaType;

writer.Write(str);
writer.Flush();
await writer.WriteAsync(str);
await writer.FlushAsync();

stream.Position = 0;

return formatter.ReadFromStreamAsync(typeof(T), stream, content, null).Result as T;
return await formatter.ReadFromStreamAsync(typeof(T), stream, content, null) as T;
}

private static IEnumerable<T> DeserializeCollection<T>(MediaTypeFormatter formatter, string str, MediaTypeHeaderValue mediaType) where T : class
private static async Task<IEnumerable<T>?> DeserializeCollectionAsync<T>(
MediaTypeFormatter formatter,
string str, MediaTypeHeaderValue mediaType) where T : class
{
Stream stream = new MemoryStream();
var writer = new StreamWriter(stream);
HttpContent content = new StreamContent(stream);
await using Stream stream = new MemoryStream();
await using var writer = new StreamWriter(stream);
using HttpContent content = new StreamContent(stream);

content.Headers.ContentType = mediaType;

writer.Write(str);
writer.Flush();
await writer.WriteAsync(str);
await writer.FlushAsync();

stream.Position = 0;

return formatter.ReadFromStreamAsync(typeof(List<T>), stream, content, null).Result as IEnumerable<T>;
return await formatter.ReadFromStreamAsync(typeof(List<T>), stream, content, null) as
IEnumerable<T>;
}
}
Loading