From 877c95593c39146bb8c5d957d3c659767fedf63e Mon Sep 17 00:00:00 2001 From: Andrei Ciobanu Date: Sun, 2 Apr 2017 22:01:33 +0300 Subject: [PATCH] Added support for generating ISSNS codes. --- .../mockneat/github/GenerateCreditCards.java | 22 +++++++++-- .../java/net/andreinc/mockneat/MockNeat.java | 5 +++ .../mockneat/interfaces/MockUnit.java | 1 - .../andreinc/mockneat/unit/misc/ISSNS.java | 38 +++++++++++++++++++ .../mockneat/utils/NamedFormatUtils.java | 4 +- .../java/net/andreinc/mockneat/Constants.java | 1 + .../mockneat/unit/misc/ISSNSTest.java | 28 ++++++++++++++ 7 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/andreinc/mockneat/unit/misc/ISSNS.java create mode 100644 src/test/java/net/andreinc/mockneat/unit/misc/ISSNSTest.java diff --git a/examples/java/net/andreinc/mockneat/github/GenerateCreditCards.java b/examples/java/net/andreinc/mockneat/github/GenerateCreditCards.java index b4b0a7e..d065322 100644 --- a/examples/java/net/andreinc/mockneat/github/GenerateCreditCards.java +++ b/examples/java/net/andreinc/mockneat/github/GenerateCreditCards.java @@ -3,13 +3,17 @@ import net.andreinc.mockneat.MockNeat; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.LinkedList; import java.util.List; import java.util.stream.Stream; -import static net.andreinc.mockneat.types.enums.CreditCardType.AMERICAN_EXPRESS; -import static net.andreinc.mockneat.types.enums.CreditCardType.MASTERCARD; -import static net.andreinc.mockneat.types.enums.CreditCardType.VISA_16; +import static java.nio.file.StandardOpenOption.CREATE; +import static java.nio.file.StandardOpenOption.WRITE; +import static net.andreinc.mockneat.types.enums.CreditCardType.*; /** * Created by andreinicolinciobanu on 03/03/2017. @@ -18,6 +22,16 @@ public class GenerateCreditCards { public static void main(String[] args) { MockNeat m = MockNeat.threadLocal(); + final Path path = Paths.get("cc.txt"); + + // Write in a file 1000 credit cards AMEX and Mastercard: + m.creditCards() + .types(MASTERCARD, AMERICAN_EXPRESS) + .list(1000) + .consume(list -> { + try { Files.write(path, list, CREATE, WRITE); } + catch (IOException e) { e.printStackTrace(); } + }); // Generates a single valid credit card number (AMEX) String amex = m.creditCards() @@ -59,5 +73,7 @@ public static void main(String[] args) { .val(); String ccName = m.creditCards().names().val(); + + } } diff --git a/src/main/java/net/andreinc/mockneat/MockNeat.java b/src/main/java/net/andreinc/mockneat/MockNeat.java index 26b4957..510b345 100644 --- a/src/main/java/net/andreinc/mockneat/MockNeat.java +++ b/src/main/java/net/andreinc/mockneat/MockNeat.java @@ -27,6 +27,7 @@ import net.andreinc.mockneat.unit.financial.Money; import net.andreinc.mockneat.unit.hashes.Hashes; import net.andreinc.mockneat.unit.id.UUIDs; +import net.andreinc.mockneat.unit.misc.ISSNS; import net.andreinc.mockneat.unit.misc.SSCs; import net.andreinc.mockneat.unit.networking.*; import net.andreinc.mockneat.unit.objects.Constructor; @@ -78,6 +79,7 @@ public class MockNeat { private final Genders rGenders; private final Hashes rHashes; private final Ints rInts; + private final ISSNS rISSNS; private final IPv4s rIPv4s; private final IPv6s rIPv6s; private final LocalDates rLocalDates; @@ -114,6 +116,7 @@ public MockNeat(RandomType randomTypeType) { this.rInts = new Ints(this); this.rIPv4s = new IPv4s(this); this.rIPv6s = new IPv6s(this); + this.rISSNS = new ISSNS(this); this.rLocalDates = new LocalDates(this); this.rLongs = new Longs(this); this.rMacs = new Macs(this); @@ -196,6 +199,8 @@ public Factory factory(Class targetCls, Class factoryCls) public IPv6s iPv6s() { return this.rIPv6s; } + public ISSNS issns() { return this.rISSNS; } + public LocalDates localDates() { return this.rLocalDates; } public Longs longs() { return this.rLongs; } diff --git a/src/main/java/net/andreinc/mockneat/interfaces/MockUnit.java b/src/main/java/net/andreinc/mockneat/interfaces/MockUnit.java index 52d54cb..71c173c 100644 --- a/src/main/java/net/andreinc/mockneat/interfaces/MockUnit.java +++ b/src/main/java/net/andreinc/mockneat/interfaces/MockUnit.java @@ -66,7 +66,6 @@ default R val(Function function) { return function.apply(supplier().get()); } - //TODO document default void consume(Consumer consumer) { notNull(consumer, INPUT_PARAMETER_NOT_NULL, "consumer"); consumer.accept(val()); diff --git a/src/main/java/net/andreinc/mockneat/unit/misc/ISSNS.java b/src/main/java/net/andreinc/mockneat/unit/misc/ISSNS.java new file mode 100644 index 0000000..e0e9575 --- /dev/null +++ b/src/main/java/net/andreinc/mockneat/unit/misc/ISSNS.java @@ -0,0 +1,38 @@ +package net.andreinc.mockneat.unit.misc; + +import net.andreinc.mockneat.MockNeat; +import net.andreinc.mockneat.interfaces.MockUnitString; + +import java.util.function.Supplier; + +import static org.apache.commons.lang3.StringUtils.join; + +/** + * Created by andreinicolinciobanu on 26/03/17. + */ +public class ISSNS implements MockUnitString { + + private static final String ISSN_PREFIX = "ISSN"; + + private MockNeat mock; + + public ISSNS(MockNeat mockNeat) { + this.mock = mockNeat; + } + + @Override + public Supplier supplier() { + return () -> { + Integer[] array = mock.ints().range(0, 10).array(7).val(); + int sum = 0; + for(int i = 0, j = 8; i < array.length; i++, j--) { + sum += j * array[i]; + } + int remainder = sum % 11; + if (remainder != 0) { remainder = 11 - remainder; } + return ISSN_PREFIX + " " + join(array, "", 0, 4) + + "-" + join(array, "", 4, 7) + + ((remainder == 10) ? "X" : remainder + ""); + }; + } +} diff --git a/src/main/java/net/andreinc/mockneat/utils/NamedFormatUtils.java b/src/main/java/net/andreinc/mockneat/utils/NamedFormatUtils.java index 10cfc9b..079a1df 100644 --- a/src/main/java/net/andreinc/mockneat/utils/NamedFormatUtils.java +++ b/src/main/java/net/andreinc/mockneat/utils/NamedFormatUtils.java @@ -25,8 +25,6 @@ public class NamedFormatUtils { - protected enum State { PARAM, PARAM_START, PARAM_END, FREE_TEXT } - // fmt = "${param1}${param2}${param3}" public static String format(String fmt, Map args) { int i = 0; @@ -58,6 +56,8 @@ public static String format(String fmt, Map args) { return result.toString(); } + + protected enum State { PARAM, PARAM_START, PARAM_END, FREE_TEXT } private static void appendParamValue(Map args, StringBuilder param, StringBuilder result) { String paramStr = param.toString(); validateParamLength(paramStr); diff --git a/src/test/java/net/andreinc/mockneat/Constants.java b/src/test/java/net/andreinc/mockneat/Constants.java index 7b0cd27..59f2596 100644 --- a/src/test/java/net/andreinc/mockneat/Constants.java +++ b/src/test/java/net/andreinc/mockneat/Constants.java @@ -30,6 +30,7 @@ public class Constants { public static final int FMT_CYCLES = 1000; public static final int GENDERS_CYCLES = 1000; public static final int IBANS_CYCLES = 1000; + public static final int ISSNS_CYCLES = 1000; public static final int INTS_CYCLES = 1000; public static final int IPV4S_CYCLES = 1000; public static final int IPV6S_CYCLES = 1000; diff --git a/src/test/java/net/andreinc/mockneat/unit/misc/ISSNSTest.java b/src/test/java/net/andreinc/mockneat/unit/misc/ISSNSTest.java new file mode 100644 index 0000000..d434548 --- /dev/null +++ b/src/test/java/net/andreinc/mockneat/unit/misc/ISSNSTest.java @@ -0,0 +1,28 @@ +package net.andreinc.mockneat.unit.misc; + +import org.apache.commons.validator.routines.ISSNValidator; +import org.junit.Test; + +import static net.andreinc.mockneat.Constants.*; +import static net.andreinc.mockneat.utils.LoopsUtils.loop; +import static org.junit.Assert.assertTrue; + +/** + * Created by andreinicolinciobanu on 26/03/17. + */ +public class ISSNSTest { + + private ISSNValidator validator = ISSNValidator.getInstance(); + + @Test + public void test() throws Exception { + loop( + true, + ISSNS_CYCLES, + MOCKS, + m -> m.issns().val(), + issn -> assertTrue(validator.validate(issn)!=null) + ); + System.out.println(M.issns().val()); + } +}