44using System ;
55using System . Collections . Generic ;
66using System . Globalization ;
7+ using System . Text ;
78using SixLabors . ImageSharp . Processing ;
89using SixLabors . ImageSharp . Web . Commands ;
910using SixLabors . ImageSharp . Web . Commands . Converters ;
@@ -13,136 +14,137 @@ namespace SixLabors.ImageSharp.Web.Tests.Commands
1314{
1415 public class CommandParserTests
1516 {
16- private static readonly CultureInfo Invariant = CultureInfo . InvariantCulture ;
17- private static readonly CultureInfo Danish = new CultureInfo ( "da-DK" ) ;
17+ private static readonly CultureInfo Inv = CultureInfo . InvariantCulture ;
18+ private static readonly CultureInfo Dk = new CultureInfo ( "da-DK" ) ;
19+
1820 private const double Pi = 3.14159265358979 ;
1921 private static readonly string PiStringInvariant = Pi . ToString ( CultureInfo . InvariantCulture ) ;
20- private static readonly string PiStringDanish = Pi . ToString ( Danish ) ;
22+ private static readonly string PiStringDanish = Pi . ToString ( Dk ) ;
2123 private static readonly double RoundedPi = Math . Round ( Pi , MidpointRounding . AwayFromZero ) ;
2224
2325 public static TheoryData < object , string , CultureInfo > IntegralValuesInvariant
2426 = new TheoryData < object , string , CultureInfo >
2527 {
26- { ( sbyte ) 1 , "1" , Invariant } ,
27- { ( byte ) 1 , "1" , Invariant } ,
28- { ( short ) 1 , "1" , Invariant } ,
29- { ( ushort ) 1 , "1" , Invariant } ,
30- { 1 , "1" , Invariant } ,
31- { 1U , "1" , Invariant } ,
32- { 1L , "1" , Invariant } ,
33- { 1UL , "1" , Invariant } ,
34- { 1F , "1" , Invariant } ,
35- { 1D , "1" , Invariant } ,
36- { 1M , "1" , Invariant } ,
28+ { ( sbyte ) 1 , "1" , Inv } ,
29+ { ( byte ) 1 , "1" , Inv } ,
30+ { ( short ) 1 , "1" , Inv } ,
31+ { ( ushort ) 1 , "1" , Inv } ,
32+ { 1 , "1" , Inv } ,
33+ { 1U , "1" , Inv } ,
34+ { 1L , "1" , Inv } ,
35+ { 1UL , "1" , Inv } ,
36+ { 1F , "1" , Inv } ,
37+ { 1D , "1" , Inv } ,
38+ { 1M , "1" , Inv } ,
3739 } ;
3840
3941 public static TheoryData < object , string , CultureInfo > IntegralValuesDanish
4042 = new TheoryData < object , string , CultureInfo >
4143 {
42- { ( sbyte ) 1 , "1" , Danish } ,
43- { ( byte ) 1 , "1" , Danish } ,
44- { ( short ) 1 , "1" , Danish } ,
45- { ( ushort ) 1 , "1" , Danish } ,
46- { 1 , "1" , Danish } ,
47- { 1U , "1" , Danish } ,
48- { 1L , "1" , Danish } ,
49- { 1UL , "1" , Danish } ,
50- { 1F , "1" , Danish } ,
51- { 1D , "1" , Danish } ,
52- { 1M , "1" , Danish } ,
44+ { ( sbyte ) 1 , "1" , Dk } ,
45+ { ( byte ) 1 , "1" , Dk } ,
46+ { ( short ) 1 , "1" , Dk } ,
47+ { ( ushort ) 1 , "1" , Dk } ,
48+ { 1 , "1" , Dk } ,
49+ { 1U , "1" , Dk } ,
50+ { 1L , "1" , Dk } ,
51+ { 1UL , "1" , Dk } ,
52+ { 1F , "1" , Dk } ,
53+ { 1D , "1" , Dk } ,
54+ { 1M , "1" , Dk } ,
5355 } ;
5456
5557 public static TheoryData < object , string , CultureInfo > RealValuesInvariant
5658 = new TheoryData < object , string , CultureInfo >
5759 {
58- { ( sbyte ) RoundedPi , PiStringInvariant , Invariant } ,
59- { ( byte ) RoundedPi , PiStringInvariant , Invariant } ,
60- { ( short ) RoundedPi , PiStringInvariant , Invariant } ,
61- { ( ushort ) RoundedPi , PiStringInvariant , Invariant } ,
62- { ( int ) RoundedPi , PiStringInvariant , Invariant } ,
63- { ( uint ) RoundedPi , PiStringInvariant , Invariant } ,
64- { ( long ) RoundedPi , PiStringInvariant , Invariant } ,
65- { ( ulong ) RoundedPi , PiStringInvariant , Invariant } ,
66- { ( float ) Pi , PiStringInvariant , Invariant } ,
67- { ( double ) Pi , PiStringInvariant , Invariant } ,
68- { ( decimal ) Pi , PiStringInvariant , Invariant } ,
60+ { ( sbyte ) RoundedPi , PiStringInvariant , Inv } ,
61+ { ( byte ) RoundedPi , PiStringInvariant , Inv } ,
62+ { ( short ) RoundedPi , PiStringInvariant , Inv } ,
63+ { ( ushort ) RoundedPi , PiStringInvariant , Inv } ,
64+ { ( int ) RoundedPi , PiStringInvariant , Inv } ,
65+ { ( uint ) RoundedPi , PiStringInvariant , Inv } ,
66+ { ( long ) RoundedPi , PiStringInvariant , Inv } ,
67+ { ( ulong ) RoundedPi , PiStringInvariant , Inv } ,
68+ { ( float ) Pi , PiStringInvariant , Inv } ,
69+ { ( double ) Pi , PiStringInvariant , Inv } ,
70+ { ( decimal ) Pi , PiStringInvariant , Inv } ,
6971 } ;
7072
7173 public static TheoryData < object , string , CultureInfo > RealValuesDanish
7274 = new TheoryData < object , string , CultureInfo >
7375 {
74- { ( sbyte ) RoundedPi , PiStringDanish , Danish } ,
75- { ( byte ) RoundedPi , PiStringDanish , Danish } ,
76- { ( short ) RoundedPi , PiStringDanish , Danish } ,
77- { ( ushort ) RoundedPi , PiStringDanish , Danish } ,
78- { ( int ) RoundedPi , PiStringDanish , Danish } ,
79- { ( uint ) RoundedPi , PiStringDanish , Danish } ,
80- { ( long ) RoundedPi , PiStringDanish , Danish } ,
81- { ( ulong ) RoundedPi , PiStringDanish , Danish } ,
82- { ( float ) Pi , PiStringDanish , Danish } ,
83- { ( double ) Pi , PiStringDanish , Danish } ,
84- { ( decimal ) Pi , PiStringDanish , Danish } ,
76+ { ( sbyte ) RoundedPi , PiStringDanish , Dk } ,
77+ { ( byte ) RoundedPi , PiStringDanish , Dk } ,
78+ { ( short ) RoundedPi , PiStringDanish , Dk } ,
79+ { ( ushort ) RoundedPi , PiStringDanish , Dk } ,
80+ { ( int ) RoundedPi , PiStringDanish , Dk } ,
81+ { ( uint ) RoundedPi , PiStringDanish , Dk } ,
82+ { ( long ) RoundedPi , PiStringDanish , Dk } ,
83+ { ( ulong ) RoundedPi , PiStringDanish , Dk } ,
84+ { ( float ) Pi , PiStringDanish , Dk } ,
85+ { ( double ) Pi , PiStringDanish , Dk } ,
86+ { ( decimal ) Pi , PiStringDanish , Dk } ,
8587 } ;
8688
8789 public static TheoryData < ResizeMode , string , CultureInfo > EnumValues
8890 = new TheoryData < ResizeMode , string , CultureInfo >
8991 {
90- { ResizeMode . Max , "max" , Invariant } ,
91- { ResizeMode . Crop , "this is not, an enum value" , Invariant } , // Unknown returns default
92+ { ResizeMode . Max , "max" , Inv } ,
93+ { ResizeMode . Crop , "this is not, an enum value" , Inv } , // Unknown returns default
9294 } ;
9395
9496 public static TheoryData < int [ ] , string , CultureInfo > IntegralArrays
9597 = new TheoryData < int [ ] , string , CultureInfo >
9698 {
97- { new [ ] { 1 , 2 , 3 , 4 } , "1,2,3,4" , Invariant } ,
99+ { new [ ] { 1 , 2 , 3 , 4 } , ToNumericList ( Inv , 1 , 2 , 3 , 4 ) , Inv } ,
98100 } ;
99101
100102 public static TheoryData < float [ ] , string , CultureInfo > RealArraysInvariant
101103 = new TheoryData < float [ ] , string , CultureInfo >
102104 {
103- { new [ ] { 1.667F , 2.667F , 3.667F , 4.667F } , "1.667,2.667,3.667,4.667" , Invariant } ,
105+ { new [ ] { 1.667F , 2.667F , 3.667F , 4.667F } , ToNumericList ( Inv , 1.667F , 2.667F , 3.667F , 4.667F ) , Inv } ,
104106 } ;
105107
106108 public static TheoryData < float [ ] , string , CultureInfo > RealArraysDanish
107109 = new TheoryData < float [ ] , string , CultureInfo >
108110 {
109- { new [ ] { 1.667F , 2.667F , 3.667F , 4.667F } , "1,667;2,667;3,667;4,667" , Danish } ,
111+ { new [ ] { 1.667F , 2.667F , 3.667F , 4.667F } , ToNumericList ( Dk , 1.667F , 2.667F , 3.667F , 4.667F ) , Dk } ,
110112 } ;
111113
112114 public static TheoryData < object , string , CultureInfo > IntegralLists
113115 = new TheoryData < object , string , CultureInfo >
114116 {
115- { new List < int > { 1 , 2 , 3 , 4 } , "1,2,3,4" , Invariant } ,
117+ { new List < int > { 1 , 2 , 3 , 4 } , ToNumericList ( Inv , 1 , 2 , 3 , 4 ) , Inv } ,
116118 } ;
117119
118120 public static TheoryData < List < float > , string , CultureInfo > RealLists
119121 = new TheoryData < List < float > , string , CultureInfo >
120122 {
121- { new List < float > { 1.667F , 2.667F , 3.667F , 4.667F } , "1.667,2.667,3.667,4.667" , Invariant } ,
123+ { new List < float > { 1.667F , 2.667F , 3.667F , 4.667F } , "1.667,2.667,3.667,4.667" , Inv } ,
122124 } ;
123125
124126 public static TheoryData < Color , string , CultureInfo > ColorValuesInvariant
125127 = new TheoryData < Color , string , CultureInfo >
126128 {
127- { default , string . Empty , Invariant } ,
128- { Color . White , " 255,255,255" , Invariant } ,
129- { Color . Transparent , "0,0,0,0" , Invariant } ,
130- { Color . Orange , "orange" , Invariant } ,
131- { Color . RoyalBlue , "4169E1FF" , Invariant } ,
132- { Color . Lime , "00FF00FF" , Invariant } ,
133- { Color . YellowGreen , "9ACD32FF" , Invariant } ,
129+ { default , string . Empty , Inv } ,
130+ { Color . White , ToNumericList < byte > ( Inv , 255 , 255 , 255 ) , Inv } ,
131+ { Color . Transparent , ToNumericList < byte > ( Inv , 0 , 0 , 0 , 0 ) , Inv } ,
132+ { Color . Orange , "orange" , Inv } ,
133+ { Color . RoyalBlue , "4169E1FF" , Inv } ,
134+ { Color . Lime , "00FF00FF" , Inv } ,
135+ { Color . YellowGreen , "9ACD32FF" , Inv } ,
134136 } ;
135137
136138 public static TheoryData < Color , string , CultureInfo > ColorValuesDanish
137139 = new TheoryData < Color , string , CultureInfo >
138140 {
139- { default , string . Empty , Danish } ,
140- { Color . White , " 255; 255; 255" , Danish } ,
141- { Color . Transparent , "0;0;0;0" , Danish } ,
142- { Color . Orange , "orange" , Danish } ,
143- { Color . RoyalBlue , "4169E1FF" , Danish } ,
144- { Color . Lime , "00FF00FF" , Danish } ,
145- { Color . YellowGreen , "9ACD32FF" , Danish } ,
141+ { default , string . Empty , Dk } ,
142+ { Color . White , ToNumericList < byte > ( Dk , 255 , 255 , 255 ) , Dk } ,
143+ { Color . Transparent , ToNumericList < byte > ( Dk , 0 , 0 , 0 , 0 ) , Dk } ,
144+ { Color . Orange , "orange" , Dk } ,
145+ { Color . RoyalBlue , "4169E1FF" , Dk } ,
146+ { Color . Lime , "00FF00FF" , Dk } ,
147+ { Color . YellowGreen , "9ACD32FF" , Dk } ,
146148 } ;
147149
148150 private static readonly CommandParser Parser = GetCommandParser ( ) ;
@@ -229,5 +231,19 @@ private static CommandParser GetCommandParser()
229231
230232 return new CommandParser ( commands ) ;
231233 }
234+
235+ private static string ToNumericList < T > ( CultureInfo culture , params T [ ] values )
236+ where T : IConvertible
237+ {
238+ var sb = new StringBuilder ( ) ;
239+ var ls = culture . TextInfo . ListSeparator [ 0 ] ;
240+
241+ for ( int i = 0 ; i < values . Length ; i ++ )
242+ {
243+ sb . AppendFormat ( values [ i ] . ToString ( culture ) + ls ) ;
244+ }
245+
246+ return sb . ToString ( ) . TrimEnd ( ls ) ;
247+ }
232248 }
233249}
0 commit comments