/
AbstractGenerationTests.cs
83 lines (69 loc) · 2.69 KB
/
AbstractGenerationTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NJsonSchema.Converters;
using Xunit;
namespace NJsonSchema.CodeGeneration.TypeScript.Tests
{
public class AbstractGenerationTests
{
public abstract class AbstractClass : BaseClass
{
public string Foo { get; set; }
}
[Fact]
public async Task When_class_is_abstract_then_is_abstract_TypeScript_keyword_is_generated()
{
/// Arrange
var schema = await JsonSchema4.FromTypeAsync<AbstractClass>();
var json = schema.ToJson();
/// Act
var generator = new TypeScriptGenerator(schema, new TypeScriptGeneratorSettings { TypeScriptVersion = 2.0m });
var code = generator.GenerateFile("AbstractClass");
/// Assert
Assert.Contains("export abstract class AbstractClass", code);
Assert.Contains("base: string", code);
Assert.Contains("super: string", code);
Assert.Contains("foo: string", code);
}
public class ContainerClass
{
[Required]
public AbstractClass Foo { get; set; }
}
[Fact]
public async Task When_property_is_required_and_abstract_then_it_is_not_instantiated()
{
/// Arrange
var schema = await JsonSchema4.FromTypeAsync<ContainerClass>();
/// Act
var generator = new TypeScriptGenerator(schema, new TypeScriptGeneratorSettings { TypeScriptVersion = 2.0m });
var code = generator.GenerateFile("ContainerClass");
/// Assert
Assert.Contains("this.foo = data[\"Foo\"] ? AbstractClass.fromJS(data[\"Foo\"]) : <any>undefined;", code);
}
[KnownType(typeof(SuperClass))]
[KnownType(typeof(AbstractClass))]
[JsonConverter(typeof(JsonInheritanceConverter))]
public class BaseClass
{
public string Base { get; set; }
}
public class SuperClass : AbstractClass
{
public string Super { get; set; }
}
[Fact]
public async Task When_abstract_class_is_in_inheritance_hierarchy_then_it_is_newer_instantiated()
{
/// Arrange
var schema = await JsonSchema4.FromTypeAsync<AbstractClass>();
/// Act
var generator = new TypeScriptGenerator(schema, new TypeScriptGeneratorSettings { TypeScriptVersion = 2.0m });
var code = generator.GenerateFile("AbstractClass");
/// Assert
Assert.DoesNotContain("new AbstractClass();", code);
}
}
}