Skip to content

Commit

Permalink
Merge branch 'master' into refactor_ext_methods
Browse files Browse the repository at this point in the history
  • Loading branch information
Shane32 authored May 24, 2024
2 parents 3edab65 + 923dbe5 commit d5e466d
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 24 deletions.
4 changes: 4 additions & 0 deletions QRCoder/PayloadGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,9 @@ public class SwissQrCode : Payload
private readonly Reference reference;
private readonly AdditionalInformation additionalInformation;

public override QRCodeGenerator.ECCLevel EccLevel { get { return QRCodeGenerator.ECCLevel.M; } }
public override QRCodeGenerator.EciMode EciMode { get { return QRCodeGenerator.EciMode.Utf8; } }

/// <summary>
/// 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.)
/// </summary>
Expand Down Expand Up @@ -1198,6 +1201,7 @@ public class Girocode : Payload
private readonly GirocodeEncoding encoding;
private readonly TypeOfRemittance typeOfRemittance;

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

/// <summary>
/// Generates the payload for a Girocode (QR-Code with credit transfer information).
Expand Down
24 changes: 0 additions & 24 deletions QRCoder/QRCodeGenerator.ModulePlacer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,6 @@ public partial class QRCodeGenerator
{
private static partial class ModulePlacer
{
/// <summary>
/// Adds a quiet zone around the QR code. A quiet zone is a blank margin used to separate the QR code
/// from other visual elements, improving scanner readability. This zone consists of white modules
/// extending 4 modules wide around the existing QR code pattern.
/// </summary>
/// <param name="qrCode">The QR code data structure to modify.</param>
public static void AddQuietZone(QRCodeData qrCode)
{
// Calculate the required length for a new quiet line, including existing modules plus 8 additional for the quiet zone.
var quietLineLength = qrCode.ModuleMatrix.Count + 8;
// Add four new lines at the top of the QR code matrix to create the upper part of the quiet zone.
for (var i = 0; i < 4; i++)
qrCode.ModuleMatrix.Insert(0, new BitArray(quietLineLength));
// Add four new lines at the bottom of the QR code matrix to create the lower part of the quiet zone.
for (var i = 0; i < 4; i++)
qrCode.ModuleMatrix.Add(new BitArray(quietLineLength));
// Expand each line of the QR code matrix sideways by 4 modules on each side to complete the quiet zone.
for (var i = 4; i < qrCode.ModuleMatrix.Count - 4; i++)
{
qrCode.ModuleMatrix[i].Length += 8;
ShiftAwayFromBit0(qrCode.ModuleMatrix[i], 4);
}
}

/// <summary>
/// Places the version information on the QR code matrix for versions 7 and higher. Version information
/// is encoded into two small rectangular areas near the bottom left and top right corners outside the timing patterns.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,7 @@ namespace QRCoder
public class Girocode : QRCoder.PayloadGenerator.Payload
{
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) { }
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
public override string ToString() { }
public enum GirocodeEncoding
{
Expand Down Expand Up @@ -705,6 +706,8 @@ namespace QRCoder
public class SwissQrCode : QRCoder.PayloadGenerator.Payload
{
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) { }
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
public override QRCoder.QRCodeGenerator.EciMode EciMode { get; }
public override string ToString() { }
public class AdditionalInformation
{
Expand Down
3 changes: 3 additions & 0 deletions QRCoderApiTests/net60-windows/QRCoder.approved.txt
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,7 @@ namespace QRCoder
public class Girocode : QRCoder.PayloadGenerator.Payload
{
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) { }
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
public override string ToString() { }
public enum GirocodeEncoding
{
Expand Down Expand Up @@ -710,6 +711,8 @@ namespace QRCoder
public class SwissQrCode : QRCoder.PayloadGenerator.Payload
{
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) { }
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
public override QRCoder.QRCodeGenerator.EciMode EciMode { get; }
public override string ToString() { }
public class AdditionalInformation
{
Expand Down
3 changes: 3 additions & 0 deletions QRCoderApiTests/net60/QRCoder.approved.txt
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ namespace QRCoder
public class Girocode : QRCoder.PayloadGenerator.Payload
{
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) { }
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
public override string ToString() { }
public enum GirocodeEncoding
{
Expand Down Expand Up @@ -668,6 +669,8 @@ namespace QRCoder
public class SwissQrCode : QRCoder.PayloadGenerator.Payload
{
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) { }
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
public override QRCoder.QRCodeGenerator.EciMode EciMode { get; }
public override string ToString() { }
public class AdditionalInformation
{
Expand Down
3 changes: 3 additions & 0 deletions QRCoderApiTests/netstandard13/QRCoder.approved.txt
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ namespace QRCoder
public class Girocode : QRCoder.PayloadGenerator.Payload
{
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) { }
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
public override string ToString() { }
public enum GirocodeEncoding
{
Expand Down Expand Up @@ -648,6 +649,8 @@ namespace QRCoder
public class SwissQrCode : QRCoder.PayloadGenerator.Payload
{
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) { }
public override QRCoder.QRCodeGenerator.ECCLevel EccLevel { get; }
public override QRCoder.QRCodeGenerator.EciMode EciMode { get; }
public override string ToString() { }
public class AdditionalInformation
{
Expand Down
31 changes: 31 additions & 0 deletions QRCoderTests/PayloadGeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using static QRCoder.PayloadGenerator.SwissQrCode.Reference;
using System.Reflection;
using static QRCoder.PayloadGenerator.SwissQrCode.AdditionalInformation;
using static QRCoder.QRCodeGenerator;

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

[Fact]
[Category("PayloadGenerator/Girocode")]
public void girocode_generator_sets_encoding_parameters()
{
var iban = "DE33100205000001194700";
var bic = "BFSWDE33BER";
var name = "Wikimedia Fördergesellschaft";
var amount = 10.00m;

var payload = new PayloadGenerator.Girocode(iban, bic, name, amount);

payload.EccLevel.ShouldBe<ECCLevel>(ECCLevel.M);
payload.EciMode.ShouldBe<EciMode>(EciMode.Default);
payload.Version.ShouldBe(-1);
}

[Fact]
[Category("PayloadGenerator/BezahlCode")]
Expand Down Expand Up @@ -2567,6 +2583,21 @@ public void swissqrcode_generator_should_generate_swisscode_full()
.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...");
}

[Fact]
[Category("PayloadGenerator/SwissQrCode")]
public void swissqrcode_generator_sets_encoding_parameters()
{
var creditor = PayloadGenerator.SwissQrCode.Contact.WithStructuredAddress("John Doe", "3003", "Bern", "CH", "Parlamentsgebäude", "1");
var iban = new PayloadGenerator.SwissQrCode.Iban("CH2430043000000789012", PayloadGenerator.SwissQrCode.Iban.IbanType.QrIban);
var reference = new PayloadGenerator.SwissQrCode.Reference(ReferenceType.QRR, "990005000000000320071012303", ReferenceTextType.QrReference);
var currency = PayloadGenerator.SwissQrCode.Currency.EUR;

var payload = new PayloadGenerator.SwissQrCode(iban, currency, creditor, reference);

payload.EccLevel.ShouldBe<ECCLevel>(ECCLevel.M);
payload.EciMode.ShouldBe<EciMode>(EciMode.Utf8);
payload.Version.ShouldBe(-1);
}

[Fact]
[Category("PayloadGenerator/SwissQrCode")]
Expand Down

0 comments on commit d5e466d

Please sign in to comment.