-
Notifications
You must be signed in to change notification settings - Fork 48
/
Copy pathExtendedFunctionalityTests.cs
142 lines (120 loc) · 5.1 KB
/
ExtendedFunctionalityTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
using JsonLD.Core;
using JsonLD.Util;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using Xunit;
namespace JsonLD.Test
{
public class ExtendedFunctionalityTests
{
private const string ManifestRoot = "ExtendedFunctionality";
[Theory, MemberData(nameof(ExtendedFunctionalityCases))]
public void ExtendedFunctionalityTestPasses(string id, ExtendedFunctionalityTestCase testCase)
{
JToken result = testCase.run();
if (testCase.error != null)
{
Assert.True(((string)result["error"]).StartsWith((string)testCase.error), "Resulting error doesn't match expectations.");
}
else
{
if (!JsonLdUtils.DeepCompare(result, testCase.output, true))
{
#if DEBUG
Console.WriteLine(id);
Console.WriteLine("Actual:");
Console.Write(JSONUtils.ToPrettyString(result));
Console.WriteLine("--------------------------");
Console.WriteLine("Expected:");
Console.Write(JSONUtils.ToPrettyString(testCase.output));
Console.WriteLine("--------------------------");
#endif
Assert.True(false, "Returned JSON doesn't match expectations.");
}
}
}
public class ExtendedFunctionalityTestCase
{
public JToken input { get; set; }
public JToken output { get; set; }
public JToken context { get; set; }
public JToken frame { get; set; }
public JToken error { get; set; }
public Func<JToken> run { get; set; }
}
public static IEnumerable<object[]> ExtendedFunctionalityCases()
{
foreach (var testCase in SortingTestCases())
{
yield return testCase;
}
}
private static string[] SortingManifests =
{
"fromRdf-manifest.jsonld"
};
private static IEnumerable<object[]> SortingTestCases()
{
var jsonFetcher = new JsonFetcher();
var rootDirectory = Path.Combine(ManifestRoot, "Sorting");
foreach (string manifest in SortingManifests)
{
JToken manifestJson = jsonFetcher.GetJson(manifest, rootDirectory);
foreach (JObject testcase in manifestJson["sequence"])
{
Func<JToken> run = null;
ExtendedFunctionalityTestCase newCase = new ExtendedFunctionalityTestCase();
newCase.input = jsonFetcher.GetJson(manifestJson["input"], rootDirectory);
newCase.output = jsonFetcher.GetJson(testcase["expect"], rootDirectory);
var options = new JsonLdOptions();
var sortType = (string)testcase["sort-type"];
if (sortType == "jld:GraphsAndNodes")
{
options.SetSortGraphsFromRdf(true);
options.SetSortGraphNodesFromRdf(true);
}
else if (sortType == "jld:Graphs")
{
options.SetSortGraphsFromRdf(true);
options.SetSortGraphNodesFromRdf(false);
}
else if (sortType == "jld:Nodes")
{
options.SetSortGraphsFromRdf(false);
options.SetSortGraphNodesFromRdf(true);
}
else if (sortType == "jld:None")
{
options.SetSortGraphsFromRdf(false);
options.SetSortGraphNodesFromRdf(false);
}
JsonLdApi jsonLdApi = new JsonLdApi(options);
var testType = (string)testcase["test-type"];
if (testType == "jld:FromRDF")
{
JToken quads = newCase.input["quads"];
RDFDataset rdf = new RDFDataset();
foreach (JToken quad in quads)
{
string subject = (string)quad["subject"];
string predicate = (string)quad["predicate"];
string value = (string)quad["value"];
string graph = (string)quad["graph"];
rdf.AddQuad(subject, predicate, value, graph);
}
options.format = "application/nquads";
run = () => jsonLdApi.FromRDF(rdf);
}
else
{
run = () => { throw new Exception("Couldn't find a test type, apparently."); };
}
newCase.run = run;
yield return new object[] { manifest + (string)testcase["@id"], newCase };
}
}
}
}
}