Skip to content

Commit

Permalink
Merge pull request #83 from gregsdennis/schema-1.9.3
Browse files Browse the repository at this point in the history
Schema 1.9.3
  • Loading branch information
gregsdennis committed Mar 5, 2021
2 parents 408ef97 + 5d10d6f commit 6a24313
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 40 deletions.
16 changes: 8 additions & 8 deletions .github/workflows/dotnet-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
dotnet analyze-semver -a artifacts/DLLs/Json.More/bin/Release/netstandard2.0/Json.More.dll -o semver-report-more.md -c .github/semver_config.json -p Json.More.Net
dotnet analyze-semver -a artifacts/DLLs/Json.More/bin/Release/netstandard2.0/Json.More.dll -o semver-report-more.md -c .github/semver_config.json -p Json.More.Net --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-more.md ]
Expand Down Expand Up @@ -176,7 +176,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
dotnet analyze-semver -a artifacts/DLLs/JsonPatch/bin/Release/netstandard2.0/JsonPatch.dll -o semver-report-patch.md -c .github/semver_config.json -p JsonPatch.Net
dotnet analyze-semver -a artifacts/DLLs/JsonPatch/bin/Release/netstandard2.0/JsonPatch.dll -o semver-report-patch.md -c .github/semver_config.json -p JsonPatch.Net --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-patch.md ]
Expand Down Expand Up @@ -228,7 +228,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
dotnet analyze-semver -a artifacts/DLLs/JsonPath/bin/Release/netstandard2.1/JsonPath.Net.dll -o semver-report-path.md -c .github/semver_config.json
dotnet analyze-semver -a artifacts/DLLs/JsonPath/bin/Release/netstandard2.1/JsonPath.Net.dll -o semver-report-path.md -c .github/semver_config.json --include-Header --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-path.md ]
Expand Down Expand Up @@ -280,7 +280,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
dotnet analyze-semver -a artifacts/DLLs/JsonPointer/bin/Release/netstandard2.0/JsonPointer.Net.dll -o semver-report-pointer.md -c .github/semver_config.json
dotnet analyze-semver -a artifacts/DLLs/JsonPointer/bin/Release/netstandard2.0/JsonPointer.Net.dll -o semver-report-pointer.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-pointer.md ]
Expand Down Expand Up @@ -332,7 +332,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
dotnet analyze-semver -a artifacts/DLLs/JsonSchema/bin/Release/netstandard2.0/JsonSchema.Net.dll -o semver-report-schema.md -c .github/semver_config.json
dotnet analyze-semver -a artifacts/DLLs/JsonSchema/bin/Release/netstandard2.0/JsonSchema.Net.dll -o semver-report-schema.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-schema.md ]
Expand Down Expand Up @@ -388,7 +388,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
dotnet analyze-semver -a artifacts/DLLs/JsonSchema.Generation/bin/Release/netstandard2.0/JsonSchema.Net.Generation.dll -o semver-report-schema-gen.md -c .github/semver_config.json
dotnet analyze-semver -a artifacts/DLLs/JsonSchema.Generation/bin/Release/netstandard2.0/JsonSchema.Net.Generation.dll -o semver-report-schema-gen.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-schema-gen.md ]
Expand Down Expand Up @@ -440,7 +440,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
dotnet analyze-semver -a artifacts/DLLs/JsonSchema.Data/bin/Release/netstandard2.0/JsonSchema.Net.Data.dll -o semver-report-schema-data.md -c .github/semver_config.json
dotnet analyze-semver -a artifacts/DLLs/JsonSchema.Data/bin/Release/netstandard2.0/JsonSchema.Net.Data.dll -o semver-report-schema-data.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-schema-data.md ]
Expand Down Expand Up @@ -492,7 +492,7 @@ jobs:
if: github.event_name == 'pull_request'
# multiline comment support details: https://github.community/t/set-output-truncates-multiline-strings/16852/3
run: |
dotnet analyze-semver -a artifacts/DLLs/JsonLogic/bin/Release/netstandard2.1/JsonLogic.dll -o semver-report-logic.md -c .github/semver_config.json
dotnet analyze-semver -a artifacts/DLLs/JsonLogic/bin/Release/netstandard2.1/JsonLogic.dll -o semver-report-logic.md -c .github/semver_config.json --include-header true --omit-disclaimer true --assume-changes true
unset HAS_REPORT
unset REPORT
if [ -s semver-report-logic.md ]
Expand Down
12 changes: 6 additions & 6 deletions JsonSchema.Tests/GithubTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -418,14 +418,14 @@ public void Issue79_RefsTryingToResolveParent()
{
Fetch = uri =>
{
Console.WriteLine("Fetching {0}", uri);
return map.TryGetValue(uri, out var ret) ? ret : null;
//return map[uri];
Assert.True(map.TryGetValue(uri, out var ret), "Unexpected uri: {0}", uri);
return ret;
}
}
};
var validation = schema2.Validate(json, options);
Console.WriteLine("Validation: {0}", JsonSerializer.Serialize(validation, new JsonSerializerOptions {WriteIndented = true}));
var result = schema2.Validate(json, options);
result.AssertValid();
Assert.AreEqual(result.NestedResults[0].NestedResults[0].AbsoluteSchemaLocation, "http://first.com/schema1.json#");
}

[Test]
Expand Down Expand Up @@ -473,4 +473,4 @@ public void Issue79_RefsTryingToResolveParent_Explanation()
schema.Validate(failing, new ValidationOptions{OutputFormat = OutputFormat.Detailed}).AssertInvalid();
}
}
}
}
16 changes: 7 additions & 9 deletions JsonSchema/DynamicRefKeyword.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public DynamicRefKeyword(Uri value)
/// <param name="context">Contextual details for the validation process.</param>
public void Validate(ValidationContext context)
{
var parts = Reference.OriginalString.Split(new []{'#'}, StringSplitOptions.None);
var parts = Reference.OriginalString.Split(new[] {'#'}, StringSplitOptions.None);
var baseUri = parts[0];
var fragment = parts.Length > 1 ? parts[1] : null;

Expand All @@ -51,19 +51,16 @@ public void Validate(ValidationContext context)
var uriFolder = context.CurrentUri.OriginalString.EndsWith("/")
? context.CurrentUri
: context.CurrentUri.GetParentUri();
newUri = uriFolder;
var newBaseUri = new Uri(uriFolder, baseUri);
if (!string.IsNullOrEmpty(fragment))
newUri = newBaseUri;
baseSchema = context.Options.SchemaRegistry.Get(newBaseUri);
newUri = new Uri(uriFolder, baseUri);
baseSchema = context.Options.SchemaRegistry.Get(newUri);
}
}
else
{
newUri = context.CurrentUri;
if (fragment != null && context.DynamicAnchors.TryGetValue(fragment, out var dynamicSchema))
baseSchema = dynamicSchema;
baseSchema ??= context.Options.SchemaRegistry.Get(newUri, fragment) ?? context.SchemaRoot;
baseSchema ??= context.Options.SchemaRegistry.Get(newUri) ?? context.SchemaRoot;
}

JsonSchema? schema;
Expand All @@ -87,6 +84,7 @@ public void Validate(ValidationContext context)
context.Message = $"Could not parse pointer `{fragment}`";
return;
}

(schema, newUri) = baseSchema.FindSubschema(pointer, newUri);
}
else
Expand All @@ -101,7 +99,7 @@ public void Validate(ValidationContext context)
}

var subContext = ValidationContext.From(context, newUri: newUri);
if (!ReferenceEquals(baseSchema, context.SchemaRoot))
if (!ReferenceEquals(baseSchema, context.SchemaRoot))
subContext.SchemaRoot = baseSchema!;
schema.ValidateSubschema(subContext);
context.NestedContexts.Add(subContext);
Expand Down Expand Up @@ -150,4 +148,4 @@ public override void Write(Utf8JsonWriter writer, DynamicRefKeyword value, JsonS
JsonSerializer.Serialize(writer, value.Reference, options);
}
}
}
}
10 changes: 8 additions & 2 deletions JsonSchema/IdKeyword.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,13 @@ public void Validate(ValidationContext context)

internal Uri UpdateUri(Uri? currentUri)
{
return currentUri == null || Id.IsAbsoluteUri ? Id : new Uri(currentUri, Id);
if (currentUri == null || Id.IsAbsoluteUri) return Id;

var baseUri = currentUri;
if (currentUri.Segments.Length > 1 && currentUri.OriginalString.EndsWith("/"))
baseUri = baseUri.GetParentUri();

return new Uri(baseUri, Id);
}

/// <summary>Indicates whether the current object is equal to another object of the same type.</summary>
Expand Down Expand Up @@ -101,4 +107,4 @@ public override void Write(Utf8JsonWriter writer, IdKeyword value, JsonSerialize
writer.WriteString(IdKeyword.Name, value.Id.OriginalString);
}
}
}
}
4 changes: 2 additions & 2 deletions JsonSchema/JsonSchema.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
<PackageProjectUrl>https://github.com/gregsdennis/json-everything</PackageProjectUrl>
<RepositoryUrl>https://github.com/gregsdennis/json-everything</RepositoryUrl>
<PackageTags>json-schema validation schema json</PackageTags>
<Version>1.9.2</Version>
<FileVersion>1.9.2.0</FileVersion>
<Version>1.9.3</Version>
<FileVersion>1.9.3.0</FileVersion>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<AssemblyName>JsonSchema.Net</AssemblyName>
Expand Down
7 changes: 4 additions & 3 deletions JsonSchema/RecursiveRefKeyword.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public RecursiveRefKeyword(Uri value)
/// <param name="context">Contextual details for the validation process.</param>
public void Validate(ValidationContext context)
{
var parts = Reference.OriginalString.Split(new []{'#'}, StringSplitOptions.None);
var parts = Reference.OriginalString.Split(new[] {'#'}, StringSplitOptions.None);
var baseUri = parts[0];
var fragment = parts.Length > 1 ? parts[1] : null;

Expand Down Expand Up @@ -85,6 +85,7 @@ public void Validate(ValidationContext context)
context.Message = $"Could not parse pointer `{fragment}`";
return;
}

(schema, newUri) = baseSchema.FindSubschema(pointer, newUri);
}
else
Expand All @@ -99,7 +100,7 @@ public void Validate(ValidationContext context)
}

var subContext = ValidationContext.From(context, newUri: newUri);
if (!ReferenceEquals(baseSchema, context.SchemaRoot))
if (!ReferenceEquals(baseSchema, context.SchemaRoot))
subContext.SchemaRoot = baseSchema!;
schema.ValidateSubschema(subContext);
context.NestedContexts.Add(subContext);
Expand Down Expand Up @@ -148,4 +149,4 @@ public override void Write(Utf8JsonWriter writer, RecursiveRefKeyword value, Jso
JsonSerializer.Serialize(writer, value.Reference, options);
}
}
}
}
18 changes: 8 additions & 10 deletions JsonSchema/RefKeyword.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public RefKeyword(Uri value)
/// <param name="context">Contextual details for the validation process.</param>
public void Validate(ValidationContext context)
{
var parts = Reference.OriginalString.Split(new []{'#'}, StringSplitOptions.None);
var parts = Reference.OriginalString.Split(new[] {'#'}, StringSplitOptions.None);
var baseUri = parts[0];
var fragment = parts.Length > 1 ? parts[1] : null;

Expand All @@ -55,17 +55,14 @@ public void Validate(ValidationContext context)
var uriFolder = context.CurrentUri.OriginalString.EndsWith("/")
? context.CurrentUri
: context.CurrentUri.GetParentUri();
newUri = uriFolder;
var newBaseUri = new Uri(uriFolder, baseUri);
if (!string.IsNullOrEmpty(fragment))
newUri = newBaseUri;
baseSchema = context.Options.SchemaRegistry.Get(newBaseUri);
newUri = new Uri(uriFolder, baseUri);
baseSchema = context.Options.SchemaRegistry.Get(newUri);
}
}
else
{
newUri = context.CurrentUri;
baseSchema = context.SchemaRoot;
baseSchema = context.Options.SchemaRegistry.Get(newUri) ?? context.SchemaRoot;
}

JsonSchema? schema;
Expand All @@ -89,6 +86,7 @@ public void Validate(ValidationContext context)
context.Message = $"Could not parse pointer `{fragment}`";
return;
}

(schema, newUri) = baseSchema.FindSubschema(pointer, newUri);
}
else
Expand All @@ -103,9 +101,9 @@ public void Validate(ValidationContext context)
}

var subContext = ValidationContext.From(context, newUri: newUri);
if (!string.IsNullOrEmpty(fragment) && JsonPointer.TryParse(fragment!, out var reference))
if (!string.IsNullOrEmpty(fragment) && JsonPointer.TryParse(fragment!, out var reference))
subContext.Reference = reference;
if (!ReferenceEquals(baseSchema, context.SchemaRoot))
if (!ReferenceEquals(baseSchema, context.SchemaRoot))
subContext.SchemaRoot = baseSchema!;
schema.ValidateSubschema(subContext);
context.NestedContexts.Add(subContext);
Expand Down Expand Up @@ -156,4 +154,4 @@ public override void Write(Utf8JsonWriter writer, RefKeyword value, JsonSerializ
}

// Source: https://github.com/WebDAVSharp/WebDAVSharp.Server/blob/1d2086a502937936ebc6bfe19cfa15d855be1c31/WebDAVExtensions.cs
}
}
4 changes: 4 additions & 0 deletions docs_source/release-notes/json-schema.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# [1.9.2](https://github.com/gregsdennis/json-everything/pull/83)

[#82](https://github.com/gregsdennis/json-everything/pulll/82) - Fixing issues managing `ValidationContext.CurrentUri`. Credit to [@amosonn](https://github.com/amosonn).

# [1.9.2](https://github.com/gregsdennis/json-everything/pull/80)

[#79](https://github.com/gregsdennis/json-everything/issues/79) - `$ref` was calling out to resolve a parent URI.
Expand Down

0 comments on commit 6a24313

Please sign in to comment.