1+ namespace Swashbuckle . AspNetCore . SwaggerGen . Test
2+ {
3+ using System ;
4+ using System . Text . Json ;
5+ using Microsoft . OpenApi . Any ;
6+ using Xunit ;
7+
8+ public class OpenApiAnyFactoryTests
9+ {
10+ [ Theory ]
11+ [ InlineData ( "1" , typeof ( OpenApiInteger ) , 1 ) ]
12+ [ InlineData ( "4294877294" , typeof ( OpenApiLong ) , 4294877294L ) ]
13+ [ InlineData ( "1.5" , typeof ( OpenApiFloat ) , 1.5f ) ]
14+ [ InlineData ( "1.5e308" , typeof ( OpenApiDouble ) , 1.5e308 ) ]
15+ [ InlineData ( "\" abc\" " , typeof ( OpenApiString ) , "abc" ) ]
16+ [ InlineData ( "true" , typeof ( OpenApiBoolean ) , true ) ]
17+ [ InlineData ( "false" , typeof ( OpenApiBoolean ) , false ) ]
18+ public void CreateFromJson_SimpleType ( string json , Type expectedType , object expectedValue )
19+ {
20+ var openApiAnyObject = OpenApiAnyFactory . CreateFromJson ( json ) ;
21+ Assert . NotNull ( openApiAnyObject ) ;
22+ Assert . Equal ( expectedType , openApiAnyObject . GetType ( ) ) ;
23+ Assert . Equal ( AnyType . Primitive , openApiAnyObject . AnyType ) ;
24+ var valueProperty = expectedType . GetProperty ( "Value" ) ;
25+ var actualValue = valueProperty . GetValue ( openApiAnyObject ) ;
26+ Assert . Equal ( expectedValue , actualValue ) ;
27+ }
28+
29+ [ Theory ]
30+ [ InlineData ( "[1,2]" , typeof ( OpenApiInteger ) , 1 , 2 ) ]
31+ [ InlineData ( "[4294877294,4294877295]" , typeof ( OpenApiLong ) , 4294877294L , 4294877295L ) ]
32+ [ InlineData ( "[1.5,-1.5]" , typeof ( OpenApiFloat ) , 1.5f , - 1.5f ) ]
33+ [ InlineData ( "[1.5e308,-1.5e308]" , typeof ( OpenApiDouble ) , 1.5e308 , - 1.5e308 ) ]
34+ [ InlineData ( "[\" abc\" ,\" def\" ]" , typeof ( OpenApiString ) , "abc" , "def" ) ]
35+ [ InlineData ( "[true,false]" , typeof ( OpenApiBoolean ) , true , false ) ]
36+ [ InlineData ( "[{\" a\" :1,\" b\" :2},{\" a\" :3,\" b\" :4}]" , typeof ( OpenApiObject ) ) ]
37+ [ InlineData ( "[[1,2],[3,4]]" , typeof ( OpenApiArray ) ) ]
38+ public void CreateFromJson_Array ( string json , Type expectedType , params object [ ] expectedValues )
39+ {
40+ var openApiAnyObject = OpenApiAnyFactory . CreateFromJson ( json ) ;
41+ Assert . NotNull ( openApiAnyObject ) ;
42+ Assert . Equal ( typeof ( OpenApiArray ) , openApiAnyObject . GetType ( ) ) ;
43+ Assert . Equal ( AnyType . Array , openApiAnyObject . AnyType ) ;
44+ var array = ( OpenApiArray ) openApiAnyObject ;
45+ for ( var i = 0 ; i < array . Count ; i ++ )
46+ {
47+ Assert . NotNull ( array [ i ] ) ;
48+ Assert . Equal ( expectedType , array [ i ] . GetType ( ) ) ;
49+ if ( expectedValues . Length > 0 )
50+ {
51+ var valueProperty = expectedType . GetProperty ( "Value" ) ;
52+ var expectedValue = expectedValues [ i ] ;
53+ var actualValue = valueProperty . GetValue ( array [ i ] ) ;
54+ Assert . Equal ( expectedValue , actualValue ) ;
55+ }
56+ }
57+ }
58+
59+ [ Fact ]
60+ public void CreateFromJson_Object ( )
61+ {
62+ var json = JsonSerializer . Serialize ( new
63+ {
64+ int_value = 1 ,
65+ long_value = 4294877294L ,
66+ float_value = 1.5f ,
67+ double_value = 1.5e308 ,
68+ string_value = "abc" ,
69+ true_value = true ,
70+ false_value = false ,
71+ array_value = new [ ] { 1 , 2 } ,
72+ object_value = new
73+ {
74+ a = 1 ,
75+ b = 2
76+ }
77+ } ) ;
78+
79+ var openApiAnyObject = OpenApiAnyFactory . CreateFromJson ( json ) ;
80+ Assert . NotNull ( openApiAnyObject ) ;
81+ Assert . Equal ( typeof ( OpenApiObject ) , openApiAnyObject . GetType ( ) ) ;
82+ Assert . Equal ( AnyType . Object , openApiAnyObject . AnyType ) ;
83+ var obj = ( OpenApiObject ) openApiAnyObject ;
84+
85+ Assert . NotNull ( obj [ "int_value" ] ) ;
86+ Assert . Equal ( typeof ( OpenApiInteger ) , obj [ "int_value" ] . GetType ( ) ) ;
87+ Assert . Equal ( AnyType . Primitive , obj [ "int_value" ] . AnyType ) ;
88+ Assert . Equal ( 1 , ( ( OpenApiInteger ) obj [ "int_value" ] ) . Value ) ;
89+
90+ Assert . NotNull ( obj [ "long_value" ] ) ;
91+ Assert . Equal ( typeof ( OpenApiLong ) , obj [ "long_value" ] . GetType ( ) ) ;
92+ Assert . Equal ( AnyType . Primitive , obj [ "long_value" ] . AnyType ) ;
93+ Assert . Equal ( 4294877294L , ( ( OpenApiLong ) obj [ "long_value" ] ) . Value ) ;
94+
95+ Assert . NotNull ( obj [ "float_value" ] ) ;
96+ Assert . Equal ( typeof ( OpenApiFloat ) , obj [ "float_value" ] . GetType ( ) ) ;
97+ Assert . Equal ( AnyType . Primitive , obj [ "float_value" ] . AnyType ) ;
98+ Assert . Equal ( 1.5f , ( ( OpenApiFloat ) obj [ "float_value" ] ) . Value ) ;
99+
100+ Assert . NotNull ( obj [ "double_value" ] ) ;
101+ Assert . Equal ( typeof ( OpenApiDouble ) , obj [ "double_value" ] . GetType ( ) ) ;
102+ Assert . Equal ( AnyType . Primitive , obj [ "double_value" ] . AnyType ) ;
103+ Assert . Equal ( 1.5e308 , ( ( OpenApiDouble ) obj [ "double_value" ] ) . Value ) ;
104+
105+ Assert . NotNull ( obj [ "string_value" ] ) ;
106+ Assert . Equal ( typeof ( OpenApiString ) , obj [ "string_value" ] . GetType ( ) ) ;
107+ Assert . Equal ( AnyType . Primitive , obj [ "string_value" ] . AnyType ) ;
108+ Assert . Equal ( "abc" , ( ( OpenApiString ) obj [ "string_value" ] ) . Value ) ;
109+
110+ Assert . NotNull ( obj [ "true_value" ] ) ;
111+ Assert . Equal ( typeof ( OpenApiBoolean ) , obj [ "true_value" ] . GetType ( ) ) ;
112+ Assert . Equal ( AnyType . Primitive , obj [ "true_value" ] . AnyType ) ;
113+ Assert . True ( ( ( OpenApiBoolean ) obj [ "true_value" ] ) . Value ) ;
114+
115+ Assert . NotNull ( obj [ "false_value" ] ) ;
116+ Assert . Equal ( typeof ( OpenApiBoolean ) , obj [ "false_value" ] . GetType ( ) ) ;
117+ Assert . Equal ( AnyType . Primitive , obj [ "false_value" ] . AnyType ) ;
118+ Assert . False ( ( ( OpenApiBoolean ) obj [ "false_value" ] ) . Value ) ;
119+
120+ Assert . NotNull ( obj [ "array_value" ] ) ;
121+ Assert . Equal ( typeof ( OpenApiArray ) , obj [ "array_value" ] . GetType ( ) ) ;
122+ Assert . Equal ( AnyType . Array , obj [ "array_value" ] . AnyType ) ;
123+
124+ Assert . NotNull ( obj [ "object_value" ] ) ;
125+ Assert . Equal ( typeof ( OpenApiObject ) , obj [ "object_value" ] . GetType ( ) ) ;
126+ Assert . Equal ( AnyType . Object , obj [ "object_value" ] . AnyType ) ;
127+ }
128+ }
129+ }
0 commit comments