Skip to content

Commit

Permalink
Merge pull request #867 from RSuter/master
Browse files Browse the repository at this point in the history
Release v9.13.12
  • Loading branch information
RicoSuter authored Jan 8, 2019
2 parents 5702a52 + 2e69d51 commit 8a8825d
Show file tree
Hide file tree
Showing 12 changed files with 96 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1636,6 +1636,34 @@ public async Task When_schema_has_AdditionProperties_schema_then_JsonExtensionDa
Assert.Contains("JsonExtensionData", output);
}

[Fact]
public void When_schema_has_negative_value_of_enum_it_is_generated_in_CSharp_and_TypeScript_correctly()
{
//// Arrange
var settings = new CSharpGeneratorSettings { EnumNameGenerator = new DefaultEnumNameGenerator() };
var generator = new CSharpGenerator(null, settings);

//// Act
var schema = new JsonSchema4()
{
Type = JsonObjectType.Integer,
Enumeration =
{
0,
1,
2,
-1,
},
Default = "-1"
};

var types = generator.GenerateTypes(schema, "MyEnum");

//// Assert
Assert.Contains("_1 = 1", types.Artifacts.First().Code);
Assert.Contains("__1 = -1", types.Artifacts.First().Code);
}

private static void AssertCompile(string code)
{
var syntaxTree = CSharpSyntaxTree.ParseText(code);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@
<ProjectReference Include="..\NJsonSchema.CodeGeneration\NJsonSchema.CodeGeneration.csproj" />
<ProjectReference Include="..\NJsonSchema\NJsonSchema.csproj" />
</ItemGroup>
</Project>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFrameworks>netstandard1.3;netstandard2.0;net451</TargetFrameworks>
<Description>JSON Schema reader, generator and validator for .NET</Description>
<Version>9.13.11</Version>
<Version>9.13.12</Version>
<PackageTags>json schema validation generator .net</PackageTags>
<Copyright>Copyright © Rico Suter, 2018</Copyright>
<PackageLicenseUrl>https://github.com/rsuter/NJsonSchema/blob/master/LICENSE.md</PackageLicenseUrl>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFrameworks>netstandard1.3;netstandard2.0;net451</TargetFrameworks>
<Description>JSON Schema reader, generator and validator for .NET</Description>
<Version>9.13.11</Version>
<Version>9.13.12</Version>
<PackageTags>json schema validation generator .net</PackageTags>
<Copyright>Copyright © Rico Suter, 2018</Copyright>
<PackageLicenseUrl>https://github.com/rsuter/NJsonSchema/blob/master/LICENSE.md</PackageLicenseUrl>
Expand Down
8 changes: 7 additions & 1 deletion src/NJsonSchema.CodeGeneration/DefaultEnumNameGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,17 @@ public class DefaultEnumNameGenerator : IEnumNameGenerator
/// <returns>The enumeration name.</returns>
public string Generate(int index, string name, object value, JsonSchema4 schema)
{
if (name.StartsWith("_-"))
{
name = "__" + name.Substring(2);
}

return ConversionUtilities.ConvertToUpperCamelCase(name
.Replace(":", "-").Replace(@"""", @""), true)
.Replace(".", "_")
.Replace("#", "_")
.Replace("-", "_")
.Replace("\\", "_");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFrameworks>netstandard1.3;netstandard2.0;net451</TargetFrameworks>
<Description>JSON Schema reader, generator and validator for .NET</Description>
<Version>9.13.11</Version>
<Version>9.13.12</Version>
<PackageTags>json schema validation generator .net</PackageTags>
<Copyright>Copyright © Rico Suter, 2018</Copyright>
<PackageLicenseUrl>https://github.com/rsuter/NJsonSchema/blob/master/LICENSE.md</PackageLicenseUrl>
Expand Down
15 changes: 15 additions & 0 deletions src/NJsonSchema.Tests/Serialization/ExtensionDataTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,21 @@ namespace NJsonSchema.Tests.Serialization
{
public class ExtensionDataTests
{
[Fact]
public async Task When_definition_entry_is_null_then_it_is_deserialized_correctly()
{
//// Arrange
var json = @"{ ""definitions"": { ""abc"": null } }";

//// Act
var schema = await JsonSchema4.FromJsonAsync(json);
var json2 = schema.ToJson();

//// Assert
Assert.False(schema.Definitions.ContainsKey("abc"));
Assert.DoesNotContain("abc", json2);
}

[Fact]
public void When_schema_has_extension_data_property_then_property_is_in_serialized_json()
{
Expand Down
2 changes: 1 addition & 1 deletion src/NJsonSchema.Yaml/NJsonSchema.Yaml.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFrameworks>netstandard1.3;netstandard2.0;net45</TargetFrameworks>
<Description>JSON Schema reader, generator and validator for .NET</Description>
<Version>9.13.11</Version>
<Version>9.13.12</Version>
<PackageTags>json schema validation generator .net</PackageTags>
<Copyright>Copyright © Rico Suter, 2018</Copyright>
<PackageLicenseUrl>https://github.com/rsuter/NJsonSchema/blob/master/LICENSE.md</PackageLicenseUrl>
Expand Down
19 changes: 16 additions & 3 deletions src/NJsonSchema/Infrastructure/XmlDocumentationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,7 @@ private static string GetMemberElementName(dynamic member)

private static async Task<string> GetXmlDocumentationPathAsync(dynamic assembly)
{
string path;
try
{
if (assembly == null)
Expand All @@ -528,7 +529,6 @@ private static async Task<string> GetXmlDocumentationPathAsync(dynamic assembly)
if (Cache.ContainsKey(assemblyName.FullName))
return null;

string path;
if (!string.IsNullOrEmpty(assembly.Location))
{
var assemblyDirectory = DynamicApis.PathGetDirectoryName((string)assembly.Location);
Expand All @@ -547,8 +547,8 @@ private static async Task<string> GetXmlDocumentationPathAsync(dynamic assembly)
return path;
}

var currentDomain = Type.GetType("System.AppDomain").GetRuntimeProperty("CurrentDomain").GetValue(null);
if (currentDomain.HasProperty("BaseDirectory"))
var currentDomain = Type.GetType("System.AppDomain")?.GetRuntimeProperty("CurrentDomain").GetValue(null);
if (currentDomain?.HasProperty("BaseDirectory") == true)
{
var baseDirectory = currentDomain.TryGetPropertyValue("BaseDirectory", "");
path = DynamicApis.PathCombine(baseDirectory, assemblyName.Name + ".xml");
Expand All @@ -558,6 +558,19 @@ private static async Task<string> GetXmlDocumentationPathAsync(dynamic assembly)
return DynamicApis.PathCombine(baseDirectory, "bin\\" + assemblyName.Name + ".xml");
}

var currentDirectory = await DynamicApis.DirectoryGetCurrentDirectoryAsync();
path = DynamicApis.PathCombine(currentDirectory, assembly.GetName().Name + ".xml");
if (await DynamicApis.FileExistsAsync(path).ConfigureAwait(false))
{
return path;
}

path = DynamicApis.PathCombine(currentDirectory, "bin\\" + assembly.GetName().Name + ".xml");
if (await DynamicApis.FileExistsAsync(path).ConfigureAwait(false))
{
return path;
}

return null;
}
catch
Expand Down
16 changes: 12 additions & 4 deletions src/NJsonSchema/JsonExtensionObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,18 @@ internal class ExtensionDataDeserializationConverter : JsonConverter

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var obj = (IJsonExtensionObject)Activator.CreateInstance(objectType);
serializer.Populate(reader, obj);
DeserializeExtensionDataSchemas(obj, serializer);
return obj;
if (reader.TokenType != JsonToken.Null)
{
var obj = (IJsonExtensionObject)Activator.CreateInstance(objectType);
serializer.Populate(reader, obj);
DeserializeExtensionDataSchemas(obj, serializer);
return obj;
}
else
{
reader.Skip();
return null;
}
}

public override bool CanConvert(Type objectType)
Expand Down
14 changes: 12 additions & 2 deletions src/NJsonSchema/JsonSchema4.Serialization.cs
Original file line number Diff line number Diff line change
Expand Up @@ -394,8 +394,18 @@ private void InitializeSchemaCollection(object sender, NotifyCollectionChangedEv
else if (sender is ObservableDictionary<string, JsonSchema4>)
{
var collection = (ObservableDictionary<string, JsonSchema4>)sender;
foreach (var item in collection.Values)
item.Parent = this;

foreach (var pair in collection.ToArray())
{
if (pair.Value == null)
{
collection.Remove(pair.Key);
}
else
{
pair.Value.Parent = this;
}
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/NJsonSchema/NJsonSchema.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFrameworks>netstandard1.0;netstandard2.0;net40;net45</TargetFrameworks>
<Description>JSON Schema reader, generator and validator for .NET</Description>
<Version>9.13.11</Version>
<Version>9.13.12</Version>
<PackageTags>json schema validation generator .net</PackageTags>
<Copyright>Copyright © Rico Suter, 2018</Copyright>
<PackageLicenseUrl>https://github.com/rsuter/NJsonSchema/blob/master/LICENSE.md</PackageLicenseUrl>
Expand Down

0 comments on commit 8a8825d

Please sign in to comment.