Skip to content

Commit 4bacf39

Browse files
committed
Reversed IsEmbedded logic and wrote additional tests
1 parent 9749532 commit 4bacf39

File tree

2 files changed

+56
-9
lines changed

2 files changed

+56
-9
lines changed

QRCoder/SvgQRCode.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,13 @@ public string GetGraphic(Size viewBox, string darkColorHex, string lightColorHex
187187
//Render logo, if set
188188
if (logo != null)
189189
{
190-
if (logo.GetMediaType() == SvgLogo.MediaType.PNG || logo.IsEmbedded())
190+
if (!logo.IsEmbedded())
191191
{
192192
svgFile.AppendLine($@"<svg width=""100%"" height=""100%"" version=""1.1"" xmlns = ""http://www.w3.org/2000/svg"">");
193193
svgFile.AppendLine($@"<image x=""{CleanSvgVal(logoAttr.Value.X)}"" y=""{CleanSvgVal(logoAttr.Value.Y)}"" width=""{CleanSvgVal(logoAttr.Value.Width)}"" height=""{CleanSvgVal(logoAttr.Value.Height)}"" xlink:href=""{logo.GetDataUri()}"" />");
194194
svgFile.AppendLine(@"</svg>");
195195
}
196-
else if (logo.GetMediaType() == SvgLogo.MediaType.SVG)
196+
else
197197
{
198198
var rawLogo = (string)logo.GetRawLogo();
199199
var svg = System.Xml.Linq.XDocument.Parse(rawLogo);
@@ -297,8 +297,8 @@ public SvgLogo(Bitmap iconRasterized, int iconSizePercent = 15, bool fillLogoBac
297297
/// <param name="iconVectorized">Logo to be rendered as SVG/vectorized graphic/string</param>
298298
/// <param name="iconSizePercent">Degree of percentage coverage of the QR code by the logo</param>
299299
/// <param name="fillLogoBackground">If true, the background behind the logo will be cleaned</param>
300-
/// <param name="iconEmbedded">If true, the logo will be expressed as <image>-tag instead of embedding the svg</param>
301-
public SvgLogo(string iconVectorized, int iconSizePercent = 15, bool fillLogoBackground = true, bool iconEmbedded = false)
300+
/// <param name="iconEmbedded">If true, the logo will embedded as native svg instead of embedding it as image-tag</param>
301+
public SvgLogo(string iconVectorized, int iconSizePercent = 15, bool fillLogoBackground = true, bool iconEmbedded = true)
302302
{
303303
_iconSizePercent = iconSizePercent;
304304
_logoData = Convert.ToBase64String(Encoding.UTF8.GetBytes(iconVectorized), Base64FormattingOptions.None);

QRCoderTests/SvgQRCodeRendererTests.cs

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.IO;
77
using System.Security.Cryptography;
88
using QRCoderTests.Helpers;
9+
910
#if !NETCOREAPP1_1
1011
using System.Drawing;
1112
#endif
@@ -67,6 +68,19 @@ public void can_render_svg_qrcode_viewbox_mode()
6768
result.ShouldBe("56719c7db39937c74377855a5dc4af0a");
6869
}
6970

71+
[Fact]
72+
[Category("QRRenderer/SvgQRCode")]
73+
public void can_render_svg_qrcode_viewbox_mode_viewboxattr()
74+
{
75+
//Create QR code
76+
var gen = new QRCodeGenerator();
77+
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
78+
var svg = new SvgQRCode(data).GetGraphic(new Size(128, 128), sizingMode: SvgQRCode.SizingMode.ViewBoxAttribute);
79+
80+
var result = HelperFunctions.StringToHash(svg);
81+
result.ShouldBe("788afdb693b0b71eed344e495c180b60");
82+
}
83+
7084
[Fact]
7185
[Category("QRRenderer/SvgQRCode")]
7286
public void can_render_svg_qrcode_without_quietzones()
@@ -80,6 +94,19 @@ public void can_render_svg_qrcode_without_quietzones()
8094
result.ShouldBe("2a582427d86b51504c08ebcbcf0472bd");
8195
}
8296

97+
[Fact]
98+
[Category("QRRenderer/SvgQRCode")]
99+
public void can_render_svg_qrcode_without_quietzones_hex()
100+
{
101+
//Create QR code
102+
var gen = new QRCodeGenerator();
103+
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
104+
var svg = new SvgQRCode(data).GetGraphic(10, "#000000", "#ffffff", false);
105+
106+
var result = HelperFunctions.StringToHash(svg);
107+
result.ShouldBe("4ab0417cc6127e347ca1b2322c49ed7d");
108+
}
109+
83110
[Fact]
84111
[Category("QRRenderer/SvgQRCode")]
85112
public void can_render_svg_qrcode_with_png_logo()
@@ -89,8 +116,9 @@ public void can_render_svg_qrcode_with_png_logo()
89116
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
90117

91118
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909346
92-
var logoBitmap = (Bitmap)Bitmap.FromFile(GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
93-
var logoObj = new SvgQRCode.SvgLogo(logoBitmap, 15);
119+
var logoBitmap = (Bitmap)Image.FromFile(GetAssemblyPath() + "\\assets\\noun_software engineer_2909346.png");
120+
var logoObj = new SvgQRCode.SvgLogo(iconRasterized: logoBitmap, 15);
121+
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.PNG);
94122

95123
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
96124

@@ -100,20 +128,39 @@ public void can_render_svg_qrcode_with_png_logo()
100128

101129
[Fact]
102130
[Category("QRRenderer/SvgQRCode")]
103-
public void can_render_svg_qrcode_with_svg_logo()
131+
public void can_render_svg_qrcode_with_svg_logo_embedded()
132+
{
133+
//Create QR code
134+
var gen = new QRCodeGenerator();
135+
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
136+
137+
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909361
138+
var logoSvg = File.ReadAllText(GetAssemblyPath() + "\\assets\\noun_Scientist_2909361.svg");
139+
var logoObj = new SvgQRCode.SvgLogo(logoSvg, 20);
140+
logoObj.GetMediaType().ShouldBe<SvgQRCode.SvgLogo.MediaType>(SvgQRCode.SvgLogo.MediaType.SVG);
141+
142+
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
143+
144+
var result = HelperFunctions.StringToHash(svg);
145+
result.ShouldBe("855eb988d3af035abd273ed1629aa952");
146+
}
147+
148+
[Fact]
149+
[Category("QRRenderer/SvgQRCode")]
150+
public void can_render_svg_qrcode_with_svg_logo_image_tag()
104151
{
105152
//Create QR code
106153
var gen = new QRCodeGenerator();
107154
var data = gen.CreateQrCode("This is a quick test! 123#?", QRCodeGenerator.ECCLevel.H);
108155

109156
//Used logo is licensed under public domain. Ref.: https://thenounproject.com/Iconathon1/collection/redefining-women/?i=2909361
110157
var logoSvg = File.ReadAllText(GetAssemblyPath() + "\\assets\\noun_Scientist_2909361.svg");
111-
var logoObj = new SvgQRCode.SvgLogo(logoSvg, 30);
158+
var logoObj = new SvgQRCode.SvgLogo(logoSvg, 20, iconEmbedded: false);
112159

113160
var svg = new SvgQRCode(data).GetGraphic(10, Color.DarkGray, Color.White, logo: logoObj);
114161

115162
var result = HelperFunctions.StringToHash(svg);
116-
result.ShouldBe("592271ef77406c0074a3005f78130906");
163+
result.ShouldBe("bd442ea77d45a41a4f490b8d41591e04");
117164
}
118165

119166
[Fact]

0 commit comments

Comments
 (0)