Skip to content

Commit 923dbe5

Browse files
authored
Merge pull request #533 from codebude/add-missing-ecimode-and-ecclevel-overrides-in-payload-generator
Implemented encoding constraints in SwissQRCode and GiroCode payloads
2 parents 78d25fa + 2f6108d commit 923dbe5

File tree

6 files changed

+47
-0
lines changed

6 files changed

+47
-0
lines changed

QRCoder/PayloadGenerator.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,9 @@ public class SwissQrCode : Payload
711711
private readonly Reference reference;
712712
private readonly AdditionalInformation additionalInformation;
713713

714+
public override QRCodeGenerator.ECCLevel EccLevel { get { return QRCodeGenerator.ECCLevel.M; } }
715+
public override QRCodeGenerator.EciMode EciMode { get { return QRCodeGenerator.EciMode.Utf8; } }
716+
714717
/// <summary>
715718
/// Generates the payload for a SwissQrCode v2.0. (Don't forget to use ECC-Level=M, EncodingMode=UTF-8 and to set the Swiss flag icon to the final QR code.)
716719
/// </summary>
@@ -1198,6 +1201,7 @@ public class Girocode : Payload
11981201
private readonly GirocodeEncoding encoding;
11991202
private readonly TypeOfRemittance typeOfRemittance;
12001203

1204+
public override QRCodeGenerator.ECCLevel EccLevel { get { return QRCodeGenerator.ECCLevel.M; } }
12011205

12021206
/// <summary>
12031207
/// Generates the payload for a Girocode (QR-Code with credit transfer information).

QRCoderApiTests/net35+net40+net50+net50-windows+netstandard20/QRCoder.approved.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ namespace QRCoder
428428
public class Girocode : QRCoder.PayloadGenerator.Payload
429429
{
430430
public Girocode(string iban, string bic, string name, decimal amount, string remittanceInformation = "", QRCoder.PayloadGenerator.Girocode.TypeOfRemittance typeOfRemittance = 1, string purposeOfCreditTransfer = "", string messageToGirocodeUser = "", QRCoder.PayloadGenerator.Girocode.GirocodeVersion version = 0, QRCoder.PayloadGenerator.Girocode.GirocodeEncoding encoding = 1) { }
431+
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
431432
public override string ToString() { }
432433
public enum GirocodeEncoding
433434
{
@@ -705,6 +706,8 @@ namespace QRCoder
705706
public class SwissQrCode : QRCoder.PayloadGenerator.Payload
706707
{
707708
public SwissQrCode(QRCoder.PayloadGenerator.SwissQrCode.Iban iban, QRCoder.PayloadGenerator.SwissQrCode.Currency currency, QRCoder.PayloadGenerator.SwissQrCode.Contact creditor, QRCoder.PayloadGenerator.SwissQrCode.Reference reference, QRCoder.PayloadGenerator.SwissQrCode.AdditionalInformation additionalInformation = null, QRCoder.PayloadGenerator.SwissQrCode.Contact debitor = null, decimal? amount = default, System.DateTime? requestedDateOfPayment = default, QRCoder.PayloadGenerator.SwissQrCode.Contact ultimateCreditor = null, string alternativeProcedure1 = null, string alternativeProcedure2 = null) { }
709+
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
710+
public override QRCoder.QRCodeGenerator.EciMode EciMode { get; }
708711
public override string ToString() { }
709712
public class AdditionalInformation
710713
{

QRCoderApiTests/net60-windows/QRCoder.approved.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ namespace QRCoder
433433
public class Girocode : QRCoder.PayloadGenerator.Payload
434434
{
435435
public Girocode(string iban, string bic, string name, decimal amount, string remittanceInformation = "", QRCoder.PayloadGenerator.Girocode.TypeOfRemittance typeOfRemittance = 1, string purposeOfCreditTransfer = "", string messageToGirocodeUser = "", QRCoder.PayloadGenerator.Girocode.GirocodeVersion version = 0, QRCoder.PayloadGenerator.Girocode.GirocodeEncoding encoding = 1) { }
436+
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
436437
public override string ToString() { }
437438
public enum GirocodeEncoding
438439
{
@@ -710,6 +711,8 @@ namespace QRCoder
710711
public class SwissQrCode : QRCoder.PayloadGenerator.Payload
711712
{
712713
public SwissQrCode(QRCoder.PayloadGenerator.SwissQrCode.Iban iban, QRCoder.PayloadGenerator.SwissQrCode.Currency currency, QRCoder.PayloadGenerator.SwissQrCode.Contact creditor, QRCoder.PayloadGenerator.SwissQrCode.Reference reference, QRCoder.PayloadGenerator.SwissQrCode.AdditionalInformation additionalInformation = null, QRCoder.PayloadGenerator.SwissQrCode.Contact debitor = null, decimal? amount = default, System.DateTime? requestedDateOfPayment = default, QRCoder.PayloadGenerator.SwissQrCode.Contact ultimateCreditor = null, string alternativeProcedure1 = null, string alternativeProcedure2 = null) { }
714+
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
715+
public override QRCoder.QRCodeGenerator.EciMode EciMode { get; }
713716
public override string ToString() { }
714717
public class AdditionalInformation
715718
{

QRCoderApiTests/net60/QRCoder.approved.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,7 @@ namespace QRCoder
391391
public class Girocode : QRCoder.PayloadGenerator.Payload
392392
{
393393
public Girocode(string iban, string bic, string name, decimal amount, string remittanceInformation = "", QRCoder.PayloadGenerator.Girocode.TypeOfRemittance typeOfRemittance = 1, string purposeOfCreditTransfer = "", string messageToGirocodeUser = "", QRCoder.PayloadGenerator.Girocode.GirocodeVersion version = 0, QRCoder.PayloadGenerator.Girocode.GirocodeEncoding encoding = 1) { }
394+
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
394395
public override string ToString() { }
395396
public enum GirocodeEncoding
396397
{
@@ -668,6 +669,8 @@ namespace QRCoder
668669
public class SwissQrCode : QRCoder.PayloadGenerator.Payload
669670
{
670671
public SwissQrCode(QRCoder.PayloadGenerator.SwissQrCode.Iban iban, QRCoder.PayloadGenerator.SwissQrCode.Currency currency, QRCoder.PayloadGenerator.SwissQrCode.Contact creditor, QRCoder.PayloadGenerator.SwissQrCode.Reference reference, QRCoder.PayloadGenerator.SwissQrCode.AdditionalInformation additionalInformation = null, QRCoder.PayloadGenerator.SwissQrCode.Contact debitor = null, decimal? amount = default, System.DateTime? requestedDateOfPayment = default, QRCoder.PayloadGenerator.SwissQrCode.Contact ultimateCreditor = null, string alternativeProcedure1 = null, string alternativeProcedure2 = null) { }
672+
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
673+
public override QRCoder.QRCodeGenerator.EciMode EciMode { get; }
671674
public override string ToString() { }
672675
public class AdditionalInformation
673676
{

QRCoderApiTests/netstandard13/QRCoder.approved.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,7 @@ namespace QRCoder
371371
public class Girocode : QRCoder.PayloadGenerator.Payload
372372
{
373373
public Girocode(string iban, string bic, string name, decimal amount, string remittanceInformation = "", QRCoder.PayloadGenerator.Girocode.TypeOfRemittance typeOfRemittance = 1, string purposeOfCreditTransfer = "", string messageToGirocodeUser = "", QRCoder.PayloadGenerator.Girocode.GirocodeVersion version = 0, QRCoder.PayloadGenerator.Girocode.GirocodeEncoding encoding = 1) { }
374+
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
374375
public override string ToString() { }
375376
public enum GirocodeEncoding
376377
{
@@ -648,6 +649,8 @@ namespace QRCoder
648649
public class SwissQrCode : QRCoder.PayloadGenerator.Payload
649650
{
650651
public SwissQrCode(QRCoder.PayloadGenerator.SwissQrCode.Iban iban, QRCoder.PayloadGenerator.SwissQrCode.Currency currency, QRCoder.PayloadGenerator.SwissQrCode.Contact creditor, QRCoder.PayloadGenerator.SwissQrCode.Reference reference, QRCoder.PayloadGenerator.SwissQrCode.AdditionalInformation additionalInformation = null, QRCoder.PayloadGenerator.SwissQrCode.Contact debitor = null, decimal? amount = default, System.DateTime? requestedDateOfPayment = default, QRCoder.PayloadGenerator.SwissQrCode.Contact ultimateCreditor = null, string alternativeProcedure1 = null, string alternativeProcedure2 = null) { }
652+
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
653+
public override QRCoder.QRCodeGenerator.EciMode EciMode { get; }
651654
public override string ToString() { }
652655
public class AdditionalInformation
653656
{

QRCoderTests/PayloadGeneratorTests.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using static QRCoder.PayloadGenerator.SwissQrCode.Reference;
1010
using System.Reflection;
1111
using static QRCoder.PayloadGenerator.SwissQrCode.AdditionalInformation;
12+
using static QRCoder.QRCodeGenerator;
1213

1314
namespace QRCoderTests
1415
{
@@ -1335,6 +1336,21 @@ public void girocode_generator_should_throw_usermessage_exception()
13351336
exception.Message.ShouldBe("Message to the Girocode-User reader texts have to shorter than 71 chars.");
13361337
}
13371338

1339+
[Fact]
1340+
[Category("PayloadGenerator/Girocode")]
1341+
public void girocode_generator_sets_encoding_parameters()
1342+
{
1343+
var iban = "DE33100205000001194700";
1344+
var bic = "BFSWDE33BER";
1345+
var name = "Wikimedia Fördergesellschaft";
1346+
var amount = 10.00m;
1347+
1348+
var payload = new PayloadGenerator.Girocode(iban, bic, name, amount);
1349+
1350+
payload.EccLevel.ShouldBe<ECCLevel>(ECCLevel.M);
1351+
payload.EciMode.ShouldBe<EciMode>(EciMode.Default);
1352+
payload.Version.ShouldBe(-1);
1353+
}
13381354

13391355
[Fact]
13401356
[Category("PayloadGenerator/BezahlCode")]
@@ -2567,6 +2583,21 @@ public void swissqrcode_generator_should_generate_swisscode_full()
25672583
.ShouldBe("SPC\r\n0200\r\n1\r\nCH2430043000000789012\r\nS\r\nJohn Doe\r\nParlamentsgebäude\r\n1\r\n3003\r\nBern\r\nCH\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n100.25\r\nCHF\r\nS\r\nJohn Doe\r\nParlamentsgebäude\r\n1\r\n3003\r\nBern\r\nCH\r\nQRR\r\n990005000000000320071012303\r\nThis is my unstructured message.\r\nEPD\r\nSome bill information here...");
25682584
}
25692585

2586+
[Fact]
2587+
[Category("PayloadGenerator/SwissQrCode")]
2588+
public void swissqrcode_generator_sets_encoding_parameters()
2589+
{
2590+
var creditor = PayloadGenerator.SwissQrCode.Contact.WithStructuredAddress("John Doe", "3003", "Bern", "CH", "Parlamentsgebäude", "1");
2591+
var iban = new PayloadGenerator.SwissQrCode.Iban("CH2430043000000789012", PayloadGenerator.SwissQrCode.Iban.IbanType.QrIban);
2592+
var reference = new PayloadGenerator.SwissQrCode.Reference(ReferenceType.QRR, "990005000000000320071012303", ReferenceTextType.QrReference);
2593+
var currency = PayloadGenerator.SwissQrCode.Currency.EUR;
2594+
2595+
var payload = new PayloadGenerator.SwissQrCode(iban, currency, creditor, reference);
2596+
2597+
payload.EccLevel.ShouldBe<ECCLevel>(ECCLevel.M);
2598+
payload.EciMode.ShouldBe<EciMode>(EciMode.Utf8);
2599+
payload.Version.ShouldBe(-1);
2600+
}
25702601

25712602
[Fact]
25722603
[Category("PayloadGenerator/SwissQrCode")]

0 commit comments

Comments
 (0)