From 303f9456bdc59afcba27a9d5c4f4ac75d5f1e9ae Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Sun, 16 Nov 2025 00:16:06 +0100 Subject: [PATCH 1/7] test: initial support for Verify and DotNetRDF + OSLC IResource --- .editorconfig | 10 ++++ .gitattributes | 4 ++ .gitignore | 4 ++ OSLC4Net_SDK/Directory.Packages.props | 4 +- ...SLC4Net.Core.DotNetRdfProviderTests.csproj | 8 +-- .../RdfXmlMediaTypeFormatterTests.cs | 3 ++ ....TestRdfXmlSerializationAsync.verified.ttl | 13 +++++ .../VerifyInit.cs | 50 +++++++++++++++++++ 8 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 .gitattributes create mode 100644 OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/Snapshots/RdfXmlMediaTypeFormatterTests.TestRdfXmlSerializationAsync.verified.ttl create mode 100644 OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs diff --git a/.editorconfig b/.editorconfig index 93ecdb9d..d19b3f80 100644 --- a/.editorconfig +++ b/.editorconfig @@ -461,3 +461,13 @@ dotnet_diagnostic.IDE0161.severity = silent [{**/Shared/**.cs,**/microsoft.extensions.hostfactoryresolver.sources/**.{cs,vb}}] # IDE0005: Remove unused usings. Ignore for shared src files since imports for those depend on the projects in which they are included. dotnet_diagnostic.IDE0005.severity = silent + +# Verify settings +[*.{received,verified}.{json,txt,xml}] +charset = utf-8-bom +end_of_line = lf +indent_size = unset +indent_style = unset +insert_final_newline = false +tab_width = unset +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..02e62468 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.verified.txt text eol=lf working-tree-encoding=UTF-8 +*.verified.xml text eol=lf working-tree-encoding=UTF-8 +*.verified.json text eol=lf working-tree-encoding=UTF-8 +*.verified.bin binary diff --git a/.gitignore b/.gitignore index 8604b8e8..35bf4f4c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ /tmp/ +### + +*.received.* + ############################################ TestResults/** diff --git a/OSLC4Net_SDK/Directory.Packages.props b/OSLC4Net_SDK/Directory.Packages.props index 944aa5db..77b08129 100644 --- a/OSLC4Net_SDK/Directory.Packages.props +++ b/OSLC4Net_SDK/Directory.Packages.props @@ -28,6 +28,7 @@ + @@ -45,6 +46,5 @@ - - + \ No newline at end of file diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/OSLC4Net.Core.DotNetRdfProviderTests.csproj b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/OSLC4Net.Core.DotNetRdfProviderTests.csproj index 69ad000a..10651175 100644 --- a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/OSLC4Net.Core.DotNetRdfProviderTests.csproj +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/OSLC4Net.Core.DotNetRdfProviderTests.csproj @@ -1,12 +1,11 @@ net10.0 + enable - - + + @@ -18,6 +17,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/RdfXmlMediaTypeFormatterTests.cs b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/RdfXmlMediaTypeFormatterTests.cs index 7cae0a95..42ec8621 100644 --- a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/RdfXmlMediaTypeFormatterTests.cs +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/RdfXmlMediaTypeFormatterTests.cs @@ -53,6 +53,9 @@ await DeserializeAsync(formatter, rdfXml, 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()); + + await Verify(changeRequest1); + // await Verify(rdfXml); } [Fact] diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/Snapshots/RdfXmlMediaTypeFormatterTests.TestRdfXmlSerializationAsync.verified.ttl b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/Snapshots/RdfXmlMediaTypeFormatterTests.TestRdfXmlSerializationAsync.verified.ttl new file mode 100644 index 00000000..53924d9c --- /dev/null +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/Snapshots/RdfXmlMediaTypeFormatterTests.TestRdfXmlSerializationAsync.verified.ttl @@ -0,0 +1,13 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix xsd: . + +_:c14n0 "Test of links"; + rdf:object ; + rdf:predicate ; + rdf:subject ; + a rdf:Statement. + ; + true; + "Unclassified"; + a . diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs new file mode 100644 index 00000000..0f8008ac --- /dev/null +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs @@ -0,0 +1,50 @@ +using System.Runtime.CompilerServices; +using EmptyFiles; +using OSLC4Net.Core.DotNetRdfProvider; +using OSLC4Net.Core.Model; +using VDS.RDF; + +namespace OSLC4Net.Core.DotNetRdfProviderTests; + +public static class VerifyInit +{ + [ModuleInitializer] + public static void Initialize() + { + // Verifier.UseProjectRelativeDirectory("Snapshots"); + Verifier.UseSourceFileRelativeDirectory("Snapshots"); + + // VerifierSettings.AddScrubber(_ => _.Replace("String to verify", "new value")); + + FileExtensions.AddTextExtension("ttl"); + + VerifierSettings.RegisterFileConverter((graph, context) => + { + using var writer = new System.IO.StringWriter(); + var ttlWriter = new VDS.RDF.Writing.CompressingTurtleWriter(); + ttlWriter.Save(graph, writer); + return new(null, "ttl", writer.ToString()); + }); + + VerifierSettings.RegisterFileConverter((resource, context) => + { + using var writer = new System.IO.StringWriter(); + var graph = DotNetRdfHelper.CreateDotNetRdfGraph([resource]); + + var rdfc = new RdfCanonicalizer(); + var graphCollection = new GraphCollection + { + { graph, false } + }; + var canonicalizedRdfDataset = rdfc.Canonicalize(new TripleStore(graphCollection)); + + var newGraph = canonicalizedRdfDataset.OutputDataset.Graphs.Single(); + + // https://www.w3.org/TR/rdf-canon/ prescribes N-Quads serialization, but let's try Turtle for better readability + var ttlWriter = new VDS.RDF.Writing.CompressingTurtleWriter(); + // ttlWriter.Save(graph, writer); + ttlWriter.Save(newGraph, writer); + return new(null, "ttl", writer.ToString()); + }); + } +} From e168c24b6da019b0fc9f435c82ffde771708e2c7 Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Sun, 16 Nov 2025 00:45:01 +0100 Subject: [PATCH 2/7] test: canonicalize raw IGraph too --- .../RdfXmlMediaTypeFormatterTests.cs | 3 +-- ...lCollectionSerializationAsync.verified.ttl | 27 +++++++++++++++++++ .../VerifyInit.cs | 22 ++++++++++++--- 3 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/Snapshots/RdfXmlMediaTypeFormatterTests.TestRdfXmlCollectionSerializationAsync.verified.ttl diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/RdfXmlMediaTypeFormatterTests.cs b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/RdfXmlMediaTypeFormatterTests.cs index 42ec8621..b31d1d8f 100644 --- a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/RdfXmlMediaTypeFormatterTests.cs +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/RdfXmlMediaTypeFormatterTests.cs @@ -20,7 +20,6 @@ using OSLC4Net.ChangeManagement; using OSLC4Net.Core.DotNetRdfProvider; using OSLC4Net.Core.Model; -using Xunit; [assembly: CaptureConsole] [assembly: CaptureTrace] @@ -55,7 +54,6 @@ await DeserializeAsync(formatter, rdfXml, Assert.Equal(changeRequest1.GetAffectedByDefects()[0].GetLabel(), changeRequest2.GetAffectedByDefects()[0].GetLabel()); await Verify(changeRequest1); - // await Verify(rdfXml); } [Fact] @@ -118,6 +116,7 @@ await SerializeCollectionAsync(formatter, crListOut, } } + await Verify(rdfGraph); } [Fact] diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/Snapshots/RdfXmlMediaTypeFormatterTests.TestRdfXmlCollectionSerializationAsync.verified.ttl b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/Snapshots/RdfXmlMediaTypeFormatterTests.TestRdfXmlCollectionSerializationAsync.verified.ttl new file mode 100644 index 00000000..7ea18af2 --- /dev/null +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/Snapshots/RdfXmlMediaTypeFormatterTests.TestRdfXmlCollectionSerializationAsync.verified.ttl @@ -0,0 +1,27 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix xsd: . + +_:c14n0 "Test of links"; + rdf:object ; + rdf:predicate ; + rdf:subject ; + a rdf:Statement. +_:c14n1 "Test of links"; + rdf:object ; + rdf:predicate ; + rdf:subject ; + a rdf:Statement. + ; + true; + "Unclassified"; + a . + ; + false; + "Unclassified"; + a . + rdfs:member , + . + ; + "2"; + a . diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs index 0f8008ac..cfbbc4ca 100644 --- a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs @@ -14,24 +14,38 @@ public static void Initialize() // Verifier.UseProjectRelativeDirectory("Snapshots"); Verifier.UseSourceFileRelativeDirectory("Snapshots"); + + // VerifierSettings.AddExtraSettings( + // _ => _.TypeNameHandling = TypeNameHandling.All); // VerifierSettings.AddScrubber(_ => _.Replace("String to verify", "new value")); FileExtensions.AddTextExtension("ttl"); VerifierSettings.RegisterFileConverter((graph, context) => { - using var writer = new System.IO.StringWriter(); + using var writer = new StringWriter(); + + var rdfc = new RdfCanonicalizer(); + var graphCollection = new GraphCollection + { + { graph, false } + }; + var canonicalizedRdfDataset = rdfc.Canonicalize(new TripleStore(graphCollection)); + + var newGraph = canonicalizedRdfDataset.OutputDataset.Graphs.Single(); + + // https://www.w3.org/TR/rdf-canon/ prescribes N-Quads serialization, but let's try Turtle for better readability var ttlWriter = new VDS.RDF.Writing.CompressingTurtleWriter(); - ttlWriter.Save(graph, writer); + ttlWriter.Save(newGraph, writer); return new(null, "ttl", writer.ToString()); }); VerifierSettings.RegisterFileConverter((resource, context) => { - using var writer = new System.IO.StringWriter(); + using var writer = new StringWriter(); var graph = DotNetRdfHelper.CreateDotNetRdfGraph([resource]); - var rdfc = new RdfCanonicalizer(); + var rdfc = new RdfCanonicalizer(); var graphCollection = new GraphCollection { { graph, false } From eb2ed3657ce71c52fc8cefa890f291f8f36a7162 Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Sun, 16 Nov 2025 00:47:14 +0100 Subject: [PATCH 3/7] test: add ttl and nq extension config under Verify --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitattributes b/.gitattributes index 02e62468..45abb858 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,6 @@ *.verified.txt text eol=lf working-tree-encoding=UTF-8 *.verified.xml text eol=lf working-tree-encoding=UTF-8 *.verified.json text eol=lf working-tree-encoding=UTF-8 +*.verified.ttl text eol=lf working-tree-encoding=UTF-8 +*.verified.nq text eol=lf working-tree-encoding=UTF-8 *.verified.bin binary From 5f3f5cddfcbd1a41fe6c56da91d62bded1c4f40d Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Sun, 16 Nov 2025 00:49:27 +0100 Subject: [PATCH 4/7] test: add ttl and nq extension config under Verify --- .editorconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index d19b3f80..efdfb654 100644 --- a/.editorconfig +++ b/.editorconfig @@ -463,7 +463,7 @@ dotnet_diagnostic.IDE0161.severity = silent dotnet_diagnostic.IDE0005.severity = silent # Verify settings -[*.{received,verified}.{json,txt,xml}] +[*.{received,verified}.{json,txt,xml,ttl,nq}] charset = utf-8-bom end_of_line = lf indent_size = unset From 011586ac0a7821785a52498449b06b515a62f550 Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Sat, 22 Nov 2025 16:21:52 +0100 Subject: [PATCH 5/7] chore: format Signed-off-by: Andrew Berezovskyi --- .../Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs index cfbbc4ca..3c570361 100644 --- a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs @@ -14,7 +14,6 @@ public static void Initialize() // Verifier.UseProjectRelativeDirectory("Snapshots"); Verifier.UseSourceFileRelativeDirectory("Snapshots"); - // VerifierSettings.AddExtraSettings( // _ => _.TypeNameHandling = TypeNameHandling.All); // VerifierSettings.AddScrubber(_ => _.Replace("String to verify", "new value")); From 3395ce32028d2faf842c035eb94a5c21eaef963d Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Sat, 22 Nov 2025 16:29:07 +0100 Subject: [PATCH 6/7] refactor: verify init Signed-off-by: Andrew Berezovskyi --- .../VerifyInit.cs | 63 ++++++++----------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs index 3c570361..00fd2b36 100644 --- a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs @@ -3,6 +3,7 @@ using OSLC4Net.Core.DotNetRdfProvider; using OSLC4Net.Core.Model; using VDS.RDF; +using VDS.RDF.Writing; namespace OSLC4Net.Core.DotNetRdfProviderTests; @@ -20,44 +21,34 @@ public static void Initialize() FileExtensions.AddTextExtension("ttl"); - VerifierSettings.RegisterFileConverter((graph, context) => - { - using var writer = new StringWriter(); - - var rdfc = new RdfCanonicalizer(); - var graphCollection = new GraphCollection + VerifierSettings.RegisterFileConverter( + (graph, _) => { - { graph, false } - }; - var canonicalizedRdfDataset = rdfc.Canonicalize(new TripleStore(graphCollection)); - - var newGraph = canonicalizedRdfDataset.OutputDataset.Graphs.Single(); - - // https://www.w3.org/TR/rdf-canon/ prescribes N-Quads serialization, but let's try Turtle for better readability - var ttlWriter = new VDS.RDF.Writing.CompressingTurtleWriter(); - ttlWriter.Save(newGraph, writer); - return new(null, "ttl", writer.ToString()); - }); - - VerifierSettings.RegisterFileConverter((resource, context) => - { - using var writer = new StringWriter(); - var graph = DotNetRdfHelper.CreateDotNetRdfGraph([resource]); - - var rdfc = new RdfCanonicalizer(); - var graphCollection = new GraphCollection + return CanonicalizeAndSerializeGraph(graph); + }); + VerifierSettings.RegisterFileConverter( + (resource, _) => { - { graph, false } - }; - var canonicalizedRdfDataset = rdfc.Canonicalize(new TripleStore(graphCollection)); - - var newGraph = canonicalizedRdfDataset.OutputDataset.Graphs.Single(); + var graph = DotNetRdfHelper.CreateDotNetRdfGraph([resource]); + return CanonicalizeAndSerializeGraph(graph); + }); + } - // https://www.w3.org/TR/rdf-canon/ prescribes N-Quads serialization, but let's try Turtle for better readability - var ttlWriter = new VDS.RDF.Writing.CompressingTurtleWriter(); - // ttlWriter.Save(graph, writer); - ttlWriter.Save(newGraph, writer); - return new(null, "ttl", writer.ToString()); - }); + private static ConversionResult CanonicalizeAndSerializeGraph(IGraph graph) + { + using var writer = new System.IO.StringWriter(); + var rdfc = new RdfCanonicalizer(); + using var graphCollection = new GraphCollection + { + { graph, false } + }; + using var tripleStore = new TripleStore(graphCollection); + var canonicalizedRdfDataset = rdfc.Canonicalize(tripleStore); + var newGraph = canonicalizedRdfDataset.OutputDataset.Graphs.Single(); + // https://www.w3.org/TR/rdf-canon/ prescribes N-Quads serialization, but let's try Turtle for better readability + var ttlWriter = new CompressingTurtleWriter(); + ttlWriter.Save(newGraph, writer); + return new ConversionResult(null, "ttl", writer.ToString()); } + } From 381215a2148fcfbd7b581ba14c570552ff410d13 Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Sat, 22 Nov 2025 16:43:03 +0100 Subject: [PATCH 7/7] chore: clean up dead code Signed-off-by: Andrew Berezovskyi --- .../OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs index 00fd2b36..695703b0 100644 --- a/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs +++ b/OSLC4Net_SDK/Tests/OSLC4Net.Core.DotNetRdfProviderTests/VerifyInit.cs @@ -12,12 +12,8 @@ public static class VerifyInit [ModuleInitializer] public static void Initialize() { - // Verifier.UseProjectRelativeDirectory("Snapshots"); - Verifier.UseSourceFileRelativeDirectory("Snapshots"); - - // VerifierSettings.AddExtraSettings( - // _ => _.TypeNameHandling = TypeNameHandling.All); - // VerifierSettings.AddScrubber(_ => _.Replace("String to verify", "new value")); + // or UseSourceFileRelativeDirectory + Verifier.UseProjectRelativeDirectory("Snapshots"); FileExtensions.AddTextExtension("ttl");