diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 079d5d9..599b19f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -14,10 +14,13 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
- dotnet-version: '3.1.x'
+ dotnet-version: |
+ 6.0.x
+ 7.0.x
+ 8.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Test
- run: dotnet test --no-build --verbosity normal
\ No newline at end of file
+ run: dotnet test --no-build --verbosity normal
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 060a2c1..cd673ba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
Represents the **NuGet** versions.
+## v2.0.0
+- *Enhancement:* **Breaking change** - underlying JSON serialization has been changed from `Newtonsoft.Json` to `System.Text.Json`, with new `Utility.JsonSerializer` encapsulating logic to enable. The following steps are required to migrate existing usage:
+ - Rename all attribute references from `JsonProperty` to `JsonPropertyName`.
+ - Remove all attribute references to `[JsonObject(MemberSerialization = MemberSerialization.OptIn)]`; opt-in is the default behavior when leveraging the `CodeGenClassAttribute` attribute.
+- *Fixed:* All dependencies updated to the latest version.
+
## v1.0.8
- *Fixed:* Added comparison context where reporting a file update as a result of using `ExpectNoChanges`.
diff --git a/src/OnRamp/Config/CodeGenPropertyAttribute.cs b/src/OnRamp/Config/CodeGenPropertyAttribute.cs
index a11c762..458d801 100644
--- a/src/OnRamp/Config/CodeGenPropertyAttribute.cs
+++ b/src/OnRamp/Config/CodeGenPropertyAttribute.cs
@@ -7,19 +7,14 @@ namespace OnRamp.Config
///
/// Represents the code-generation property configuration.
///
+ /// The grouping category.
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
- public sealed class CodeGenPropertyAttribute : Attribute
+ public sealed class CodeGenPropertyAttribute(string category) : Attribute
{
- ///
- /// Initializes a new instance of the class.
- ///
- /// The grouping category.
- public CodeGenPropertyAttribute(string category) => Category = category ?? throw new ArgumentNullException(nameof(category));
-
///
/// Gets or sets the category.
///
- public string Category { get; }
+ public string Category { get; } = category ?? throw new ArgumentNullException(nameof(category));
///
/// Gets or sets the title.
diff --git a/src/OnRamp/Config/ConfigBase.cs b/src/OnRamp/Config/ConfigBase.cs
index 0106251..8fea79a 100644
--- a/src/OnRamp/Config/ConfigBase.cs
+++ b/src/OnRamp/Config/ConfigBase.cs
@@ -1,11 +1,11 @@
// Copyright (c) Avanade. Licensed under the MIT License. See https://github.com/Avanade/OnRamp
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Text.Json;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace OnRamp.Config
@@ -13,7 +13,6 @@ namespace OnRamp.Config
///
/// Provides base configuration capabilities.
///
- [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public abstract class ConfigBase
{
#region static
@@ -215,35 +214,35 @@ public static bool IsSubclassOfBaseType(Type baseType, Type type)
/// Gets or sets the that houses any additional/extra properties/attributes deserialized within the configuration.
///
[JsonExtensionData]
- public Dictionary? ExtraProperties { get; set; }
+ public Dictionary? ExtraProperties { get; set; }
///
- /// Gets the property value from using the specified as .
+ /// Gets the property value from using the specified and .
///
/// The property .
/// The key.
/// The default value where the property is not found.
/// The value.
- public T GetExtraProperty(string key, T defaultValue = default!) where T : JToken
+ public T? GetExtraProperty(string key, T? defaultValue = default!)
{
if (ExtraProperties != null && ExtraProperties.TryGetValue(key, out var val))
- return (T)Convert.ChangeType(val, typeof(T));
+ return val.Deserialize()!;
else
return defaultValue!;
}
///
- /// Trys to get the property value from using the specified as .
+ /// Trys to get the property value from using the specified and .
///
/// The property .
/// The key.
/// The corresponding value.
/// true if the is found; otherwise, false.
- public bool TryGetExtraProperty(string key, out T value) where T : JToken
+ public bool TryGetExtraProperty(string key, out T value)
{
if (ExtraProperties != null && ExtraProperties.TryGetValue(key, out var val))
{
- value = (T)Convert.ChangeType(val, typeof(T));
+ value = val.Deserialize()!;
return true;
}
else
@@ -257,7 +256,7 @@ public bool TryGetExtraProperty(string key, out T value) where T : JToken
/// Gets the that allows for custom property values to be manipulated at runtime.
///
[JsonIgnore]
- public Dictionary CustomProperties { get; } = new Dictionary();
+ public Dictionary CustomProperties { get; } = [];
///
/// Gets the property value from using the specified as .
diff --git a/src/OnRamp/Config/ConfigBaseT.cs b/src/OnRamp/Config/ConfigBaseT.cs
index f229cb3..eb70e7d 100644
--- a/src/OnRamp/Config/ConfigBaseT.cs
+++ b/src/OnRamp/Config/ConfigBaseT.cs
@@ -1,6 +1,5 @@
// Copyright (c) Avanade. Licensed under the MIT License. See https://github.com/Avanade/OnRamp
-using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -14,7 +13,6 @@ namespace OnRamp.Config
///
/// The root .
/// The parent .
- [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public abstract class ConfigBase : ConfigBase where TRoot : ConfigBase where TParent : ConfigBase
{
///
diff --git a/src/OnRamp/Config/ConfigRootBase.cs b/src/OnRamp/Config/ConfigRootBase.cs
index a9d4e6f..6e849bd 100644
--- a/src/OnRamp/Config/ConfigRootBase.cs
+++ b/src/OnRamp/Config/ConfigRootBase.cs
@@ -1,6 +1,5 @@
// Copyright (c) Avanade. Licensed under the MIT License. See https://github.com/Avanade/OnRamp
-using Newtonsoft.Json;
using OnRamp.Generators;
using System;
using System.Collections.Generic;
@@ -11,7 +10,6 @@ namespace OnRamp.Config
/// Provides the root base configuration capabilities.
///
/// The root .
- [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public abstract class ConfigRootBase : ConfigBase, IRootConfig where TRoot : ConfigRootBase
{
///
diff --git a/src/OnRamp/Console/ConsoleLogger.cs b/src/OnRamp/Console/ConsoleLogger.cs
index 00c987b..e98cfe4 100644
--- a/src/OnRamp/Console/ConsoleLogger.cs
+++ b/src/OnRamp/Console/ConsoleLogger.cs
@@ -20,13 +20,13 @@ public class ConsoleLogger : ILogger
public ConsoleLogger(IConsole? console = null) => _console = console;
///
- public IDisposable BeginScope(TState state) => NullScope.Default;
+ public IDisposable BeginScope(TState state) where TState : notnull => NullScope.Default;
///
public bool IsEnabled(LogLevel logLevel) => true;
///
- public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter)
+ public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter)
{
if (formatter == null)
throw new ArgumentNullException(nameof(formatter));
diff --git a/src/OnRamp/OnRamp.csproj b/src/OnRamp/OnRamp.csproj
index cebb6bc..9ca9a22 100644
--- a/src/OnRamp/OnRamp.csproj
+++ b/src/OnRamp/OnRamp.csproj
@@ -4,7 +4,7 @@
Exe
netstandard2.1
OnRamp
- 1.0.8
+ 2.0.0
true
Avanade
Avanade
@@ -48,13 +48,13 @@
-
-
-
-
+
+
+
-
+
+
\ No newline at end of file
diff --git a/src/OnRamp/Scripts/CodeGenScript.cs b/src/OnRamp/Scripts/CodeGenScript.cs
index 9558f57..204940f 100644
--- a/src/OnRamp/Scripts/CodeGenScript.cs
+++ b/src/OnRamp/Scripts/CodeGenScript.cs
@@ -1,10 +1,10 @@
// Copyright (c) Avanade. Licensed under the MIT License. See https://github.com/Avanade/OnRamp
-using Newtonsoft.Json;
using OnRamp.Config;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace OnRamp.Scripts
@@ -12,7 +12,6 @@ namespace OnRamp.Scripts
///
/// Represents the root that encapsulates the underlying .
///
- [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[CodeGenClass("Script", Title = "'Script' object.", Description = "The `Script` object scripts the code-generation execution.")]
[CodeGenCategory("Key", Title = "Provides the _Key_ configuration.")]
[CodeGenCategory("Collections", Title = "Provides related child (hierarchical) configuration.")]
@@ -24,28 +23,28 @@ public class CodeGenScript : ConfigRootBase
///
/// Gets or sets the .NET Type for the underlying .
///
- [JsonProperty("configType")]
+ [JsonPropertyName("configType")]
[CodeGenProperty("Key", Title = "The .NET ConfigRootBase Type for the underlying 'Generators'.", IsMandatory = true)]
public string? ConfigType { get; set; }
///
/// Gets or sets the list of additional script resource names to inherit.
///
- [JsonProperty("inherits")]
+ [JsonPropertyName("inherits")]
[CodeGenPropertyCollection("Key", Title = "The list of additional script resource names to inherit.")]
public List? Inherits { get; set; }
///
/// Gets or sets the .
///
- [JsonProperty("editorType")]
+ [JsonPropertyName("editorType")]
[CodeGenPropertyCollection("Key", Title = "The .NET IConfigEditor Type for performing extended custom configuration prior to generation.")]
public string? EditorType { get; set; }
///
/// Gets or sets the collection.
///
- [JsonProperty("generators")]
+ [JsonPropertyName("generators")]
[CodeGenPropertyCollection("Collections", Title = "The corresponding `Generator` collection.")]
public List? Generators { get; set; }
diff --git a/src/OnRamp/Scripts/CodeGenScriptItem.cs b/src/OnRamp/Scripts/CodeGenScriptItem.cs
index 811482c..f49324d 100644
--- a/src/OnRamp/Scripts/CodeGenScriptItem.cs
+++ b/src/OnRamp/Scripts/CodeGenScriptItem.cs
@@ -1,11 +1,11 @@
// Copyright (c) Avanade. Licensed under the MIT License. See https://github.com/Avanade/OnRamp
-using Newtonsoft.Json;
using OnRamp.Config;
using OnRamp.Generators;
using OnRamp.Utility;
using System;
using System.Collections.Generic;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace OnRamp.Scripts
@@ -13,7 +13,6 @@ namespace OnRamp.Scripts
///
/// Represents the script arguments used to define a (as specified by the ) and other associated code-generation arguments.
///
- [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[CodeGenClass("Generate", Title = "'Generate' command.", Description = "The `Generate` command defines the execution parameters for a code-generation execution.")]
[CodeGenCategory("Key", Title = "Provides the _Key_ configuration.")]
public class CodeGenScriptItem : ConfigBase
@@ -29,14 +28,14 @@ public class CodeGenScriptItem : ConfigBase
///
/// Gets or sets the .
///
- [JsonProperty("type")]
+ [JsonPropertyName("type")]
[CodeGenProperty("Key", Title = "The .NET Generator (CodeGeneratorBase) Type.", IsMandatory = true)]
public string? Type { get; set; }
///
/// Gets or sets the template resource name.
///
- [JsonProperty("template")]
+ [JsonPropertyName("template")]
[CodeGenProperty("Key", Title = "The template resource name.", IsMandatory = true)]
public string? Template { get; set; }
@@ -44,7 +43,7 @@ public class CodeGenScriptItem : ConfigBase
/// Gets or sets the file name.
///
/// Supports Handlebars syntax.
- [JsonProperty("file")]
+ [JsonPropertyName("file")]
[CodeGenProperty("Key", Title = "The file name.", IsMandatory = true, Description = "Supports _Handlebars_ syntax.")]
public string? File { get; set; }
@@ -52,14 +51,14 @@ public class CodeGenScriptItem : ConfigBase
/// Gets or sets the directory name.
///
/// Supports Handlebars syntax.
- [JsonProperty("directory")]
+ [JsonPropertyName("directory")]
[CodeGenProperty("Key", Title = "The directory name.", Description = "Supports _Handlebars_ syntax.")]
public string? Directory { get; set; }
///
/// Indicates whether the file is only generated once; i.e. only created where it does not already exist.
///
- [JsonProperty("genOnce")]
+ [JsonPropertyName("genOnce")]
[CodeGenProperty("Key", Title = "Indicates whether the file is only generated once; i.e. only created where it does not already exist.")]
public bool IsGenOnce { get; set; }
@@ -67,14 +66,14 @@ public class CodeGenScriptItem : ConfigBase
/// Gets or sets the gen-once file name pattern to check (can include wildcard '*' characters).
///
/// Supports Handlebars syntax.
- [JsonProperty("genOncePattern")]
+ [JsonPropertyName("genOncePattern")]
[CodeGenProperty("Key", Title = "The gen-once file name pattern to check (can include wildcard `*` characters).", Description = "Supports _Handlebars_ syntax. Defaults to `File` where not specified.")]
public string? GenOncePattern { get; set; }
///
/// Gets or sets the help text.
///
- [JsonProperty("text")]
+ [JsonPropertyName("text")]
[CodeGenProperty("Key", Title = "The additional text written to the log to enable additional context.")]
public string? Text { get; set; }
@@ -127,7 +126,7 @@ protected override Task PrepareAsync()
{
foreach (var json in ExtraProperties)
{
- RuntimeParameters.Add(json.Key, json.Value.ToObject());
+ RuntimeParameters.Add(json.Key, json.Value.ToString());
}
}
}
diff --git a/src/OnRamp/Utility/JsonSchemaGenerator.cs b/src/OnRamp/Utility/JsonSchemaGenerator.cs
index aee6fea..8c32d60 100644
--- a/src/OnRamp/Utility/JsonSchemaGenerator.cs
+++ b/src/OnRamp/Utility/JsonSchemaGenerator.cs
@@ -1,17 +1,18 @@
// Copyright (c) Avanade. Licensed under the MIT License. See https://github.com/Avanade/OnRamp
-using Newtonsoft.Json;
using OnRamp.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
+using System.Text.Json;
+using System.Text.Json.Serialization;
namespace OnRamp.Utility
{
///
- /// Represents a JsonSchema generator.
+ /// Represents a JsonSchema generator.
///
/// See and .
public static class JsonSchemaGenerator
@@ -24,29 +25,29 @@ public static class JsonSchemaGenerator
/// The title override.
public static void Generate(string path, string? title = null) where T : ConfigBase, IRootConfig
{
- using var tw = File.CreateText(path ?? throw new ArgumentNullException(nameof(path)));
- Generate(tw, title);
+ using var fs = File.Create(path ?? throw new ArgumentNullException(nameof(path)));
+ Generate(fs, title);
}
///
/// Generates a JsonSchema from the .
///
/// The root to derive the schema from.
- /// The .
+ /// The .
/// The title override.
- public static void Generate(TextWriter textWriter, string? title = null) where T : ConfigBase, IRootConfig
+ public static void Generate(Stream stream, string? title = null) where T : ConfigBase, IRootConfig
{
var type = typeof(T);
var types = new List { type };
FindAllTypes(types, typeof(T));
- using var jtw = new JsonTextWriter(textWriter ?? throw new ArgumentNullException(nameof(textWriter))) { Formatting = Formatting.Indented };
+ using var jtw = new Utf8JsonWriter(stream ?? throw new ArgumentNullException(nameof(stream)), new JsonWriterOptions { Indented = true });
jtw.WriteStartObject();
jtw.WritePropertyName("title");
- jtw.WriteValue(title ?? StringConverter.ToSentenceCase(type.Name));
+ jtw.WriteStringValue(title ?? StringConverter.ToSentenceCase(type.Name));
jtw.WritePropertyName("$schema");
- jtw.WriteValue("https://json-schema.org/draft-04/schema#");
+ jtw.WriteStringValue("https://json-schema.org/draft-04/schema#");
jtw.WritePropertyName("definitions");
jtw.WriteStartObject();
@@ -57,7 +58,7 @@ public static void Generate(TextWriter textWriter, string? title = null) wher
jtw.WriteStartArray();
jtw.WriteStartObject();
jtw.WritePropertyName("$ref");
- jtw.WriteValue($"#/definitions/{type.GetCustomAttribute()?.Name}");
+ jtw.WriteStringValue($"#/definitions/{type.GetCustomAttribute()?.Name}");
jtw.WriteEndObject();
jtw.WriteEndArray();
@@ -90,22 +91,19 @@ private static void FindAllTypes(List types, Type type)
///
/// Writes the object definition.
///
- private static void WriteDefinition(Type type, JsonTextWriter jtw)
+ private static void WriteDefinition(Type type, Utf8JsonWriter jtw)
{
- var csa = type.GetCustomAttribute();
- if (csa == null)
- throw new InvalidOperationException($"Type {type.Name} does not have required ClassSchemaAttribute defined.");
-
+ var csa = type.GetCustomAttribute() ?? throw new InvalidOperationException($"Type {type.Name} does not have required ClassSchemaAttribute defined.");
jtw.WritePropertyName(csa.Name);
jtw.WriteStartObject();
jtw.WritePropertyName("type");
- jtw.WriteValue("object");
+ jtw.WriteStringValue("object");
jtw.WritePropertyName("title");
- jtw.WriteValue(CleanString(csa.Title) ?? StringConverter.ToSentenceCase(csa.Name)!);
+ jtw.WriteStringValue(CleanString(csa.Title) ?? StringConverter.ToSentenceCase(csa.Name)!);
if (csa.Description != null)
{
jtw.WritePropertyName("description");
- jtw.WriteValue(CleanString(csa.Description));
+ jtw.WriteStringValue(CleanString(csa.Description));
}
jtw.WritePropertyName("properties");
@@ -115,11 +113,11 @@ private static void WriteDefinition(Type type, JsonTextWriter jtw)
foreach (var pi in type.GetProperties())
{
- var jpa = pi.GetCustomAttribute();
+ var jpa = pi.GetCustomAttribute();
if (jpa == null)
continue;
- var name = jpa.PropertyName ?? StringConverter.ToCamelCase(pi.Name)!;
+ var name = jpa.Name ?? StringConverter.ToCamelCase(pi.Name)!;
jtw.WritePropertyName(name);
jtw.WriteStartObject();
@@ -127,13 +125,13 @@ private static void WriteDefinition(Type type, JsonTextWriter jtw)
if (psa != null)
{
jtw.WritePropertyName("type");
- jtw.WriteValue(GetJsonType(pi));
+ jtw.WriteStringValue(GetJsonType(pi));
jtw.WritePropertyName("title");
- jtw.WriteValue(CleanString(psa.Title) ?? StringConverter.ToSentenceCase(name)!);
+ jtw.WriteStringValue(CleanString(psa.Title) ?? StringConverter.ToSentenceCase(name)!);
if (psa.Description != null)
{
jtw.WritePropertyName("description");
- jtw.WriteValue(CleanString(psa.Description));
+ jtw.WriteStringValue(CleanString(psa.Description));
}
if (psa.IsMandatory)
@@ -145,25 +143,22 @@ private static void WriteDefinition(Type type, JsonTextWriter jtw)
jtw.WriteStartArray();
foreach (var opt in psa.Options)
- jtw.WriteValue(opt);
+ jtw.WriteStringValue(opt);
jtw.WriteEndArray();
}
}
else
{
- var pcsa = pi.GetCustomAttribute();
- if (pcsa == null)
- throw new InvalidOperationException($"Type '{type.Name}' Property '{pi.Name}' does not have a required PropertySchemaAttribute or PropertyCollectionSchemaAttribute.");
-
+ var pcsa = pi.GetCustomAttribute() ?? throw new InvalidOperationException($"Type '{type.Name}' Property '{pi.Name}' does not have a required PropertySchemaAttribute or PropertyCollectionSchemaAttribute.");
jtw.WritePropertyName("type");
- jtw.WriteValue("array");
+ jtw.WriteStringValue("array");
jtw.WritePropertyName("title");
- jtw.WriteValue(CleanString(pcsa.Title) ?? StringConverter.ToSentenceCase(name)!);
+ jtw.WriteStringValue(CleanString(pcsa.Title) ?? StringConverter.ToSentenceCase(name)!);
if (pcsa.Description != null)
{
jtw.WritePropertyName("description");
- jtw.WriteValue(CleanString(pcsa.Description));
+ jtw.WriteStringValue(CleanString(pcsa.Description));
}
jtw.WritePropertyName("items");
@@ -172,7 +167,7 @@ private static void WriteDefinition(Type type, JsonTextWriter jtw)
{
jtw.WriteStartObject();
jtw.WritePropertyName("type");
- jtw.WriteValue("string");
+ jtw.WriteStringValue("string");
jtw.WriteEndObject();
}
else
@@ -181,7 +176,7 @@ private static void WriteDefinition(Type type, JsonTextWriter jtw)
jtw.WriteStartObject();
jtw.WritePropertyName("$ref");
- jtw.WriteValue($"#/definitions/{t.GetCustomAttribute()!.Name}");
+ jtw.WriteStringValue($"#/definitions/{t.GetCustomAttribute()!.Name}");
jtw.WriteEndObject();
}
}
@@ -197,7 +192,7 @@ private static void WriteDefinition(Type type, JsonTextWriter jtw)
jtw.WriteStartArray();
foreach (var name in rqd)
- jtw.WriteValue(name);
+ jtw.WriteStringValue(name);
jtw.WriteEndArray();
}
@@ -241,6 +236,6 @@ internal static Type GetItemType(Type type)
///
/// Cleans the string.
///
- private static string? CleanString(string? text) => text?.Replace('`', '\'');
+ private static string? CleanString(string? text) => text;
}
}
\ No newline at end of file
diff --git a/src/OnRamp/Utility/JsonSerializer.cs b/src/OnRamp/Utility/JsonSerializer.cs
new file mode 100644
index 0000000..8c4b01e
--- /dev/null
+++ b/src/OnRamp/Utility/JsonSerializer.cs
@@ -0,0 +1,76 @@
+using OnRamp.Config;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.Text.Json.Serialization.Metadata;
+
+namespace OnRamp.Utility
+{
+ ///
+ /// Provides customized JSON serialization.
+ ///
+ public static class JsonSerializer
+ {
+ ///
+ /// Provides the default including .
+ ///
+ public static JsonSerializerOptions Options { get; } = new JsonSerializerOptions(JsonSerializerOptions.Default)
+ {
+ PropertyNameCaseInsensitive = true,
+ DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,
+ WriteIndented = false,
+ TypeInfoResolver = new OptInJsonTypeInfoResolver()
+ };
+
+ ///
+ /// Support opt-in properties only (explicit ) where the class is marked with ; otherwise, all properties are included as per default behavior.
+ ///
+ public class OptInJsonTypeInfoResolver : DefaultJsonTypeInfoResolver
+ {
+ ///
+ public override JsonTypeInfo GetTypeInfo(Type type, JsonSerializerOptions options)
+ {
+ var jti = base.GetTypeInfo(type, options);
+ if (jti.Kind == JsonTypeInfoKind.Object && jti.Type.GetCustomAttributes(typeof(CodeGenClassAttribute), true)?.Length > 0)
+ {
+ var props = new List(jti.Properties);
+ jti.Properties.Clear();
+
+ foreach (var prop in props)
+ {
+ if (prop.IsExtensionData || (prop.AttributeProvider is not null && prop.AttributeProvider.GetCustomAttributes(typeof(JsonPropertyNameAttribute), true)?.Length > 0))
+ jti.Properties.Add(prop);
+ }
+ }
+
+ return jti;
+ }
+ }
+
+ ///
+ /// Deserializes the into the specified .
+ ///
+ /// The UTF8 JSON .
+ /// The .
+ /// The resulting deserialized value.
+ public static object? Deserialize(Stream json, Type type) => System.Text.Json.JsonSerializer.Deserialize(json, type, Options);
+
+ ///
+ /// Deserializes the into the specified .
+ ///
+ /// The UTF8 JSON .
+ /// The .
+ /// The resulting deserialized value.
+ public static object? Deserialize(TextReader json, Type type) => System.Text.Json.JsonSerializer.Deserialize(json.ReadToEnd(), type, Options);
+
+ ///
+ /// Deserializes the into the specified .
+ ///
+ /// The UTF8 JSON .
+ /// The .
+ /// The resulting deserialized value.
+ public static object? Deserialize(string json, Type type) => System.Text.Json.JsonSerializer.Deserialize(json, type, Options);
+ }
+}
\ No newline at end of file
diff --git a/src/OnRamp/Utility/MarkdownDocumentationGenerator.cs b/src/OnRamp/Utility/MarkdownDocumentationGenerator.cs
index 778665b..92c4e65 100644
--- a/src/OnRamp/Utility/MarkdownDocumentationGenerator.cs
+++ b/src/OnRamp/Utility/MarkdownDocumentationGenerator.cs
@@ -1,12 +1,12 @@
// Copyright (c) Avanade. Licensed under the MIT License. See https://github.com/Avanade/OnRamp
-using Newtonsoft.Json;
using OnRamp.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
+using System.Text.Json.Serialization;
namespace OnRamp.Utility
{
@@ -49,7 +49,7 @@ private static void WriteObject(Type type, Func();
foreach (var pi in type.GetProperties())
{
- var jpa = pi.GetCustomAttribute();
+ var jpa = pi.GetCustomAttribute();
if (jpa == null)
continue;
@@ -57,7 +57,7 @@ private static void WriteObject(Type type, Func()
};
diff --git a/src/OnRamp/Utility/StreamExtensions.cs b/src/OnRamp/Utility/StreamExtensions.cs
index 8c88cf2..0df0530 100644
--- a/src/OnRamp/Utility/StreamExtensions.cs
+++ b/src/OnRamp/Utility/StreamExtensions.cs
@@ -1,8 +1,9 @@
// Copyright (c) Avanade. Licensed under the MIT License. See https://github.com/Avanade/OnRamp
-using Newtonsoft.Json;
using System;
using System.IO;
+using System.Linq;
+using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;
namespace OnRamp.Utility
@@ -26,7 +27,7 @@ public static class TextReaderExtensions
/// The JSON .
/// The value .
/// The corresponding value.
- public static object? DeserializeJson(this TextReader json, Type type) => JsonSerializer.Create().Deserialize(json ?? throw new ArgumentNullException(nameof(json)), type);
+ public static object? DeserializeJson(this TextReader json, Type type) => JsonSerializer.Deserialize(json ?? throw new ArgumentNullException(nameof(json)), type);
///
/// Create an instance of from the .
@@ -44,7 +45,7 @@ public static class TextReaderExtensions
/// The corresponding value.
public static object? DeserializeYaml(this TextReader yaml, Type type)
{
- var yml = new DeserializerBuilder().Build().Deserialize(yaml);
+ var yml = new DeserializerBuilder().WithNodeTypeResolver(new YamlNodeTypeResolver()).Build().Deserialize(yaml);
#pragma warning disable IDE0063 // Use simple 'using' statement; cannot as need to be more explicit with managing the close and dispose.
using (var ms = new MemoryStream())
@@ -61,5 +62,35 @@ public static class TextReaderExtensions
}
#pragma warning restore IDE0063
}
+
+ private class YamlNodeTypeResolver : INodeTypeResolver
+ {
+ private static readonly string[] boolValues = { "true", "false" };
+
+ ///
+ bool INodeTypeResolver.Resolve(NodeEvent? nodeEvent, ref Type currentType)
+ {
+ if (nodeEvent is Scalar scalar && scalar.Style == YamlDotNet.Core.ScalarStyle.Plain)
+ {
+ if (decimal.TryParse(scalar.Value, out _))
+ {
+ if (scalar.Value.Length > 1 && scalar.Value.StartsWith('0')) // Valid JSON does not support a number that starts with a zero.
+ currentType = typeof(string);
+ else
+ currentType = typeof(decimal);
+
+ return true;
+ }
+
+ if (boolValues.Contains(scalar.Value))
+ {
+ currentType = typeof(bool);
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/tests/OnRamp.Test/CodeGenConsoleTest.cs b/tests/OnRamp.Test/CodeGenConsoleTest.cs
index f5ee543..2719da5 100644
--- a/tests/OnRamp.Test/CodeGenConsoleTest.cs
+++ b/tests/OnRamp.Test/CodeGenConsoleTest.cs
@@ -18,7 +18,7 @@ public async Task A100_HelpDefaultOptions()
{
var c = new CodeGenConsole();
var r = await c.RunAsync("--help");
- Assert.AreEqual(0, r);
+ Assert.That(r, Is.EqualTo(0));
}
[Test]
@@ -26,7 +26,7 @@ public async Task A110_HelpSupportedOptions()
{
var c = new CodeGenConsole(options: SupportedOptions.IsSimulation | SupportedOptions.ExpectNoChanges);
var r = await c.RunAsync("--help");
- Assert.AreEqual(0, r);
+ Assert.That(r, Is.EqualTo(0));
}
[Test]
@@ -34,7 +34,7 @@ public async Task A120_InvalidOptionScript()
{
var c = new CodeGenConsole();
var r = await c.RunAsync("-s");
- Assert.AreEqual(1, r);
+ Assert.That(r, Is.EqualTo(1));
}
[Test]
@@ -42,7 +42,7 @@ public async Task A130_InvalidOptionConfig()
{
var c = new CodeGenConsole();
var r = await c.RunAsync("-c");
- Assert.AreEqual(1, r);
+ Assert.That(r, Is.EqualTo(1));
}
[Test]
@@ -50,7 +50,7 @@ public async Task A140_InvalidOptionDirectory()
{
var c = new CodeGenConsole();
var r = await c.RunAsync("-d ../../Bad");
- Assert.AreEqual(1, r);
+ Assert.That(r, Is.EqualTo(1));
}
[Test]
@@ -58,7 +58,7 @@ public async Task A150_InvalidOptionAssembly()
{
var c = new CodeGenConsole();
var r = await c.RunAsync("-a NotExists");
- Assert.AreEqual(1, r);
+ Assert.That(r, Is.EqualTo(1));
}
[Test]
@@ -66,7 +66,7 @@ public async Task A160_InvalidOptionConnectionString()
{
var c = new CodeGenConsole();
var r = await c.RunAsync("-db");
- Assert.AreEqual(1, r);
+ Assert.That(r, Is.EqualTo(1));
}
[Test]
@@ -74,7 +74,7 @@ public async Task A170_InvalidOptionScriptSupportedOptions()
{
var c = new CodeGenConsole(options: SupportedOptions.IsSimulation | SupportedOptions.ExpectNoChanges);
var r = await c.RunAsync("-c ValidEntity.yaml");
- Assert.AreEqual(1, r);
+ Assert.That(r, Is.EqualTo(1));
}
[Test]
@@ -83,7 +83,7 @@ public async Task A200_CodeGenException()
var a = CodeGeneratorArgs.Create("ValidEntity.yaml");
var c = new CodeGenConsole(a);
var r = await c.RunAsync();
- Assert.AreEqual(2, r);
+ Assert.That(r, Is.EqualTo(2));
}
[Test]
@@ -95,22 +95,22 @@ public async Task A300_SuccessWithNoCmdLineArgs()
var a = CodeGeneratorArgs.Create("ValidEntity.yaml", "Data/ValidEntity.yaml").AddParameter("Directory", "XA300").AddParameter("AppName", "Zzz");
var c = new CodeGenConsole(a);
var r = await c.RunAsync();
- Assert.AreEqual(0, r);
+ Assert.That(r, Is.EqualTo(0));
- Assert.IsTrue(Directory.Exists("XA300"));
- Assert.AreEqual(4, Directory.GetFiles("XA300").Length);
+ Assert.That(Directory.Exists("XA300"), Is.True);
+ Assert.That(Directory.GetFiles("XA300").Length, Is.EqualTo(4));
- Assert.IsTrue(File.Exists("XA300/Person.txt"));
- Assert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("XA300/Person.txt"));
+ Assert.That(File.Exists("XA300/Person.txt"), Is.True);
+ Assert.That(File.ReadAllText("XA300/Person.txt"), Is.EqualTo("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary"));
- Assert.IsTrue(File.Exists("XA300/Name.txt"));
- Assert.AreEqual("Name: Person.Name, Type: string", File.ReadAllText("XA300/Name.txt"));
+ Assert.That(File.Exists("XA300/Name.txt"), Is.True);
+ Assert.That(File.ReadAllText("XA300/Name.txt"), Is.EqualTo("Name: Person.Name, Type: string"));
- Assert.IsTrue(File.Exists("XA300/Age.txt"));
- Assert.AreEqual("Name: Person.Age, Type: int", File.ReadAllText("XA300/Age.txt"));
+ Assert.That(File.Exists("XA300/Age.txt"), Is.True);
+ Assert.That(File.ReadAllText("XA300/Age.txt"), Is.EqualTo("Name: Person.Age, Type: int"));
- Assert.IsTrue(File.Exists("XA300/Salary.txt"));
- Assert.AreEqual("Name: Person.Salary, Type: decimal?", File.ReadAllText("XA300/Salary.txt"));
+ Assert.That(File.Exists("XA300/Salary.txt"), Is.True);
+ Assert.That(File.ReadAllText("XA300/Salary.txt"), Is.EqualTo("Name: Person.Salary, Type: decimal?"));
}
[Test]
@@ -121,22 +121,22 @@ public async Task A310_SuccessWithCmdLineArgs()
var c = new CodeGenConsole();
var r = await c.RunAsync("-s ValidEntity.yaml -c Data/ValidEntity.yaml -p Directory=XA310 -p AppName=Zzz -a \"OnRamp.Test, Version=1.2.3.0, Culture=neutral, PublicKeyToken=null\"");
- Assert.AreEqual(0, r);
+ Assert.That(r, Is.EqualTo(0));
- Assert.IsTrue(Directory.Exists("XA310"));
- Assert.AreEqual(4, Directory.GetFiles("XA310").Length);
+ Assert.That(Directory.Exists("XA310"), Is.True);
+ Assert.That(Directory.GetFiles("XA310").Length, Is.EqualTo(4));
- Assert.IsTrue(File.Exists("XA310/Person.txt"));
- Assert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("XA310/Person.txt"));
+ Assert.That(File.Exists("XA310/Person.txt"), Is.True);
+ Assert.That(File.ReadAllText("XA310/Person.txt"), Is.EqualTo("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary"));
- Assert.IsTrue(File.Exists("XA310/Name.txt"));
- Assert.AreEqual("Name: Person.Name, Type: string", File.ReadAllText("XA310/Name.txt"));
+ Assert.That(File.Exists("XA310/Name.txt"), Is.True);
+ Assert.That(File.ReadAllText("XA310/Name.txt"), Is.EqualTo("Name: Person.Name, Type: string"));
- Assert.IsTrue(File.Exists("XA310/Age.txt"));
- Assert.AreEqual("Name: Person.Age, Type: int", File.ReadAllText("XA310/Age.txt"));
+ Assert.That(File.Exists("XA310/Age.txt"), Is.True);
+ Assert.That(File.ReadAllText("XA310/Age.txt"), Is.EqualTo("Name: Person.Age, Type: int"));
- Assert.IsTrue(File.Exists("XA310/Salary.txt"));
- Assert.AreEqual("Name: Person.Salary, Type: decimal?", File.ReadAllText("XA310/Salary.txt"));
+ Assert.That(File.Exists("XA310/Salary.txt"), Is.True);
+ Assert.That(File.ReadAllText("XA310/Salary.txt"), Is.EqualTo("Name: Person.Salary, Type: decimal?"));
}
[Test]
@@ -148,33 +148,33 @@ public async Task A400_ErrorExpectNoChanges()
// Run and it should fail as it cannot create.
var c = new CodeGenConsole();
var r = await c.RunAsync("-s ValidEntity.yaml -c Data/ValidEntity.yaml -enc -p Directory=XA400 -p AppName=Zzz -a \"OnRamp.Test, Version=1.2.3.0, Culture=neutral, PublicKeyToken=null\"");
- Assert.AreEqual(3, r);
+ Assert.That(r, Is.EqualTo(3));
// Run again and let it make changes.
c = new CodeGenConsole();
r = await c.RunAsync("-s ValidEntity.yaml -c Data/ValidEntity.yaml -p Directory=XA400 -p AppName=Zzz -a \"OnRamp.Test, Version=1.2.3.0, Culture=neutral, PublicKeyToken=null\"");
- Assert.AreEqual(0, r);
+ Assert.That(r, Is.EqualTo(0));
// Change the file and run again and it should fail as it cannot update.
var files = Directory.GetFiles("XA400");
- Assert.AreNotEqual(0, files.Length);
+ Assert.That(files.Length, Is.Not.EqualTo(0));
var content = File.ReadAllText(files.Last());
File.WriteAllText(files.Last(), content + "X");
c = new CodeGenConsole();
r = await c.RunAsync("-s ValidEntity.yaml -c Data/ValidEntity.yaml -enc -p Directory=XA400 -p AppName=Zzz -a \"OnRamp.Test, Version=1.2.3.0, Culture=neutral, PublicKeyToken=null\"");
- Assert.AreEqual(3, r);
+ Assert.That(r, Is.EqualTo(3));
}
[Test]
public void C100_GetBaseExeDirectory()
{
var ed = Environment.CurrentDirectory;
- Assert.IsTrue(ed.Contains(Path.Combine("bin", "debug"), StringComparison.InvariantCultureIgnoreCase) || ed.Contains(Path.Combine("bin", "release"), StringComparison.InvariantCultureIgnoreCase));
+ Assert.That(ed.Contains(Path.Combine("bin", "debug"), StringComparison.InvariantCultureIgnoreCase) || ed.Contains(Path.Combine("bin", "release"), StringComparison.InvariantCultureIgnoreCase), Is.True);
ed = CodeGenConsole.GetBaseExeDirectory();
- Assert.IsFalse(ed.Contains(Path.Combine("bin", "debug"), StringComparison.InvariantCultureIgnoreCase) || ed.Contains(Path.Combine("bin", "release"), StringComparison.InvariantCultureIgnoreCase));
+ Assert.That(ed.Contains(Path.Combine("bin", "debug"), StringComparison.InvariantCultureIgnoreCase) || ed.Contains(Path.Combine("bin", "release"), StringComparison.InvariantCultureIgnoreCase), Is.False);
}
}
}
\ No newline at end of file
diff --git a/tests/OnRamp.Test/CodeGeneratorTest.cs b/tests/OnRamp.Test/CodeGeneratorTest.cs
index 405873f..408c5e0 100644
--- a/tests/OnRamp.Test/CodeGeneratorTest.cs
+++ b/tests/OnRamp.Test/CodeGeneratorTest.cs
@@ -1,4 +1,5 @@
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
@@ -13,121 +14,121 @@ public class CodeGeneratorTest
public void A100_Script_DoesNotExist()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("DoesNotExist.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'DoesNotExist.yaml' does not exist.", ex.Message);
+ ClassicAssert.AreEqual("Script 'DoesNotExist.yaml' does not exist.", ex.Message);
}
[Test]
public void A110_Script_InvalidFileType()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("InvalidFileType.xml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'InvalidFileType.xml' is invalid: Stream content type is not supported.", ex.Message);
+ ClassicAssert.AreEqual("Script 'InvalidFileType.xml' is invalid: Stream content type is not supported.", ex.Message);
}
[Test]
public void A120_Script_InvalidYamlContent()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("InvalidYamlContent.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'InvalidYamlContent.yaml' is invalid: Error converting value \"\" to type 'OnRamp.Scripts.CodeGenScript'. Path '', line 1, position 15.", ex.Message);
+ ClassicAssert.AreEqual("Script 'InvalidYamlContent.yaml' is invalid: The JSON value could not be converted to OnRamp.Scripts.CodeGenScript. Path: $ | LineNumber: 0 | BytePositionInLine: 15.", ex.Message);
}
[Test]
public void A130_Script_InvalidJsonContent()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("InvalidJsonContent.json").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'InvalidJsonContent.json' is invalid: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.", ex.Message);
+ ClassicAssert.AreEqual("Script 'InvalidJsonContent.json' is invalid: '<' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.", ex.Message);
}
[Test]
public void A140_Script_InvalidEmpty()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("InvalidEmpty.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'InvalidEmpty.yaml' is invalid: Stream is empty.", ex.Message);
+ ClassicAssert.AreEqual("Script 'InvalidEmpty.yaml' is invalid: Stream is empty.", ex.Message);
}
[Test]
public void A150_Script_InvalidEmptyConfigType()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("InvalidEmptyConfigType.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'InvalidEmptyConfigType.yaml' is invalid: [ConfigType] Value is mandatory.", ex.Message);
+ ClassicAssert.AreEqual("Script 'InvalidEmptyConfigType.yaml' is invalid: [ConfigType] Value is mandatory.", ex.Message);
}
[Test]
public void A160_Script_InvalidConfigType()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("InvalidConfigType.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'InvalidConfigType.yaml' is invalid: [ConfigType] Type 'OnRamp.Scripts.CodeGenScriptItem' must inherit from ConfigRootBase.", ex.Message);
+ ClassicAssert.AreEqual("Script 'InvalidConfigType.yaml' is invalid: [ConfigType] Type 'OnRamp.Scripts.CodeGenScriptItem' must inherit from ConfigRootBase.", ex.Message);
}
[Test]
public void B100_Generator_DoesNotExist()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("GeneratorDoesNotExist.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'GeneratorDoesNotExist.yaml' is invalid: [Generate.Type] Type 'OnRamp.Test.Generators.DoesNotExist, OnRamp.Test' does not exist.", ex.Message);
+ ClassicAssert.AreEqual("Script 'GeneratorDoesNotExist.yaml' is invalid: [Generate.Type] Type 'OnRamp.Test.Generators.DoesNotExist, OnRamp.Test' does not exist.", ex.Message);
}
[Test]
public void B110_Generator_DiffConfigType()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("GeneratorDiffConfigType.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'GeneratorDiffConfigType.yaml' is invalid: [Generate.Type] Type 'OnRamp.Test.Generators.ScriptsGenerator, OnRamp.Test' RootType 'CodeGenScript' must be the same as the ConfigType 'EntityConfig'.", ex.Message);
+ ClassicAssert.AreEqual("Script 'GeneratorDiffConfigType.yaml' is invalid: [Generate.Type] Type 'OnRamp.Test.Generators.ScriptsGenerator, OnRamp.Test' RootType 'CodeGenScript' must be the same as the ConfigType 'EntityConfig'.", ex.Message);
}
[Test]
public void B120_Generator_NotInherits()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("GeneratorNotInherits.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'GeneratorNotInherits.yaml' is invalid: [Generate.Type] Type 'OnRamp.Test.Generators.NotInheritsGenerator, OnRamp.Test' does not implement CodeGeneratorBase and/or have a default parameterless constructor.", ex.Message);
+ ClassicAssert.AreEqual("Script 'GeneratorNotInherits.yaml' is invalid: [Generate.Type] Type 'OnRamp.Test.Generators.NotInheritsGenerator, OnRamp.Test' does not implement CodeGeneratorBase and/or have a default parameterless constructor.", ex.Message);
}
[Test]
public void B130_Generator_TemplateDoesNotExist()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("GeneratorTemplateDoesNotExist.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'GeneratorTemplateDoesNotExist.yaml' is invalid: [Generate.Template] Template 'DoesNotExist.hbs' does not exist.", ex.Message);
+ ClassicAssert.AreEqual("Script 'GeneratorTemplateDoesNotExist.yaml' is invalid: [Generate.Template] Template 'DoesNotExist.hbs' does not exist.", ex.Message);
}
[Test]
public async Task B140_Generator_RuntimeParams()
{
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("GeneratorRuntimeParams.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly));
- Assert.NotNull(cg);
- Assert.NotNull(cg.Scripts?.Generators);
- Assert.AreEqual(1, cg.Scripts.Generators.Count);
- Assert.AreEqual(3, cg.Scripts.Generators[0].RuntimeParameters.Count);
- Assert.IsTrue(cg.Scripts.Generators[0].RuntimeParameters.ContainsKey("IsGenOnce"));
- Assert.AreEqual(false, cg.Scripts.Generators[0].RuntimeParameters["IsGenOnce"]);
- Assert.IsTrue(cg.Scripts.Generators[0].RuntimeParameters.ContainsKey("Company"));
- Assert.AreEqual("Xxx", cg.Scripts.Generators[0].RuntimeParameters["Company"]);
- Assert.IsTrue(cg.Scripts.Generators[0].RuntimeParameters.ContainsKey("AppName"));
- Assert.AreEqual("Yyy", cg.Scripts.Generators[0].RuntimeParameters["AppName"]);
+ ClassicAssert.NotNull(cg);
+ ClassicAssert.NotNull(cg.Scripts?.Generators);
+ ClassicAssert.AreEqual(1, cg.Scripts.Generators.Count);
+ ClassicAssert.AreEqual(3, cg.Scripts.Generators[0].RuntimeParameters.Count);
+ ClassicAssert.IsTrue(cg.Scripts.Generators[0].RuntimeParameters.ContainsKey("IsGenOnce"));
+ ClassicAssert.AreEqual(false, cg.Scripts.Generators[0].RuntimeParameters["IsGenOnce"]);
+ ClassicAssert.IsTrue(cg.Scripts.Generators[0].RuntimeParameters.ContainsKey("Company"));
+ ClassicAssert.AreEqual("Xxx", cg.Scripts.Generators[0].RuntimeParameters["Company"]);
+ ClassicAssert.IsTrue(cg.Scripts.Generators[0].RuntimeParameters.ContainsKey("AppName"));
+ ClassicAssert.AreEqual("Yyy", cg.Scripts.Generators[0].RuntimeParameters["AppName"]);
}
[Test]
public void C100_Inherits_DiffConfigType()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("InheritsDiffConfigType.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'InheritsDiffConfigType.yaml' is invalid: Script 'InheritsDiffConfigType2.yaml' is invalid: [ConfigType] Inherited ConfigType 'OnRamp.Test.Config.InheritAlternateConfigType, OnRamp.Test' must be the same as root ConfigType 'OnRamp.Scripts.CodeGenScript'.", ex.Message);
+ ClassicAssert.AreEqual("Script 'InheritsDiffConfigType.yaml' is invalid: Script 'InheritsDiffConfigType2.yaml' is invalid: [ConfigType] Inherited ConfigType 'OnRamp.Test.Config.InheritAlternateConfigType, OnRamp.Test' must be the same as root ConfigType 'OnRamp.Scripts.CodeGenScript'.", ex.Message);
}
[Test]
public async Task C110_Inherits_SameConfigType()
{
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("InheritsSameConfigType.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly));
- Assert.NotNull(cg);
+ ClassicAssert.NotNull(cg);
}
[Test]
public void D100_Editor_TypeNotFound()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("EditorTypeNotFound.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'EditorTypeNotFound.yaml' is invalid: [EditorType] Type 'OnRamp.Scripts.NotFound' does not exist.", ex.Message);
+ ClassicAssert.AreEqual("Script 'EditorTypeNotFound.yaml' is invalid: [EditorType] Type 'OnRamp.Scripts.NotFound' does not exist.", ex.Message);
}
[Test]
public void D110_Editor_InvalidType()
{
var ex = Assert.ThrowsAsync(() => CodeGenerator.CreateAsync(new CodeGeneratorArgs("EditorInvalidType.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly)));
- Assert.AreEqual("Script 'EditorInvalidType.yaml' is invalid: [EditorType] Type 'OnRamp.Scripts.CodeGenScript' does not implement IConfigEditor and/or have a default parameterless constructor.", ex.Message);
+ ClassicAssert.AreEqual("Script 'EditorInvalidType.yaml' is invalid: [EditorType] Type 'OnRamp.Scripts.CodeGenScript' does not implement IConfigEditor and/or have a default parameterless constructor.", ex.Message);
}
[Test]
@@ -135,7 +136,7 @@ public async Task E100_Config_DoesNotExist()
{
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly));
var ex = Assert.ThrowsAsync(() => cg.GenerateAsync("DoesNotExist.yaml"));
- Assert.AreEqual("Config 'DoesNotExist.yaml' does not exist.", ex.Message);
+ ClassicAssert.AreEqual("Config 'DoesNotExist.yaml' does not exist.", ex.Message);
}
[Test]
@@ -143,7 +144,7 @@ public async Task E110_Config_InvalidFileType()
{
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly));
var ex = Assert.ThrowsAsync(() => cg.GenerateAsync("Data/InvalidFileType.xml"));
- Assert.AreEqual("Config 'Data/InvalidFileType.xml' is invalid: Stream content type is not supported.", ex.Message);
+ ClassicAssert.AreEqual("Config 'Data/InvalidFileType.xml' is invalid: Stream content type is not supported.", ex.Message);
}
[Test]
@@ -151,7 +152,7 @@ public async Task E120_Config_MandatoryValue()
{
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly));
var ex = Assert.ThrowsAsync(() => cg.GenerateAsync("Data/MandatoryValue.yaml"));
- Assert.AreEqual("Config 'Data/MandatoryValue.yaml' is invalid: [Property.Name] Value is mandatory.", ex.Message);
+ ClassicAssert.AreEqual("Config 'Data/MandatoryValue.yaml' is invalid: [Property.Name] Value is mandatory.", ex.Message);
}
[Test]
@@ -159,7 +160,7 @@ public async Task E130_Config_InvalidOption()
{
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity").AddAssembly(typeof(CodeGeneratorTest).Assembly));
var ex = Assert.ThrowsAsync(() => cg.GenerateAsync("Data/InvalidOption.yaml"));
- Assert.AreEqual("Config 'Data/InvalidOption.yaml' is invalid: [Property(Name='Salary').Type] Value 'unknown' is invalid; valid values are: 'string', 'int', 'decimal'.", ex.Message);
+ ClassicAssert.AreEqual("Config 'Data/InvalidOption.yaml' is invalid: [Property(Name='Salary').Type] Value 'unknown' is invalid; valid values are: 'string', 'int', 'decimal'.", ex.Message);
}
[Test]
@@ -167,7 +168,7 @@ public async Task E140_Config_NonUniqueValue()
{
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly));
var ex = Assert.ThrowsAsync(() => cg.GenerateAsync("Data/NonUniqueValue.yaml"));
- Assert.AreEqual("Config 'Data/NonUniqueValue.yaml' is invalid: [Property(Name='Amount').Name] Value 'Amount' is not unique.", ex.Message);
+ ClassicAssert.AreEqual("Config 'Data/NonUniqueValue.yaml' is invalid: [Property(Name='Amount').Name] Value 'Amount' is not unique.", ex.Message);
}
[Test]
@@ -179,27 +180,27 @@ public async Task F100_Generate_CreateAll()
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly).AddParameter("Directory", "F100").AddParameter("AppName", "Zzz"));
var stats = await cg .GenerateAsync("Data/ValidEntity.yaml");
- Assert.NotNull(stats);
- Assert.AreEqual(4, stats.CreatedCount);
- Assert.AreEqual(0, stats.UpdatedCount);
- Assert.AreEqual(0, stats.NotChangedCount);
- Assert.AreEqual(4, stats.LinesOfCodeCount);
- Assert.NotNull(stats.ElapsedMilliseconds);
+ ClassicAssert.NotNull(stats);
+ ClassicAssert.AreEqual(4, stats.CreatedCount);
+ ClassicAssert.AreEqual(0, stats.UpdatedCount);
+ ClassicAssert.AreEqual(0, stats.NotChangedCount);
+ ClassicAssert.AreEqual(4, stats.LinesOfCodeCount);
+ ClassicAssert.NotNull(stats.ElapsedMilliseconds);
- Assert.IsTrue(Directory.Exists("F100"));
- Assert.AreEqual(4, Directory.GetFiles("F100").Length);
+ ClassicAssert.IsTrue(Directory.Exists("F100"));
+ ClassicAssert.AreEqual(4, Directory.GetFiles("F100").Length);
- Assert.IsTrue(File.Exists("F100/Person.txt"));
- Assert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("F100/Person.txt"));
+ ClassicAssert.IsTrue(File.Exists("F100/Person.txt"));
+ ClassicAssert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("F100/Person.txt"));
- Assert.IsTrue(File.Exists("F100/Name.txt"));
- Assert.AreEqual("Name: Person.Name, Type: string", File.ReadAllText("F100/Name.txt"));
+ ClassicAssert.IsTrue(File.Exists("F100/Name.txt"));
+ ClassicAssert.AreEqual("Name: Person.Name, Type: string", File.ReadAllText("F100/Name.txt"));
- Assert.IsTrue(File.Exists("F100/Age.txt"));
- Assert.AreEqual("Name: Person.Age, Type: int", File.ReadAllText("F100/Age.txt"));
+ ClassicAssert.IsTrue(File.Exists("F100/Age.txt"));
+ ClassicAssert.AreEqual("Name: Person.Age, Type: int", File.ReadAllText("F100/Age.txt"));
- Assert.IsTrue(File.Exists("F100/Salary.txt"));
- Assert.AreEqual("Name: Person.Salary, Type: decimal?", File.ReadAllText("F100/Salary.txt"));
+ ClassicAssert.IsTrue(File.Exists("F100/Salary.txt"));
+ ClassicAssert.AreEqual("Name: Person.Salary, Type: decimal?", File.ReadAllText("F100/Salary.txt"));
}
[Test]
@@ -215,27 +216,27 @@ public async Task F110_Generate_Mix()
var cg = await CodeGenerator.CreateAsync(CodeGeneratorArgs.Create("ValidEntity.yaml").AddParameter("Directory", "F110").AddParameter("AppName", "Zzz"));
var stats = await cg .GenerateAsync("Data/ValidEntity.yaml");
- Assert.NotNull(stats);
- Assert.AreEqual(2, stats.CreatedCount);
- Assert.AreEqual(1, stats.UpdatedCount);
- Assert.AreEqual(1, stats.NotChangedCount);
- Assert.AreEqual(4, stats.LinesOfCodeCount);
- Assert.NotNull(stats.ElapsedMilliseconds);
+ ClassicAssert.NotNull(stats);
+ ClassicAssert.AreEqual(2, stats.CreatedCount);
+ ClassicAssert.AreEqual(1, stats.UpdatedCount);
+ ClassicAssert.AreEqual(1, stats.NotChangedCount);
+ ClassicAssert.AreEqual(4, stats.LinesOfCodeCount);
+ ClassicAssert.NotNull(stats.ElapsedMilliseconds);
- Assert.IsTrue(Directory.Exists("F110"));
- Assert.AreEqual(4, Directory.GetFiles("F110").Length);
+ ClassicAssert.IsTrue(Directory.Exists("F110"));
+ ClassicAssert.AreEqual(4, Directory.GetFiles("F110").Length);
- Assert.IsTrue(File.Exists("F110/Person.txt"));
- Assert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("F110/Person.txt"));
+ ClassicAssert.IsTrue(File.Exists("F110/Person.txt"));
+ ClassicAssert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("F110/Person.txt"));
- Assert.IsTrue(File.Exists("F110/Name.txt"));
- Assert.AreEqual("Name: Person.Name, Type: string", File.ReadAllText("F110/Name.txt"));
+ ClassicAssert.IsTrue(File.Exists("F110/Name.txt"));
+ ClassicAssert.AreEqual("Name: Person.Name, Type: string", File.ReadAllText("F110/Name.txt"));
- Assert.IsTrue(File.Exists("F110/Age.txt"));
- Assert.AreEqual("Name: Person.Age, Type: int", File.ReadAllText("F110/Age.txt"));
+ ClassicAssert.IsTrue(File.Exists("F110/Age.txt"));
+ ClassicAssert.AreEqual("Name: Person.Age, Type: int", File.ReadAllText("F110/Age.txt"));
- Assert.IsTrue(File.Exists("F110/Salary.txt"));
- Assert.AreEqual("Name: Person.Salary, Type: decimal?", File.ReadAllText("F110/Salary.txt"));
+ ClassicAssert.IsTrue(File.Exists("F110/Salary.txt"));
+ ClassicAssert.AreEqual("Name: Person.Salary, Type: decimal?", File.ReadAllText("F110/Salary.txt"));
}
[Test]
@@ -251,24 +252,24 @@ public async Task F120_Generate_Simulation()
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity.yaml") { IsSimulation = true }.AddAssembly(typeof(CodeGeneratorTest).Assembly).AddParameter("Directory", "F120").AddParameter("AppName", "Zzz"));
var stats = await cg.GenerateAsync("Data/ValidEntity.yaml");
- Assert.NotNull(stats);
- Assert.AreEqual(2, stats.CreatedCount);
- Assert.AreEqual(1, stats.UpdatedCount);
- Assert.AreEqual(1, stats.NotChangedCount);
- Assert.AreEqual(4, stats.LinesOfCodeCount);
- Assert.NotNull(stats.ElapsedMilliseconds);
+ ClassicAssert.NotNull(stats);
+ ClassicAssert.AreEqual(2, stats.CreatedCount);
+ ClassicAssert.AreEqual(1, stats.UpdatedCount);
+ ClassicAssert.AreEqual(1, stats.NotChangedCount);
+ ClassicAssert.AreEqual(4, stats.LinesOfCodeCount);
+ ClassicAssert.NotNull(stats.ElapsedMilliseconds);
- Assert.IsTrue(Directory.Exists("F120"));
- Assert.AreEqual(2, Directory.GetFiles("F120").Length);
+ ClassicAssert.IsTrue(Directory.Exists("F120"));
+ ClassicAssert.AreEqual(2, Directory.GetFiles("F120").Length);
- Assert.IsTrue(File.Exists("F120/Person.txt"));
- Assert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("F120/Person.txt"));
+ ClassicAssert.IsTrue(File.Exists("F120/Person.txt"));
+ ClassicAssert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("F120/Person.txt"));
- Assert.IsTrue(File.Exists("F120/Name.txt"));
- Assert.AreEqual("Name: Person.Name, Type: xxx", File.ReadAllText("F120/Name.txt"));
+ ClassicAssert.IsTrue(File.Exists("F120/Name.txt"));
+ ClassicAssert.AreEqual("Name: Person.Name, Type: xxx", File.ReadAllText("F120/Name.txt"));
- Assert.IsFalse(File.Exists("F120/Age.txt"));
- Assert.IsFalse(File.Exists("F120/Salary.txt"));
+ ClassicAssert.IsFalse(File.Exists("F120/Age.txt"));
+ ClassicAssert.IsFalse(File.Exists("F120/Salary.txt"));
}
[Test]
@@ -280,18 +281,18 @@ public async Task F130_Generate_WithConfigEditor()
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntityWithConfigEditor.yaml").AddAssembly(typeof(CodeGeneratorTest).Assembly).AddParameter("Directory", "F130"));
var stats = await cg.GenerateAsync("Data/ValidEntity.yaml");
- Assert.NotNull(stats);
- Assert.AreEqual(1, stats.CreatedCount);
- Assert.AreEqual(0, stats.UpdatedCount);
- Assert.AreEqual(0, stats.NotChangedCount);
- Assert.AreEqual(1, stats.LinesOfCodeCount);
- Assert.NotNull(stats.ElapsedMilliseconds);
+ ClassicAssert.NotNull(stats);
+ ClassicAssert.AreEqual(1, stats.CreatedCount);
+ ClassicAssert.AreEqual(0, stats.UpdatedCount);
+ ClassicAssert.AreEqual(0, stats.NotChangedCount);
+ ClassicAssert.AreEqual(1, stats.LinesOfCodeCount);
+ ClassicAssert.NotNull(stats.ElapsedMilliseconds);
- Assert.IsTrue(Directory.Exists("F130"));
- Assert.AreEqual(1, Directory.GetFiles("F130").Length);
+ ClassicAssert.IsTrue(Directory.Exists("F130"));
+ ClassicAssert.AreEqual(1, Directory.GetFiles("F130").Length);
- Assert.IsTrue(File.Exists("F130/PERSON.txt"));
- Assert.AreEqual("Name: PERSON, CompanyName: Xxx, AppName: Yyy, Properties: Name, Age, Salary", File.ReadAllText("F130/PERSON.txt"));
+ ClassicAssert.IsTrue(File.Exists("F130/PERSON.txt"));
+ ClassicAssert.AreEqual("Name: PERSON, CompanyName: Xxx, AppName: Yyy, Properties: Name, Age, Salary", File.ReadAllText("F130/PERSON.txt"));
}
[Test]
@@ -302,7 +303,7 @@ public async Task F140_Generate_ExpectNoChanges_Error()
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity.yaml") { ExpectNoChanges = true }.AddAssembly(typeof(CodeGeneratorTest).Assembly).AddParameter("Directory", "F140"));
var ex = Assert.ThrowsAsync(() => cg.GenerateAsync("Data/ValidEntity.yaml"));
- Assert.IsTrue(ex.Message.EndsWith("Person.txt' would be created as a result of the code generation."));
+ ClassicAssert.IsTrue(ex.Message.EndsWith("Person.txt' would be created as a result of the code generation."));
}
[Test]
@@ -320,24 +321,24 @@ public async Task F150_Generate_ExpectNoChanges_Success()
var cg = await CodeGenerator.CreateAsync(new CodeGeneratorArgs("ValidEntity.yaml") { ExpectNoChanges = true }.AddAssembly(typeof(CodeGeneratorTest).Assembly).AddParameter("Directory", "F150").AddParameter("AppName", "Zzz"));
var stats = await cg .GenerateAsync("Data/ValidEntity.yaml");
- Assert.NotNull(stats);
- Assert.AreEqual(0, stats.CreatedCount);
- Assert.AreEqual(0, stats.UpdatedCount);
- Assert.AreEqual(4, stats.NotChangedCount);
- Assert.AreEqual(4, stats.LinesOfCodeCount);
- Assert.NotNull(stats.ElapsedMilliseconds);
+ ClassicAssert.NotNull(stats);
+ ClassicAssert.AreEqual(0, stats.CreatedCount);
+ ClassicAssert.AreEqual(0, stats.UpdatedCount);
+ ClassicAssert.AreEqual(4, stats.NotChangedCount);
+ ClassicAssert.AreEqual(4, stats.LinesOfCodeCount);
+ ClassicAssert.NotNull(stats.ElapsedMilliseconds);
- Assert.IsTrue(File.Exists("F150/Person.txt"));
- Assert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("F150/Person.txt"));
+ ClassicAssert.IsTrue(File.Exists("F150/Person.txt"));
+ ClassicAssert.AreEqual("Name: Person, CompanyName: Xxx, AppName: Zzz, Properties: Name, Age, Salary", File.ReadAllText("F150/Person.txt"));
- Assert.IsTrue(File.Exists("F150/Name.txt"));
- Assert.AreEqual("Name: Person.Name, Type: string", File.ReadAllText("F150/Name.txt"));
+ ClassicAssert.IsTrue(File.Exists("F150/Name.txt"));
+ ClassicAssert.AreEqual("Name: Person.Name, Type: string", File.ReadAllText("F150/Name.txt"));
- Assert.IsTrue(File.Exists("F150/Age.txt"));
- Assert.AreEqual("Name: Person.Age, Type: int", File.ReadAllText("F150/Age.txt"));
+ ClassicAssert.IsTrue(File.Exists("F150/Age.txt"));
+ ClassicAssert.AreEqual("Name: Person.Age, Type: int", File.ReadAllText("F150/Age.txt"));
- Assert.IsTrue(File.Exists("F150/Salary.txt"));
- Assert.AreEqual("Name: Person.Salary, Type: decimal?", File.ReadAllText("F150/Salary.txt"));
+ ClassicAssert.IsTrue(File.Exists("F150/Salary.txt"));
+ ClassicAssert.AreEqual("Name: Person.Salary, Type: decimal?", File.ReadAllText("F150/Salary.txt"));
}
}
}
\ No newline at end of file
diff --git a/tests/OnRamp.Test/Config/EntityConfig.cs b/tests/OnRamp.Test/Config/EntityConfig.cs
index 5d30ed5..d255284 100644
--- a/tests/OnRamp.Test/Config/EntityConfig.cs
+++ b/tests/OnRamp.Test/Config/EntityConfig.cs
@@ -1,23 +1,22 @@
using OnRamp.Config;
-using Newtonsoft.Json;
using System.Collections.Generic;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
#nullable enable
namespace OnRamp.Test.Config
{
- [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[CodeGenClass("Entity", Title = "'Entity' object.", Description = "The `Entity` object.", Markdown = "This is a _sample_ markdown.", ExampleMarkdown = "This is an `example` markdown.")]
[CodeGenCategory("Key", Title = "Provides the _Key_ configuration.")]
[CodeGenCategory("Collection", Title = "Provides related child (hierarchical) configuration.")]
public class EntityConfig : ConfigRootBase
{
- [JsonProperty("name")]
+ [JsonPropertyName("name")]
[CodeGenProperty("Key", Title = "The entity name.", IsMandatory = true)]
public string? Name { get; set; }
- [JsonProperty("properties")]
+ [JsonPropertyName("properties")]
[CodeGenPropertyCollection("Collection", Title = "The `Property` collection.", IsImportant = true)]
public List? Properties { get; set; }
diff --git a/tests/OnRamp.Test/Config/PropertyConfig.cs b/tests/OnRamp.Test/Config/PropertyConfig.cs
index 14713a7..96a61e4 100644
--- a/tests/OnRamp.Test/Config/PropertyConfig.cs
+++ b/tests/OnRamp.Test/Config/PropertyConfig.cs
@@ -1,27 +1,26 @@
using OnRamp.Config;
-using Newtonsoft.Json;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
#nullable enable
namespace OnRamp.Test.Config
{
- [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[CodeGenClass("Property", Title = "'Property' object.", Description = "The `Property` object.")]
[CodeGenCategory("Key", Title = "Provides the _Key_ configuration.")]
public class PropertyConfig : ConfigBase
{
public override string QualifiedKeyName => BuildQualifiedKeyName("Property", Name);
- [JsonProperty("name")]
+ [JsonPropertyName("name")]
[CodeGenProperty("Key", Title = "The property name.", IsMandatory = true, IsUnique = true)]
public string? Name { get; set; }
- [JsonProperty("type")]
+ [JsonPropertyName("type")]
[CodeGenProperty("Key", Title = "The property type.", Description = "This is a more detailed description for the property type.", IsImportant = true, Options = new string[] { "string", "int", "decimal" })]
public string? Type { get; set; }
- [JsonProperty("isNullable")]
+ [JsonPropertyName("isNullable")]
[CodeGenProperty("Key", Title = "Indicates whether the property is nullable.")]
public bool? IsNullable { get; set; }
diff --git a/tests/OnRamp.Test/ConfigBaseTest.cs b/tests/OnRamp.Test/ConfigBaseTest.cs
index a720375..94e17f6 100644
--- a/tests/OnRamp.Test/ConfigBaseTest.cs
+++ b/tests/OnRamp.Test/ConfigBaseTest.cs
@@ -1,8 +1,8 @@
-using Newtonsoft.Json.Linq;
-using NUnit.Framework;
+using NUnit.Framework;
using OnRamp.Config;
using OnRamp.Test.Config;
-using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
namespace OnRamp.Test
{
@@ -15,16 +15,16 @@ public void IsTrue()
bool val1 = true;
bool? val2 = true;
- Assert.IsTrue(ConfigBase.IsTrue(val1));
- Assert.IsTrue(ConfigBase.IsTrue(val2));
+ Assert.That(ConfigBase.IsTrue(val1), Is.True);
+ Assert.That(ConfigBase.IsTrue(val2), Is.True);
val1 = false;
val2 = false;
- Assert.IsFalse(ConfigBase.IsTrue(val1));
- Assert.IsFalse(ConfigBase.IsTrue(val2));
+ Assert.That(ConfigBase.IsTrue(val1), Is.False);
+ Assert.That(ConfigBase.IsTrue(val2), Is.False);
val2 = null;
- Assert.IsFalse(ConfigBase.IsTrue(val2));
+ Assert.That(ConfigBase.IsTrue(val2), Is.False);
}
[Test]
@@ -33,84 +33,89 @@ public void IsFalse()
bool val1 = true;
bool? val2 = true;
- Assert.IsFalse(ConfigBase.IsFalse(val1));
- Assert.IsFalse(ConfigBase.IsFalse(val2));
+ Assert.That(ConfigBase.IsFalse(val1), Is.False);
+ Assert.That(ConfigBase.IsFalse(val2), Is.False);
val1 = false;
val2 = false;
- Assert.IsTrue(ConfigBase.IsFalse(val1));
- Assert.IsTrue(ConfigBase.IsFalse(val2));
+ Assert.That(ConfigBase.IsFalse(val1), Is.True);
+ Assert.That(ConfigBase.IsFalse(val2), Is.True);
val2 = null;
- Assert.IsTrue(ConfigBase.IsFalse(val2));
+ Assert.That(ConfigBase.IsFalse(val2), Is.True);
}
[Test]
public void DefaultWhereNull_String()
{
- Assert.AreEqual("ABC", ConfigBase.DefaultWhereNull("ABC", () => "DEF"));
- Assert.AreEqual("", ConfigBase.DefaultWhereNull("", () => "DEF"));
- Assert.AreEqual("DEF", ConfigBase.DefaultWhereNull(null, () => "DEF"));
+ Assert.That(ConfigBase.DefaultWhereNull("ABC", () => "DEF"), Is.EqualTo("ABC"));
+ Assert.That(ConfigBase.DefaultWhereNull("", () => "DEF"), Is.EqualTo(""));
+ Assert.That(ConfigBase.DefaultWhereNull(null, () => "DEF"), Is.EqualTo("DEF"));
}
[Test]
public void DefaultWhereNull_Bool()
{
- Assert.IsTrue(ConfigBase.DefaultWhereNull(true, () => false));
- Assert.IsFalse(ConfigBase.DefaultWhereNull(false, () => true));
- Assert.IsTrue(ConfigBase.DefaultWhereNull(null, () => true));
+ Assert.That(ConfigBase.DefaultWhereNull(true, () => false), Is.True);
+ Assert.That(ConfigBase.DefaultWhereNull(false, () => true), Is.False);
+ Assert.That(ConfigBase.DefaultWhereNull(null, () => true), Is.True);
}
[Test]
public void CompareValue_String()
{
- Assert.IsTrue(ConfigBase.CompareValue("ABC", "ABC"));
- Assert.IsFalse(ConfigBase.CompareValue("ABC", "DEF"));
- Assert.IsFalse(ConfigBase.CompareValue(null, "DEF"));
+ Assert.That(ConfigBase.CompareValue("ABC", "ABC"), Is.True);
+ Assert.That(ConfigBase.CompareValue("ABC", "DEF"), Is.False);
+ Assert.That(ConfigBase.CompareValue(null, "DEF"), Is.False);
}
[Test]
public void CompareValue_Bool()
{
- Assert.IsTrue(ConfigBase.CompareValue(true, true));
- Assert.IsFalse(ConfigBase.CompareValue(true, false));
- Assert.IsFalse(ConfigBase.CompareValue(null, true));
+ Assert.That(ConfigBase.CompareValue(true, true), Is.True);
+ Assert.That(ConfigBase.CompareValue(true, false), Is.False);
+ Assert.That(ConfigBase.CompareValue(null, true), Is.False);
}
[Test]
public void CompareNullOrValue_String()
{
- Assert.IsTrue(ConfigBase.CompareNullOrValue("ABC", "ABC"));
- Assert.IsFalse(ConfigBase.CompareNullOrValue("ABC", "DEF"));
- Assert.IsTrue(ConfigBase.CompareNullOrValue(null, "DEF"));
+ Assert.That(ConfigBase.CompareNullOrValue("ABC", "ABC"), Is.True);
+ Assert.That(ConfigBase.CompareNullOrValue("ABC", "DEF"), Is.False);
+ Assert.That(ConfigBase.CompareNullOrValue(null, "DEF"), Is.True);
}
[Test]
public void CompareNullOrValue_Bool()
{
- Assert.IsTrue(ConfigBase.CompareNullOrValue(true, true));
- Assert.IsFalse(ConfigBase.CompareNullOrValue(true, false));
- Assert.IsTrue(ConfigBase.CompareNullOrValue(null, true));
+ Assert.That(ConfigBase.CompareNullOrValue(true, true), Is.True);
+ Assert.That(ConfigBase.CompareNullOrValue(true, false), Is.False);
+ Assert.That(ConfigBase.CompareNullOrValue(null, true), Is.True);
}
[Test]
public void ExtraProperties()
{
- var ec = new EntityConfig { ExtraProperties = new Dictionary { { "XXX", new JValue("AAA") } } };
+ var ec = (EntityConfig)Utility.JsonSerializer.Deserialize("{ \"name\": \"Bob\", \"XXX\": \"AAA\", \"YYY\": { \"BBB\": \"CCC\" } }", typeof(EntityConfig));
- JValue jv = ec.GetExtraProperty("XXX");
- Assert.AreEqual("AAA", jv.ToObject(typeof(string)));
+ Assert.That(ec.ExtraProperties.Count, Is.EqualTo(2));
+ Assert.That(ec.GetExtraProperty("XXX"), Is.EqualTo("AAA"));
+ Assert.That(ec.GetExtraProperty("JJJ", "CCC"), Is.EqualTo("CCC"));
- jv = ec.GetExtraProperty("YYY", new JValue("BBB"));
- Assert.AreEqual("BBB", jv.ToObject(typeof(string)));
+ Assert.That(ec.TryGetExtraProperty("XXX", out var val), Is.True);
+ Assert.That(val, Is.EqualTo("AAA"));
- Assert.IsNull(ec.GetExtraProperty("YYY"));
+ Assert.That(ec.TryGetExtraProperty("JJJ", out val), Is.False);
+ Assert.That(val, Is.Null);
- Assert.IsTrue(ec.TryGetExtraProperty("XXX", out jv));
- Assert.AreEqual("AAA", jv.ToObject(typeof(string)));
+ Assert.That(ec.TryGetExtraProperty("YYY", out var bval), Is.True);
+ Assert.That(bval, Is.Not.Null);
+ Assert.That(bval.BBB, Is.EqualTo("CCC"));
+ }
- Assert.IsFalse(ec.TryGetExtraProperty("YYY", out jv));
- Assert.IsNull(jv);
+ private class YYY
+ {
+ public string BBB { get; set; }
}
[Test]
@@ -120,18 +125,18 @@ public void CustomProperties()
ec.CustomProperties.Add("XXX", "AAA");
string sv = ec.GetCustomProperty("XXX");
- Assert.AreEqual("AAA", sv);
+ Assert.That(sv, Is.EqualTo("AAA"));
sv = ec.GetCustomProperty("YYY", "BBB");
- Assert.AreEqual("BBB", sv);
+ Assert.That(sv, Is.EqualTo("BBB"));
- Assert.IsNull(ec.GetCustomProperty("YYY"));
+ Assert.That(ec.GetCustomProperty("YYY"), Is.Null);
- Assert.IsTrue(ec.TryGetCustomProperty("XXX", out sv));
- Assert.AreEqual("AAA", sv);
+ Assert.That(ec.TryGetCustomProperty("XXX", out sv), Is.True);
+ Assert.That(sv, Is.EqualTo("AAA"));
- Assert.IsFalse(ec.TryGetCustomProperty("YYY", out sv));
- Assert.IsNull(sv);
+ Assert.That(ec.TryGetCustomProperty("YYY", out sv), Is.False);
+ Assert.That(sv, Is.Null);
}
}
}
\ No newline at end of file
diff --git a/tests/OnRamp.Test/ConfigRootBaseTest.cs b/tests/OnRamp.Test/ConfigRootBaseTest.cs
index 351de6e..9fd6512 100644
--- a/tests/OnRamp.Test/ConfigRootBaseTest.cs
+++ b/tests/OnRamp.Test/ConfigRootBaseTest.cs
@@ -1,4 +1,5 @@
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using OnRamp.Test.Config;
using System;
using System.Collections.Generic;
@@ -15,29 +16,29 @@ public void RuntimeParameters()
var ec = new EntityConfig();
ec.RuntimeParameters.Add("XXX", "123");
- Assert.AreEqual("123", ec.GetRuntimeParameter("XXX", "456"));
- Assert.AreEqual(123, ec.GetRuntimeParameter("XXX", 456));
- Assert.AreEqual("456", ec.GetRuntimeParameter("YYY", "456"));
- Assert.AreEqual(456, ec.GetRuntimeParameter("YYY", 456));
+ ClassicAssert.AreEqual("123", ec.GetRuntimeParameter("XXX", "456"));
+ ClassicAssert.AreEqual(123, ec.GetRuntimeParameter("XXX", 456));
+ ClassicAssert.AreEqual("456", ec.GetRuntimeParameter("YYY", "456"));
+ ClassicAssert.AreEqual(456, ec.GetRuntimeParameter("YYY", 456));
- Assert.IsTrue(ec.TryGetRuntimeParameter("XXX", out string sv));
- Assert.AreEqual("123", sv);
+ ClassicAssert.IsTrue(ec.TryGetRuntimeParameter("XXX", out string sv));
+ ClassicAssert.AreEqual("123", sv);
- Assert.IsFalse(ec.TryGetRuntimeParameter("YYY", out sv));
- Assert.IsNull(sv);
+ ClassicAssert.IsFalse(ec.TryGetRuntimeParameter("YYY", out sv));
+ ClassicAssert.IsNull(sv);
- Assert.IsTrue(ec.TryGetRuntimeParameter("XXX", out int iv));
- Assert.AreEqual(123, iv);
+ ClassicAssert.IsTrue(ec.TryGetRuntimeParameter("XXX", out int iv));
+ ClassicAssert.AreEqual(123, iv);
- Assert.IsFalse(ec.TryGetRuntimeParameter("YYY", out iv));
- Assert.AreEqual(0, iv);
+ ClassicAssert.IsFalse(ec.TryGetRuntimeParameter("YYY", out iv));
+ ClassicAssert.AreEqual(0, iv);
- Assert.IsFalse(ec.TryGetRuntimeParameter("YYY", out int? nv));
- Assert.IsNull(nv);
+ ClassicAssert.IsFalse(ec.TryGetRuntimeParameter("YYY", out int? nv));
+ ClassicAssert.IsNull(nv);
ec.ResetRuntimeParameters();
- Assert.AreEqual(0, ec.RuntimeParameters.Count);
- Assert.AreEqual("456", ec.GetRuntimeParameter("XXX", "456"));
+ ClassicAssert.AreEqual(0, ec.RuntimeParameters.Count);
+ ClassicAssert.AreEqual("456", ec.GetRuntimeParameter("XXX", "456"));
}
[Test]
@@ -54,10 +55,10 @@ public void MergeRuntimeParameters()
ec.RuntimeParameters.Add("ZZZ", "ABC");
ec.MergeRuntimeParameters(rp);
- Assert.AreEqual(3, ec.RuntimeParameters.Count);
- Assert.AreEqual("456", ec.GetRuntimeParameter("XXX"));
- Assert.AreEqual("789", ec.GetRuntimeParameter("YYY"));
- Assert.AreEqual("ABC", ec.GetRuntimeParameter("ZZZ"));
+ ClassicAssert.AreEqual(3, ec.RuntimeParameters.Count);
+ ClassicAssert.AreEqual("456", ec.GetRuntimeParameter("XXX"));
+ ClassicAssert.AreEqual("789", ec.GetRuntimeParameter("YYY"));
+ ClassicAssert.AreEqual("ABC", ec.GetRuntimeParameter("ZZZ"));
}
[Test]
@@ -67,8 +68,8 @@ public void DateTimeNow()
var ec = new EntityConfig();
var dtn = ec.DateTimeNow;
- Assert.IsTrue(dtn > now);
- Assert.AreEqual(DateTimeKind.Local, dtn.Kind);
+ ClassicAssert.IsTrue(dtn > now);
+ ClassicAssert.AreEqual(DateTimeKind.Local, dtn.Kind);
}
[Test]
@@ -78,15 +79,15 @@ public void DateTimeUtcNow()
var ec = new EntityConfig();
var dtn = ec.DateTimeUtcNow;
- Assert.IsTrue(dtn > now);
- Assert.AreEqual(DateTimeKind.Utc, dtn.Kind);
+ ClassicAssert.IsTrue(dtn > now);
+ ClassicAssert.AreEqual(DateTimeKind.Utc, dtn.Kind);
}
[Test]
public void NewGuid()
{
var ec = new EntityConfig();
- Assert.AreNotEqual(ec.NewGuid, ec.NewGuid);
+ ClassicAssert.AreNotEqual(ec.NewGuid, ec.NewGuid);
}
[Test]
@@ -94,9 +95,9 @@ public void SelectGenResult()
{
var ec = new EntityConfig();
var r = ec.SelectGenResult;
- Assert.IsNotNull(r);
- Assert.AreEqual(1, r.Count());
- Assert.AreSame(ec, r.First());
+ ClassicAssert.IsNotNull(r);
+ ClassicAssert.AreEqual(1, r.Count());
+ ClassicAssert.AreSame(ec, r.First());
}
}
}
\ No newline at end of file
diff --git a/tests/OnRamp.Test/Expected/Schema.json b/tests/OnRamp.Test/Expected/Schema.json
index 3e756eb..139a842 100644
--- a/tests/OnRamp.Test/Expected/Schema.json
+++ b/tests/OnRamp.Test/Expected/Schema.json
@@ -4,8 +4,8 @@
"definitions": {
"Entity": {
"type": "object",
- "title": "'Entity' object.",
- "description": "The 'Entity' object.",
+ "title": "\u0027Entity\u0027 object.",
+ "description": "The \u0060Entity\u0060 object.",
"properties": {
"name": {
"type": "string",
@@ -13,7 +13,7 @@
},
"properties": {
"type": "array",
- "title": "The 'Property' collection.",
+ "title": "The \u0060Property\u0060 collection.",
"items": {
"$ref": "#/definitions/Property"
}
@@ -25,8 +25,8 @@
},
"Property": {
"type": "object",
- "title": "'Property' object.",
- "description": "The 'Property' object.",
+ "title": "\u0027Property\u0027 object.",
+ "description": "The \u0060Property\u0060 object.",
"properties": {
"name": {
"type": "string",
diff --git a/tests/OnRamp.Test/HandlebarsHelpersTest.cs b/tests/OnRamp.Test/HandlebarsHelpersTest.cs
index a7f29c1..6427be9 100644
--- a/tests/OnRamp.Test/HandlebarsHelpersTest.cs
+++ b/tests/OnRamp.Test/HandlebarsHelpersTest.cs
@@ -1,4 +1,5 @@
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using OnRamp.Utility;
using System;
@@ -11,195 +12,195 @@ public class HandlebarsHelpersTest
public void IfEq()
{
var g = new HandlebarsCodeGenerator("{{#ifeq Name 'Bob'}}Hi Fella.{{else}}Hi {{Name}}.{{/ifeq}}");
- Assert.AreEqual("Hi Fella.", g.Generate(new { Name = "Bob" }));
- Assert.AreEqual("Hi Mary.", g.Generate(new { Name = "Mary" }));
+ ClassicAssert.AreEqual("Hi Fella.", g.Generate(new { Name = "Bob" }));
+ ClassicAssert.AreEqual("Hi Mary.", g.Generate(new { Name = "Mary" }));
}
[Test]
public void IfNe()
{
var g = new HandlebarsCodeGenerator("{{#ifne Name 'Bob' 'Gary'}}Hi {{Name}}.{{else}}Hi Fella.{{/ifne}}");
- Assert.AreEqual("Hi Fella.", g.Generate(new { Name = "Bob" }));
- Assert.AreEqual("Hi Fella.", g.Generate(new { Name = "Gary" }));
- Assert.AreEqual("Hi Mary.", g.Generate(new { Name = "Mary" }));
+ ClassicAssert.AreEqual("Hi Fella.", g.Generate(new { Name = "Bob" }));
+ ClassicAssert.AreEqual("Hi Fella.", g.Generate(new { Name = "Gary" }));
+ ClassicAssert.AreEqual("Hi Mary.", g.Generate(new { Name = "Mary" }));
}
[Test]
public void IfLe()
{
var g = new HandlebarsCodeGenerator("{{#ifle Amount -1}}Negative{{else}}Positive{{/ifle}}");
- Assert.AreEqual("Positive", g.Generate(new { Amount = 1 }));
- Assert.AreEqual("Positive", g.Generate(new { Amount = 0 }));
- Assert.AreEqual("Negative", g.Generate(new { Amount = -1 }));
- Assert.AreEqual("Negative", g.Generate(new { Amount = -2 }));
+ ClassicAssert.AreEqual("Positive", g.Generate(new { Amount = 1 }));
+ ClassicAssert.AreEqual("Positive", g.Generate(new { Amount = 0 }));
+ ClassicAssert.AreEqual("Negative", g.Generate(new { Amount = -1 }));
+ ClassicAssert.AreEqual("Negative", g.Generate(new { Amount = -2 }));
}
[Test]
public void IfGe()
{
var g = new HandlebarsCodeGenerator("{{#ifge Amount 0}}Positive{{else}}Negative{{/ifge}}");
- Assert.AreEqual("Positive", g.Generate(new { Amount = 1 }));
- Assert.AreEqual("Positive", g.Generate(new { Amount = 0 }));
- Assert.AreEqual("Negative", g.Generate(new { Amount = -1 }));
- Assert.AreEqual("Negative", g.Generate(new { Amount = -2 }));
+ ClassicAssert.AreEqual("Positive", g.Generate(new { Amount = 1 }));
+ ClassicAssert.AreEqual("Positive", g.Generate(new { Amount = 0 }));
+ ClassicAssert.AreEqual("Negative", g.Generate(new { Amount = -1 }));
+ ClassicAssert.AreEqual("Negative", g.Generate(new { Amount = -2 }));
}
[Test]
public void IfVal()
{
var g = new HandlebarsCodeGenerator("{{#ifval First Last}}true{{else}}false{{/ifval}}");
- Assert.AreEqual("false", g.Generate(new { First = (string)null, Last = (string)null }));
- Assert.AreEqual("false", g.Generate(new { First = "Jane", Last = (string)null }));
- Assert.AreEqual("false", g.Generate(new { First = (string)null, Last = "Doe" }));
- Assert.AreEqual("true", g.Generate(new { First = "Jane", Last = "Doe" }));
+ ClassicAssert.AreEqual("false", g.Generate(new { First = (string)null, Last = (string)null }));
+ ClassicAssert.AreEqual("false", g.Generate(new { First = "Jane", Last = (string)null }));
+ ClassicAssert.AreEqual("false", g.Generate(new { First = (string)null, Last = "Doe" }));
+ ClassicAssert.AreEqual("true", g.Generate(new { First = "Jane", Last = "Doe" }));
}
[Test]
public void IfNull()
{
var g = new HandlebarsCodeGenerator("{{#ifnull First Last}}true{{else}}false{{/ifnull}}");
- Assert.AreEqual("true", g.Generate(new { First = (string)null, Last = (string)null }));
- Assert.AreEqual("false", g.Generate(new { First = "Jane", Last = (string)null }));
- Assert.AreEqual("false", g.Generate(new { First = (string)null, Last = "Doe" }));
- Assert.AreEqual("false", g.Generate(new { First = "Jane", Last = "Doe" }));
+ ClassicAssert.AreEqual("true", g.Generate(new { First = (string)null, Last = (string)null }));
+ ClassicAssert.AreEqual("false", g.Generate(new { First = "Jane", Last = (string)null }));
+ ClassicAssert.AreEqual("false", g.Generate(new { First = (string)null, Last = "Doe" }));
+ ClassicAssert.AreEqual("false", g.Generate(new { First = "Jane", Last = "Doe" }));
}
[Test]
public void IfOr()
{
var g = new HandlebarsCodeGenerator("{{#ifor Val1 Val2}}true{{else}}false{{/ifor}}");
- Assert.AreEqual("false", g.Generate(new { Val1 = false, Val2 = false }));
- Assert.AreEqual("true", g.Generate(new { Val1 = true, Val2 = false }));
- Assert.AreEqual("true", g.Generate(new { Val1 = false, Val2 = true }));
- Assert.AreEqual("true", g.Generate(new { Val1 = true, Val2 = true }));
-
- Assert.AreEqual("false", g.Generate(new { Val1 = false, Val2 = (string)null }));
- Assert.AreEqual("true", g.Generate(new { Val1 = true, Val2 = (string)null }));
- Assert.AreEqual("true", g.Generate(new { Val1 = false, Val2 = "X" }));
- Assert.AreEqual("true", g.Generate(new { Val1 = true, Val2 = "X" }));
+ ClassicAssert.AreEqual("false", g.Generate(new { Val1 = false, Val2 = false }));
+ ClassicAssert.AreEqual("true", g.Generate(new { Val1 = true, Val2 = false }));
+ ClassicAssert.AreEqual("true", g.Generate(new { Val1 = false, Val2 = true }));
+ ClassicAssert.AreEqual("true", g.Generate(new { Val1 = true, Val2 = true }));
+
+ ClassicAssert.AreEqual("false", g.Generate(new { Val1 = false, Val2 = (string)null }));
+ ClassicAssert.AreEqual("true", g.Generate(new { Val1 = true, Val2 = (string)null }));
+ ClassicAssert.AreEqual("true", g.Generate(new { Val1 = false, Val2 = "X" }));
+ ClassicAssert.AreEqual("true", g.Generate(new { Val1 = true, Val2 = "X" }));
}
[Test]
public void Lower()
{
var g = new HandlebarsCodeGenerator("{{lower Name}}");
- Assert.AreEqual("etag", g.Generate(new { Name = "ETag" }));
+ ClassicAssert.AreEqual("etag", g.Generate(new { Name = "ETag" }));
}
[Test]
public void Upper()
{
var g = new HandlebarsCodeGenerator("{{upper Name}}");
- Assert.AreEqual("ETAG", g.Generate(new { Name = "ETag" }));
+ ClassicAssert.AreEqual("ETAG", g.Generate(new { Name = "ETag" }));
}
[Test]
public void Camel()
{
var g = new HandlebarsCodeGenerator("{{camel Name}}");
- Assert.AreEqual("etag", g.Generate(new { Name = "ETag" }));
+ ClassicAssert.AreEqual("etag", g.Generate(new { Name = "ETag" }));
g = new HandlebarsCodeGenerator("{{camelx Name}}");
- Assert.AreEqual("eTag", g.Generate(new { Name = "ETag" }));
+ ClassicAssert.AreEqual("eTag", g.Generate(new { Name = "ETag" }));
}
[Test]
public void Pascal()
{
var g = new HandlebarsCodeGenerator("{{pascal Name}}");
- Assert.AreEqual("ETag", g.Generate(new { Name = "etag" }));
+ ClassicAssert.AreEqual("ETag", g.Generate(new { Name = "etag" }));
g = new HandlebarsCodeGenerator("{{pascalx Name}}");
- Assert.AreEqual("Etag", g.Generate(new { Name = "etag" }));
+ ClassicAssert.AreEqual("Etag", g.Generate(new { Name = "etag" }));
}
[Test]
public void Private()
{
var g = new HandlebarsCodeGenerator("{{private Name}}");
- Assert.AreEqual("_etag", g.Generate(new { Name = "ETag" }));
+ ClassicAssert.AreEqual("_etag", g.Generate(new { Name = "ETag" }));
g = new HandlebarsCodeGenerator("{{privatex Name}}");
- Assert.AreEqual("_eTag", g.Generate(new { Name = "ETag" }));
+ ClassicAssert.AreEqual("_eTag", g.Generate(new { Name = "ETag" }));
}
[Test]
public void Sentence()
{
var g = new HandlebarsCodeGenerator("{{sentence Name}}");
- Assert.AreEqual("ETag Name", g.Generate(new { Name = "ETagName" }));
+ ClassicAssert.AreEqual("ETag Name", g.Generate(new { Name = "ETagName" }));
g = new HandlebarsCodeGenerator("{{sentencex Name}}");
- Assert.AreEqual("E Tag Name", g.Generate(new { Name = "ETagName" }));
+ ClassicAssert.AreEqual("E Tag Name", g.Generate(new { Name = "ETagName" }));
}
[Test]
public void Snake()
{
var g = new HandlebarsCodeGenerator("{{snake Name}}");
- Assert.AreEqual("etag_name", g.Generate(new { Name = "ETagName" }));
+ ClassicAssert.AreEqual("etag_name", g.Generate(new { Name = "ETagName" }));
g = new HandlebarsCodeGenerator("{{snakex Name}}");
- Assert.AreEqual("e_tag_name", g.Generate(new { Name = "ETagName" }));
+ ClassicAssert.AreEqual("e_tag_name", g.Generate(new { Name = "ETagName" }));
}
[Test]
public void Kebab()
{
var g = new HandlebarsCodeGenerator("{{kebab Name}}");
- Assert.AreEqual("etag-name", g.Generate(new { Name = "ETagName" }));
+ ClassicAssert.AreEqual("etag-name", g.Generate(new { Name = "ETagName" }));
g = new HandlebarsCodeGenerator("{{kebabx Name}}");
- Assert.AreEqual("e-tag-name", g.Generate(new { Name = "ETagName" }));
+ ClassicAssert.AreEqual("e-tag-name", g.Generate(new { Name = "ETagName" }));
}
[Test]
public void PastTense()
{
var g = new HandlebarsCodeGenerator("{{past-tense Name}}");
- Assert.AreEqual("Ordered", g.Generate(new { Name = "Order" }));
+ ClassicAssert.AreEqual("Ordered", g.Generate(new { Name = "Order" }));
}
[Test]
public void Pluralize()
{
var g = new HandlebarsCodeGenerator("{{pluralize Name}}");
- Assert.AreEqual("Orders", g.Generate(new { Name = "Order" }));
+ ClassicAssert.AreEqual("Orders", g.Generate(new { Name = "Order" }));
}
[Test]
public void Singularize()
{
var g = new HandlebarsCodeGenerator("{{singularize Name}}");
- Assert.AreEqual("Order", g.Generate(new { Name = "Orders" }));
+ ClassicAssert.AreEqual("Order", g.Generate(new { Name = "Orders" }));
}
[Test]
public void SeeComments()
{
var g = new HandlebarsCodeGenerator("{{see-comments Name}}");
- Assert.AreEqual("", g.Generate(new { Name = "string" }));
+ ClassicAssert.AreEqual("", g.Generate(new { Name = "string" }));
}
[Test]
public void Indent()
{
var g = new HandlebarsCodeGenerator("{{indent 4}}{{Name}}");
- Assert.AreEqual(" Bob", g.Generate(new { Name = "Bob" }));
+ ClassicAssert.AreEqual(" Bob", g.Generate(new { Name = "Bob" }));
}
[Test]
public void Add()
{
var g = new HandlebarsCodeGenerator("{{add 4 '10' Count}}");
- Assert.AreEqual("12", g.Generate(new { Count = -2 }));
+ ClassicAssert.AreEqual("12", g.Generate(new { Count = -2 }));
}
[Test]
public void Add_Index()
{
var g = new HandlebarsCodeGenerator("{{#each .}}{{.}}{{add @index 1}}{{/each}}");
- Assert.AreEqual("a1b2", g.Generate(new System.Collections.Generic.List { "a", "b" }));
+ ClassicAssert.AreEqual("a1b2", g.Generate(new System.Collections.Generic.List { "a", "b" }));
}
public class SetData { public int Count { get; set; } internal bool Check { get; set; } public decimal Sum { get; set; } }
@@ -209,12 +210,12 @@ public void SetValue()
{
var sd = new SetData();
var g = new HandlebarsCodeGenerator("{{set-value 'Count' 88}}");
- Assert.AreEqual("", g.Generate(sd));
- Assert.AreEqual(88, sd.Count);
+ ClassicAssert.AreEqual("", g.Generate(sd));
+ ClassicAssert.AreEqual(88, sd.Count);
g = new HandlebarsCodeGenerator("xx{{set-value 'Check' true}}yy");
- Assert.AreEqual("xxyy", g.Generate(sd));
- Assert.AreEqual(true, sd.Check);
+ ClassicAssert.AreEqual("xxyy", g.Generate(sd));
+ ClassicAssert.AreEqual(true, sd.Check);
}
[Test]
@@ -222,12 +223,12 @@ public void AddValue()
{
var sd = new SetData();
var g = new HandlebarsCodeGenerator("{{add-value 'Sum'}}");
- Assert.AreEqual("", g.Generate(sd));
- Assert.AreEqual(1, sd.Sum);
+ ClassicAssert.AreEqual("", g.Generate(sd));
+ ClassicAssert.AreEqual(1, sd.Sum);
g = new HandlebarsCodeGenerator("{{add-value 'Sum' 3 -3.5 '8.4'}}");
- Assert.AreEqual("", g.Generate(sd));
- Assert.AreEqual(8.9m, sd.Sum);
+ ClassicAssert.AreEqual("", g.Generate(sd));
+ ClassicAssert.AreEqual(8.9m, sd.Sum);
}
[Test]
@@ -235,42 +236,42 @@ public void Format()
{
var dt = new DateTime(2021, 10, 26, 08, 55, 16);
var g = new HandlebarsCodeGenerator("Date is {{format '{0:yyyy-MM-dd HH:mm:ss}' Date}}.");
- Assert.AreEqual($"Date is {dt:yyyy-MM-dd HH:mm:ss}.", g.Generate(new { Date = dt }));
+ ClassicAssert.AreEqual($"Date is {dt:yyyy-MM-dd HH:mm:ss}.", g.Generate(new { Date = dt }));
}
[Test]
public void Debug()
{
var g = new HandlebarsCodeGenerator("{{debug 'Name: {0}.' Name}}");
- Assert.AreEqual("", g.Generate(new { Name = "Nancy" }));
+ ClassicAssert.AreEqual("", g.Generate(new { Name = "Nancy" }));
}
[Test]
public void LogInfo()
{
var g = new HandlebarsCodeGenerator("{{log-info 'Name: {0}.' Name}}");
- Assert.AreEqual("", g.Generate(new { Name = "Bob" }));
+ ClassicAssert.AreEqual("", g.Generate(new { Name = "Bob" }));
}
[Test]
public void LogWarning()
{
var g = new HandlebarsCodeGenerator("{{log-warning 'Name: {0}.' Name}}");
- Assert.AreEqual("", g.Generate(new { Name = "Jane" }));
+ ClassicAssert.AreEqual("", g.Generate(new { Name = "Jane" }));
}
[Test]
public void LogError()
{
var g = new HandlebarsCodeGenerator("{{log-error 'Name: {0}.' Name}}");
- Assert.AreEqual("", g.Generate(new { Name = "Bruce" }));
+ ClassicAssert.AreEqual("", g.Generate(new { Name = "Bruce" }));
}
[Test]
public void LogDebug()
{
var g = new HandlebarsCodeGenerator("{{log-debug 'Name: {0}.' Name}}");
- Assert.AreEqual("", g.Generate(new { Name = "Grace" }));
+ ClassicAssert.AreEqual("", g.Generate(new { Name = "Grace" }));
}
}
}
\ No newline at end of file
diff --git a/tests/OnRamp.Test/JsonSchemaGeneratorTest.cs b/tests/OnRamp.Test/JsonSchemaGeneratorTest.cs
index cc79511..c4ed552 100644
--- a/tests/OnRamp.Test/JsonSchemaGeneratorTest.cs
+++ b/tests/OnRamp.Test/JsonSchemaGeneratorTest.cs
@@ -19,8 +19,8 @@ public void Generate()
JsonSchemaGenerator.Generate(fn, "Entity Configuration");
- Assert.IsTrue(File.Exists(fn));
- Assert.AreEqual(File.ReadAllText(Path.Combine("Expected", "Schema.json")), File.ReadAllText(fn));
+ Assert.That(File.Exists(fn), Is.True);
+ Assert.That(File.ReadAllText(fn), Is.EqualTo(File.ReadAllText(Path.Combine("Expected", "Schema.json"))));
}
}
}
\ No newline at end of file
diff --git a/tests/OnRamp.Test/MarkdownDocumentationGeneratorTest.cs b/tests/OnRamp.Test/MarkdownDocumentationGeneratorTest.cs
index 900812f..c9f5755 100644
--- a/tests/OnRamp.Test/MarkdownDocumentationGeneratorTest.cs
+++ b/tests/OnRamp.Test/MarkdownDocumentationGeneratorTest.cs
@@ -18,12 +18,12 @@ public void Generate()
MarkdownDocumentationGenerator.Generate(directory: "MSG", addBreaksBetweenSections: true);
var fn = Path.Combine("MSG", "Entity.md");
- Assert.IsTrue(File.Exists(fn));
- Assert.AreEqual(File.ReadAllText(Path.Combine("Expected", "Entity.md")), File.ReadAllText(fn));
+ Assert.That(File.Exists(fn), Is.True);
+ Assert.That(File.ReadAllText(fn), Is.EqualTo(File.ReadAllText(Path.Combine("Expected", "Entity.md"))));
fn = Path.Combine("MSG", "Property.md");
- Assert.IsTrue(File.Exists(fn));
- Assert.AreEqual(File.ReadAllText(Path.Combine("Expected", "Property.md")), File.ReadAllText(fn));
+ Assert.That(File.Exists(fn), Is.True);
+ Assert.That(File.ReadAllText(fn), Is.EqualTo(File.ReadAllText(Path.Combine("Expected", "Property.md"))));
}
}
}
\ No newline at end of file
diff --git a/tests/OnRamp.Test/OnRamp.Test.csproj b/tests/OnRamp.Test/OnRamp.Test.csproj
index d65038a..e739138 100644
--- a/tests/OnRamp.Test/OnRamp.Test.csproj
+++ b/tests/OnRamp.Test/OnRamp.Test.csproj
@@ -1,7 +1,7 @@
- netcoreapp3.1
+ net6.0
1.2.3
Test title.
The long description.
@@ -64,14 +64,17 @@
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
diff --git a/tests/OnRamp.Test/StringConverterTest.cs b/tests/OnRamp.Test/StringConverterTest.cs
index 192ca69..37bc9c6 100644
--- a/tests/OnRamp.Test/StringConverterTest.cs
+++ b/tests/OnRamp.Test/StringConverterTest.cs
@@ -1,4 +1,5 @@
using NUnit.Framework;
+using NUnit.Framework.Legacy;
using OnRamp.Utility;
namespace OnRamp.Test
@@ -9,124 +10,124 @@ public class StringConverterTest
[Test]
public void ToCamelCase()
{
- Assert.AreEqual("fieldName", StringConverter.ToCamelCase("FieldName"));
- Assert.AreEqual("etagName", StringConverter.ToCamelCase("ETagName"));
- Assert.AreEqual("odataName", StringConverter.ToCamelCase("ODataName"));
+ ClassicAssert.AreEqual("fieldName", StringConverter.ToCamelCase("FieldName"));
+ ClassicAssert.AreEqual("etagName", StringConverter.ToCamelCase("ETagName"));
+ ClassicAssert.AreEqual("odataName", StringConverter.ToCamelCase("ODataName"));
- Assert.AreEqual("fieldName", StringConverter.ToCamelCase("FieldName", true));
- Assert.AreEqual("eTagName", StringConverter.ToCamelCase("ETagName", true));
- Assert.AreEqual("oDataName", StringConverter.ToCamelCase("ODataName", true));
+ ClassicAssert.AreEqual("fieldName", StringConverter.ToCamelCase("FieldName", true));
+ ClassicAssert.AreEqual("eTagName", StringConverter.ToCamelCase("ETagName", true));
+ ClassicAssert.AreEqual("oDataName", StringConverter.ToCamelCase("ODataName", true));
}
[Test]
public void ToPascalCase()
{
- Assert.AreEqual("FieldName", StringConverter.ToPascalCase("fieldName"));
- Assert.AreEqual("ETagName", StringConverter.ToPascalCase("etagName"));
- Assert.AreEqual("ODataName", StringConverter.ToPascalCase("odataName"));
+ ClassicAssert.AreEqual("FieldName", StringConverter.ToPascalCase("fieldName"));
+ ClassicAssert.AreEqual("ETagName", StringConverter.ToPascalCase("etagName"));
+ ClassicAssert.AreEqual("ODataName", StringConverter.ToPascalCase("odataName"));
- Assert.AreEqual("FieldName", StringConverter.ToPascalCase("fieldName", true));
- Assert.AreEqual("EtagName", StringConverter.ToPascalCase("etagName", true));
- Assert.AreEqual("OdataName", StringConverter.ToPascalCase("odataName", true));
+ ClassicAssert.AreEqual("FieldName", StringConverter.ToPascalCase("fieldName", true));
+ ClassicAssert.AreEqual("EtagName", StringConverter.ToPascalCase("etagName", true));
+ ClassicAssert.AreEqual("OdataName", StringConverter.ToPascalCase("odataName", true));
}
[Test]
public void ToPrivateCase()
{
- Assert.AreEqual("_fieldName", StringConverter.ToPrivateCase("FieldName"));
- Assert.AreEqual("_etagName", StringConverter.ToPrivateCase("ETagName"));
- Assert.AreEqual("_odataName", StringConverter.ToPrivateCase("ODataName"));
+ ClassicAssert.AreEqual("_fieldName", StringConverter.ToPrivateCase("FieldName"));
+ ClassicAssert.AreEqual("_etagName", StringConverter.ToPrivateCase("ETagName"));
+ ClassicAssert.AreEqual("_odataName", StringConverter.ToPrivateCase("ODataName"));
- Assert.AreEqual("_fieldName", StringConverter.ToPrivateCase("FieldName", true));
- Assert.AreEqual("_eTagName", StringConverter.ToPrivateCase("ETagName", true));
- Assert.AreEqual("_oDataName", StringConverter.ToPrivateCase("ODataName", true));
+ ClassicAssert.AreEqual("_fieldName", StringConverter.ToPrivateCase("FieldName", true));
+ ClassicAssert.AreEqual("_eTagName", StringConverter.ToPrivateCase("ETagName", true));
+ ClassicAssert.AreEqual("_oDataName", StringConverter.ToPrivateCase("ODataName", true));
}
[Test]
public void ToSentenceCase()
{
- Assert.AreEqual("Field Name", StringConverter.ToSentenceCase("FieldName"));
- Assert.AreEqual("ETag Name", StringConverter.ToSentenceCase("ETagName"));
- Assert.AreEqual("OData Name", StringConverter.ToSentenceCase("ODataName"));
- Assert.AreEqual("XML Name", StringConverter.ToSentenceCase("XMLName"));
-
- Assert.AreEqual("Field Name", StringConverter.ToSentenceCase("FieldName", true));
- Assert.AreEqual("E Tag Name", StringConverter.ToSentenceCase("ETagName", true));
- Assert.AreEqual("O Data Name", StringConverter.ToSentenceCase("ODataName", true));
- Assert.AreEqual("XML Name OR Other", StringConverter.ToSentenceCase("XMLNameOROther", true));
+ ClassicAssert.AreEqual("Field Name", StringConverter.ToSentenceCase("FieldName"));
+ ClassicAssert.AreEqual("ETag Name", StringConverter.ToSentenceCase("ETagName"));
+ ClassicAssert.AreEqual("OData Name", StringConverter.ToSentenceCase("ODataName"));
+ ClassicAssert.AreEqual("XML Name", StringConverter.ToSentenceCase("XMLName"));
+
+ ClassicAssert.AreEqual("Field Name", StringConverter.ToSentenceCase("FieldName", true));
+ ClassicAssert.AreEqual("E Tag Name", StringConverter.ToSentenceCase("ETagName", true));
+ ClassicAssert.AreEqual("O Data Name", StringConverter.ToSentenceCase("ODataName", true));
+ ClassicAssert.AreEqual("XML Name OR Other", StringConverter.ToSentenceCase("XMLNameOROther", true));
}
[Test]
public void ToKebabCase()
{
- Assert.AreEqual("field-name", StringConverter.ToKebabCase("FieldName"));
- Assert.AreEqual("etag-name", StringConverter.ToKebabCase("ETagName"));
- Assert.AreEqual("odata-name", StringConverter.ToKebabCase("ODataName"));
- Assert.AreEqual("xml-name", StringConverter.ToKebabCase("XMLName"));
-
- Assert.AreEqual("field-name", StringConverter.ToKebabCase("FieldName", true));
- Assert.AreEqual("e-tag-name", StringConverter.ToKebabCase("ETagName", true));
- Assert.AreEqual("o-data-name", StringConverter.ToKebabCase("ODataName", true));
- Assert.AreEqual("xml-name", StringConverter.ToKebabCase("XMLName", true));
+ ClassicAssert.AreEqual("field-name", StringConverter.ToKebabCase("FieldName"));
+ ClassicAssert.AreEqual("etag-name", StringConverter.ToKebabCase("ETagName"));
+ ClassicAssert.AreEqual("odata-name", StringConverter.ToKebabCase("ODataName"));
+ ClassicAssert.AreEqual("xml-name", StringConverter.ToKebabCase("XMLName"));
+
+ ClassicAssert.AreEqual("field-name", StringConverter.ToKebabCase("FieldName", true));
+ ClassicAssert.AreEqual("e-tag-name", StringConverter.ToKebabCase("ETagName", true));
+ ClassicAssert.AreEqual("o-data-name", StringConverter.ToKebabCase("ODataName", true));
+ ClassicAssert.AreEqual("xml-name", StringConverter.ToKebabCase("XMLName", true));
}
[Test]
public void ToSnakeCase()
{
- Assert.AreEqual("field_name", StringConverter.ToSnakeCase("FieldName"));
- Assert.AreEqual("etag_name", StringConverter.ToSnakeCase("ETagName"));
- Assert.AreEqual("odata_name", StringConverter.ToSnakeCase("ODataName"));
- Assert.AreEqual("xml_name", StringConverter.ToSnakeCase("XMLName"));
-
- Assert.AreEqual("field_name", StringConverter.ToSnakeCase("FieldName", true));
- Assert.AreEqual("e_tag_name", StringConverter.ToSnakeCase("ETagName", true));
- Assert.AreEqual("o_data_name", StringConverter.ToSnakeCase("ODataName", true));
- Assert.AreEqual("xml_name", StringConverter.ToSnakeCase("XMLName", true));
+ ClassicAssert.AreEqual("field_name", StringConverter.ToSnakeCase("FieldName"));
+ ClassicAssert.AreEqual("etag_name", StringConverter.ToSnakeCase("ETagName"));
+ ClassicAssert.AreEqual("odata_name", StringConverter.ToSnakeCase("ODataName"));
+ ClassicAssert.AreEqual("xml_name", StringConverter.ToSnakeCase("XMLName"));
+
+ ClassicAssert.AreEqual("field_name", StringConverter.ToSnakeCase("FieldName", true));
+ ClassicAssert.AreEqual("e_tag_name", StringConverter.ToSnakeCase("ETagName", true));
+ ClassicAssert.AreEqual("o_data_name", StringConverter.ToSnakeCase("ODataName", true));
+ ClassicAssert.AreEqual("xml_name", StringConverter.ToSnakeCase("XMLName", true));
}
[Test]
public void ToPastTense()
{
- Assert.AreEqual("A", StringConverter.ToPastTense("A"));
- Assert.AreEqual("Be", StringConverter.ToPastTense("Be"));
- Assert.AreEqual("Pried", StringConverter.ToPastTense("Pry"));
- Assert.AreEqual("Applied", StringConverter.ToPastTense("Apply"));
- Assert.AreEqual("Dropped", StringConverter.ToPastTense("Drop"));
- Assert.AreEqual("Rotted", StringConverter.ToPastTense("Rot"));
- Assert.AreEqual("Concurred", StringConverter.ToPastTense("Concur"));
- Assert.AreEqual("Ordered", StringConverter.ToPastTense("Order"));
- Assert.AreEqual("Sent", StringConverter.ToPastTense("Send"));
- Assert.AreEqual("sent", StringConverter.ToPastTense("send"));
- Assert.AreEqual("Frolicked", StringConverter.ToPastTense("Frolic"));
- Assert.AreEqual("Picnicked", StringConverter.ToPastTense("Picnic"));
+ ClassicAssert.AreEqual("A", StringConverter.ToPastTense("A"));
+ ClassicAssert.AreEqual("Be", StringConverter.ToPastTense("Be"));
+ ClassicAssert.AreEqual("Pried", StringConverter.ToPastTense("Pry"));
+ ClassicAssert.AreEqual("Applied", StringConverter.ToPastTense("Apply"));
+ ClassicAssert.AreEqual("Dropped", StringConverter.ToPastTense("Drop"));
+ ClassicAssert.AreEqual("Rotted", StringConverter.ToPastTense("Rot"));
+ ClassicAssert.AreEqual("Concurred", StringConverter.ToPastTense("Concur"));
+ ClassicAssert.AreEqual("Ordered", StringConverter.ToPastTense("Order"));
+ ClassicAssert.AreEqual("Sent", StringConverter.ToPastTense("Send"));
+ ClassicAssert.AreEqual("sent", StringConverter.ToPastTense("send"));
+ ClassicAssert.AreEqual("Frolicked", StringConverter.ToPastTense("Frolic"));
+ ClassicAssert.AreEqual("Picnicked", StringConverter.ToPastTense("Picnic"));
}
[Test]
public void ToPlural()
{
- Assert.AreEqual("Castles", StringConverter.ToPlural("Castle"));
- Assert.AreEqual("Successes", StringConverter.ToPlural("Success"));
+ ClassicAssert.AreEqual("Castles", StringConverter.ToPlural("Castle"));
+ ClassicAssert.AreEqual("Successes", StringConverter.ToPlural("Success"));
}
[Test]
public void ToSingle()
{
- Assert.AreEqual("Castle", StringConverter.ToSingle("Castles"));
- Assert.AreEqual("Success", StringConverter.ToSingle("Successes"));
+ ClassicAssert.AreEqual("Castle", StringConverter.ToSingle("Castles"));
+ ClassicAssert.AreEqual("Success", StringConverter.ToSingle("Successes"));
}
[Test]
public void ToComments()
{
- Assert.AreEqual("See .", StringConverter.ToComments("See {{Xyz}}."));
- Assert.AreEqual("See .", StringConverter.ToComments("See {{List}}."));
+ ClassicAssert.AreEqual("See .", StringConverter.ToComments("See {{Xyz}}."));
+ ClassicAssert.AreEqual("See .", StringConverter.ToComments("See {{List}}."));
}
[Test]
public void ToSeeComments()
{
- Assert.AreEqual("", StringConverter.ToSeeComments("Xyz"));
- Assert.AreEqual("", StringConverter.ToSeeComments("List"));
+ ClassicAssert.AreEqual("", StringConverter.ToSeeComments("Xyz"));
+ ClassicAssert.AreEqual("", StringConverter.ToSeeComments("List"));
}
}
}
\ No newline at end of file