public IEnumerator <object[]> GetEnumerator() { var jsonFetcher = new JsonFetcher(); var rootDirectory = "W3C"; foreach (string manifest in manifests) { JToken manifestJson = jsonFetcher.GetJson(manifest, rootDirectory); var isRemoteTest = (string)manifestJson["name"] == "Remote document"; foreach (JObject testcase in manifestJson["sequence"]) { Func <JToken> run; ConformanceCase newCase = new ConformanceCase(); // Load input file if not remote test. Remote tests load from the web at test execution time. if (!isRemoteTest) { newCase.input = jsonFetcher.GetJson(testcase["input"], rootDirectory); } newCase.context = jsonFetcher.GetJson(testcase["context"], rootDirectory); newCase.frame = jsonFetcher.GetJson(testcase["frame"], rootDirectory); var options = new JsonLdOptions("http://json-ld.org/test-suite/tests/" + (string)testcase["input"]); var testType = (JArray)testcase["@type"]; if (testType.Any((s) => (string)s == "jld:NegativeEvaluationTest")) { newCase.error = testcase["expect"]; } else if (testType.Any((s) => (string)s == "jld:PositiveEvaluationTest")) { if (testType.Any((s) => new List <string> { "jld:ToRDFTest", "jld:NormalizeTest" }.Contains((string)s))) { newCase.output = File.ReadAllText(Path.Combine("W3C", (string)testcase["expect"])); } else if (testType.Any((s) => (string)s == "jld:FromRDFTest")) { newCase.input = File.ReadAllText(Path.Combine("W3C", (string)testcase["input"])); newCase.output = jsonFetcher.GetJson(testcase["expect"], rootDirectory); } else { newCase.output = jsonFetcher.GetJson(testcase["expect"], rootDirectory); } } else { throw new Exception("Expecting either positive or negative evaluation test."); } JToken optionToken; JToken value; if (testcase.TryGetValue("option", out optionToken)) { JObject optionDescription = (JObject)optionToken; if (optionDescription.TryGetValue("compactArrays", out value)) { options.SetCompactArrays((bool)value); } if (optionDescription.TryGetValue("base", out value)) { options.SetBase((string)value); } if (optionDescription.TryGetValue("expandContext", out value)) { newCase.context = jsonFetcher.GetJson(testcase["option"]["expandContext"], rootDirectory); options.SetExpandContext((JObject)newCase.context); } if (optionDescription.TryGetValue("produceGeneralizedRdf", out value)) { options.SetProduceGeneralizedRdf((bool)value); } if (optionDescription.TryGetValue("useNativeTypes", out value)) { options.SetUseNativeTypes((bool)value); } if (optionDescription.TryGetValue("useRdfType", out value)) { options.SetUseRdfType((bool)value); } } if (testType.Any((s) => (string)s == "jld:CompactTest")) { run = () => JsonLdProcessor.Compact(newCase.input, newCase.context, options); } else if (testType.Any((s) => (string)s == "jld:ExpandTest")) { run = () => JsonLdProcessor.Expand(newCase.input, options); } else if (testType.Any((s) => (string)s == "jld:FlattenTest")) { run = () => JsonLdProcessor.Flatten(newCase.input, newCase.context, options); } else if (testType.Any((s) => (string)s == "jld:FrameTest")) { run = () => JsonLdProcessor.Frame(newCase.input, newCase.frame, options); } else if (testType.Any((s) => (string)s == "jld:NormalizeTest")) { run = () => new JValue( RDFDatasetUtils.ToNQuads((RDFDataset)JsonLdProcessor.Normalize(newCase.input, options)).Replace("\n", "\r\n") ); } else if (testType.Any((s) => (string)s == "jld:ToRDFTest")) { options.format = "application/nquads"; run = () => new JValue( ((string)JsonLdProcessor.ToRDF(newCase.input, options)).Replace("\n", "\r\n") ); } else if (testType.Any((s) => (string)s == "jld:FromRDFTest")) { options.format = "application/nquads"; run = () => JsonLdProcessor.FromRDF(newCase.input, options); } else { run = () => { throw new Exception("Couldn't find a test type, apparently."); }; } if (isRemoteTest) { Func <JToken> innerRun = run; run = () => { var remoteDoc = options.documentLoader.LoadDocument("https://json-ld.org/test-suite/tests/" + (string)testcase["input"]); newCase.input = remoteDoc.Document; options.SetBase(remoteDoc.DocumentUrl); options.SetExpandContext((JObject)remoteDoc.Context); return(innerRun()); }; } if (testType.Any((s) => (string)s == "jld:NegativeEvaluationTest")) { Func <JToken> innerRun = run; run = () => { try { return(innerRun()); } catch (JsonLdError err) { JObject result = new JObject(); result["error"] = err.Message; return(result); } }; } newCase.run = run; yield return(new object[] { manifest + (string)testcase["@id"], newCase }); } } }
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 }); } } }