forked from codebude/QRCoder
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSvgQRCodeRendererTests.cs
213 lines (173 loc) · 8.75 KB
/
SvgQRCodeRendererTests.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#if !NETCOREAPP1_1
using System;
using System.Drawing;
using System.IO;
using QRCoder;
using QRCoderTests.Helpers;
using Shouldly;
using Xunit;
namespace QRCoderTests;
public class SvgQRCodeRendererTests
{
[Fact]
public void can_render_svg_qrcode_simple()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.L);
var svg = new SvgQRCode(data).GetGraphic(5);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("5c251275a435a9aed7e591eb9c2e9949");
}
[Fact]
public void can_render_svg_qrcode()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
var svg = new SvgQRCode(data).GetGraphic(10, Color.Red, Color.White);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("1baa8c6ac3bd8c1eabcd2c5422dd9f78");
}
[Fact]
public void can_render_svg_qrcode_viewbox_mode()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
var svg = new SvgQRCode(data).GetGraphic(new Size(128, 128));
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("56719c7db39937c74377855a5dc4af0a");
}
[Fact]
public void can_render_svg_qrcode_viewbox_mode_viewboxattr()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
var svg = new SvgQRCode(data).GetGraphic(new Size(128, 128), sizingMode: SvgQRCode.SizingMode.ViewBoxAttribute);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("788afdb693b0b71eed344e495c180b60");
}
[Fact]
public void can_render_svg_qrcode_without_quietzones()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
var svg = new SvgQRCode(data).GetGraphic(10, Color.Red, Color.White, false);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("2a582427d86b51504c08ebcbcf0472bd");
}
[Fact]
public void can_render_svg_qrcode_without_quietzones_hex()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
var svg = new SvgQRCode(data).GetGraphic(10, "#000000", "#ffffff", false);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("4ab0417cc6127e347ca1b2322c49ed7d");
}
#if SYSTEM_DRAWING && !NET5_0_OR_GREATER // .NET 5+ does not encode PNG images in a deterministic way, so the hash may be different across different runs
[Fact]
public void can_render_svg_qrcode_with_png_logo_bitmap()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
var logoBitmap = (Bitmap)Image.FromFile(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15);
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("78e02e8ba415f15817d5ed88c4afca31");
}
[Fact]
public void can_render_svg_qrcode_with_png_logo_bitmap_without_background()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
var logoBitmap = (Bitmap)Image.FromFile(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15, false);
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("f221b2baecc2883f8e8ae54f12ba701b");
}
[Fact]
public void can_render_svg_qrcode_with_png_logo_bitmap_without_quietzones()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
var logoBitmap = (Bitmap)Image.FromFile(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15);
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
var svg = new SvgQRCode(data).GetGraphic(10, Color.Black, Color.White, drawQuietZones: false, logo: logoObj);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("8b4d114136c7fd26e0b34e5a15daac3b");
}
#endif
[Fact]
public void can_render_svg_qrcode_with_png_logo_bytearray()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
var logoBitmap = System.IO.File.ReadAllBytes(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15);
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("7d53f25af04e52b20550deb2e3589e96");
}
[Fact]
public void can_render_svg_qrcode_with_svg_logo_embedded()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909361
var logoSvg = File.ReadAllText(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_Scientist_2909361.svg");
var logoObj = new SvgQRCode.SvgLogo(logoSvg, 20);
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.SVG);
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("855eb988d3af035abd273ed1629aa952");
}
[Fact]
public void can_render_svg_qrcode_with_svg_logo_image_tag()
{
//Create QR code
var gen = new QRCodeGenerator();
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909361
var logoSvg = File.ReadAllText(HelperFunctions.GetAssemblyPath() + "\\assets\\noun_Scientist_2909361.svg");
var logoObj = new SvgQRCode.SvgLogo(logoSvg, 20, iconEmbedded: false);
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("bd442ea77d45a41a4f490b8d41591e04");
}
[Fact]
public void can_instantate_parameterless()
{
var svgCode = new SvgQRCode();
svgCode.ShouldNotBeNull();
svgCode.ShouldBeOfType<SvgQRCode>();
}
[Fact]
public void can_render_svg_qrcode_from_helper()
{
//Create QR code
var svg = SvgQRCodeHelper.GetQRCode("A", 2, "#000000", "#ffffff", QRCodeGenerator.ECCLevel.Q);
var result = HelperFunctions.StringToHash(svg);
result.ShouldBe("f5ec37aa9fb207e3701cc0d86c4a357d");
}
}
#endif