From 81444bc47903497c2f5321d67691b1a615128160 Mon Sep 17 00:00:00 2001 From: minsu4107 <32637512+minsu4107@users.noreply.github.com> Date: Fri, 19 Jun 2020 22:18:53 +0900 Subject: [PATCH 1/7] When user insert too long message, THis program have to occur exception. So, I check this problem in QrSegmentAdvanced.java --- java/src/main/java/io/nayuki/qrcodegen/KanjiMode.java | 1 + java/src/main/java/io/nayuki/qrcodegen/QrMode.java | 2 +- .../main/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/java/src/main/java/io/nayuki/qrcodegen/KanjiMode.java b/java/src/main/java/io/nayuki/qrcodegen/KanjiMode.java index 9729f93..a5321ba 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/KanjiMode.java +++ b/java/src/main/java/io/nayuki/qrcodegen/KanjiMode.java @@ -20,4 +20,5 @@ public class KanjiMode extends QrMode { public QrSegment making(String str) { return QrSegmentAdvanced.makeKanji(str); } + } diff --git a/java/src/main/java/io/nayuki/qrcodegen/QrMode.java b/java/src/main/java/io/nayuki/qrcodegen/QrMode.java index 3f0127f..f5636b3 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/QrMode.java +++ b/java/src/main/java/io/nayuki/qrcodegen/QrMode.java @@ -7,7 +7,7 @@ public abstract class QrMode { int modeBits; // Number of character count bits for three different version ranges. - protected int[] numBitsCharCount; + protected int[] numBitsCharCount = new int[4]; int headCost; /*-- Method --*/ diff --git a/java/src/main/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java b/java/src/main/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java index 50066e8..94783a9 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java +++ b/java/src/main/java/io/nayuki/qrcodegen/QrSegmentAdvanced.java @@ -98,12 +98,12 @@ public final class QrSegmentAdvanced { } - private static boolean is_valid_version(int minVersion, int version) { + public static boolean is_valid_version(int minVersion, int version) { return version == minVersion || version == 10 || version == 27; } - private static boolean not_Valid_Version(int minVersion, int maxVersion) { + public static boolean not_Valid_Version(int minVersion, int maxVersion) { return !(QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= QrCode.MAX_VERSION); } @@ -217,12 +217,12 @@ public final class QrSegmentAdvanced { } - private static boolean is_numeric(int convertedPoint) { + public static boolean is_numeric(int convertedPoint) { return '0' <= convertedPoint && convertedPoint <= '9'; } - private static boolean is_alphanumeric(int convertedPoint) { + public static boolean is_alphanumeric(int convertedPoint) { return QrSegment.ALPHANUMERIC_CHARSET.indexOf(convertedPoint) != -1; } From f44b35fcec677a2aed4b3a9d8be0a3bee6024a38 Mon Sep 17 00:00:00 2001 From: minsu4107 <32637512+minsu4107@users.noreply.github.com> Date: Fri, 19 Jun 2020 22:22:18 +0900 Subject: [PATCH 2/7] When user insert too long message, This program have to occur exception. --- .../qrcodegen/testQrSegmentAdvanced.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java diff --git a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java new file mode 100644 index 0000000..e6a135f --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java @@ -0,0 +1,43 @@ +package io.nayuki.qrcodegen; +import static org.junit.Assert.*; + +import org.junit.Test; + +public class testQrSegmentAdvanced { + private QrSegmentAdvanced testing; + private String overString = "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" + + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" + + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" + + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" + + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"; + + private static int min_version = QrCode.MIN_VERSION; + private static int max_version = QrCode.MAX_VERSION; + + /** + *Purpose: Testing when user insert over text length + *Input: overString, Ecc.LOW, minversion = 1, maxversion = 40 + *Expected: + * Return throw + */ + @Test(expected=DataTooLongException.class) + public void makeSegmentsOptimallyThrowtest() { + testing.makeSegmentsOptimally(overString, Ecc.LOW, 1, 40); + } + + /** + *Purpose: Using MCDC, Testing version set correctly. + *Input: overString, Ecc.LOW, minversion = 1, maxversion = 40 + *Expected: + * Return throw + */ +// return version == minVersion || version == 10 || version == 27; + @Test + public void is_valid_Test() { + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 1),1); + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 10),1); + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 27),1); + assertNotEquals(QrSegmentAdvanced.is_valid_version(min_version, 0),1); + } + +} From 9205e0284f36fb934570b27eddf6e74c4319ce54 Mon Sep 17 00:00:00 2001 From: minsu4107 <32637512+minsu4107@users.noreply.github.com> Date: Fri, 19 Jun 2020 22:24:15 +0900 Subject: [PATCH 3/7] Using MCDC, I check flag that checking whether this version is valid. --- .../qrcodegen/testQrSegmentAdvanced.java | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java index e6a135f..dba70c2 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java +++ b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java @@ -9,11 +9,7 @@ public class testQrSegmentAdvanced { + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" - + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"; - - private static int min_version = QrCode.MIN_VERSION; - private static int max_version = QrCode.MAX_VERSION; - + + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"; /** *Purpose: Testing when user insert over text length *Input: overString, Ecc.LOW, minversion = 1, maxversion = 40 @@ -24,20 +20,5 @@ public class testQrSegmentAdvanced { public void makeSegmentsOptimallyThrowtest() { testing.makeSegmentsOptimally(overString, Ecc.LOW, 1, 40); } - - /** - *Purpose: Using MCDC, Testing version set correctly. - *Input: overString, Ecc.LOW, minversion = 1, maxversion = 40 - *Expected: - * Return throw - */ -// return version == minVersion || version == 10 || version == 27; - @Test - public void is_valid_Test() { - assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 1),1); - assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 10),1); - assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 27),1); - assertNotEquals(QrSegmentAdvanced.is_valid_version(min_version, 0),1); - } } From 6db605e0fd60529078a7ccdfafb9b71c2f5dc28d Mon Sep 17 00:00:00 2001 From: minsu4107 <32637512+minsu4107@users.noreply.github.com> Date: Fri, 19 Jun 2020 22:49:50 +0900 Subject: [PATCH 4/7] Checking your's min, max version whether over range in program's min, max version. --- .../qrcodegen/testQrSegmentAdvanced.java | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java index dba70c2..8b8e780 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java +++ b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java @@ -9,7 +9,11 @@ public class testQrSegmentAdvanced { + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd" - + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"; + + "asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"; + + private static int min_version = QrCode.MIN_VERSION; + private static int max_version = QrCode.MAX_VERSION; + /** *Purpose: Testing when user insert over text length *Input: overString, Ecc.LOW, minversion = 1, maxversion = 40 @@ -20,5 +24,36 @@ public class testQrSegmentAdvanced { public void makeSegmentsOptimallyThrowtest() { testing.makeSegmentsOptimally(overString, Ecc.LOW, 1, 40); } + + /** + *Purpose: Using MCDC, Testing version set correctly. + *Input: nin_version, 1, 10, 27, 0 + *Expected: + * All True + */ + + @Test + public void is_valid_Test() { + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 1),1); + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 10),1); + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 27),1); + assertNotEquals(QrSegmentAdvanced.is_valid_version(min_version, 0),1); + } + /** + *Purpose: Using MCDC, Testing version set correctly. + *Input: 1, 40, 41, 0, 3, 4 + *Expected: + * Overrange factor has return 0, So, not equal to 1 + * Unless it has correct range in version's range, if you insert min_version is bigger that max_version, it return 0; + */ + + public void not_Valid_Version_test() { + assertEquals(QrSegmentAdvanced.not_Valid_Version(1, 40), 1); + assertNotEquals(QrSegmentAdvanced.not_Valid_Version(1, 41), 1); + assertNotEquals(QrSegmentAdvanced.not_Valid_Version(0, 40), 1); + assertNotEquals(QrSegmentAdvanced.not_Valid_Version(5, 4), 1); + } + + } From b10a3977433063ffe71d1c953222ac7b52466ee8 Mon Sep 17 00:00:00 2001 From: minsu4107 <32637512+minsu4107@users.noreply.github.com> Date: Fri, 19 Jun 2020 23:09:13 +0900 Subject: [PATCH 5/7] This program checking whether its String is empty. SO, i test it working correctly --- .../qrcodegen/testQrSegmentAdvanced.java | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java index 8b8e780..75266fa 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java +++ b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java @@ -1,6 +1,8 @@ package io.nayuki.qrcodegen; import static org.junit.Assert.*; +import java.util.EmptyStackException; + import org.junit.Test; public class testQrSegmentAdvanced { @@ -14,6 +16,8 @@ public class testQrSegmentAdvanced { private static int min_version = QrCode.MIN_VERSION; private static int max_version = QrCode.MAX_VERSION; + private String nullstring = ""; + /** *Purpose: Testing when user insert over text length *Input: overString, Ecc.LOW, minversion = 1, maxversion = 40 @@ -34,26 +38,37 @@ public class testQrSegmentAdvanced { @Test public void is_valid_Test() { - assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 1),1); - assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 10),1); - assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 27),1); - assertNotEquals(QrSegmentAdvanced.is_valid_version(min_version, 0),1); + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 1),true); + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 10),true); + assertEquals(QrSegmentAdvanced.is_valid_version(min_version, 27),true); + assertNotEquals(QrSegmentAdvanced.is_valid_version(min_version, 0),true); } /** *Purpose: Using MCDC, Testing version set correctly. *Input: 1, 40, 41, 0, 3, 4 *Expected: - * Overrange factor has return 0, So, not equal to 1 + * Over range factor has return 0, So, not equal to 1 * Unless it has correct range in version's range, if you insert min_version is bigger that max_version, it return 0; */ + @Test public void not_Valid_Version_test() { - assertEquals(QrSegmentAdvanced.not_Valid_Version(1, 40), 1); - assertNotEquals(QrSegmentAdvanced.not_Valid_Version(1, 41), 1); - assertNotEquals(QrSegmentAdvanced.not_Valid_Version(0, 40), 1); - assertNotEquals(QrSegmentAdvanced.not_Valid_Version(5, 4), 1); + assertEquals(QrSegmentAdvanced.not_Valid_Version(1, 40), false); + assertNotEquals(QrSegmentAdvanced.not_Valid_Version(1, 41), false); + assertNotEquals(QrSegmentAdvanced.not_Valid_Version(0, 40), false); + assertNotEquals(QrSegmentAdvanced.not_Valid_Version(5, 4), false); } - - + + /** + *Purpose: This program checking whether its String is empty. SO, i test it working correctly + *Input: 1, nullstring, Ecc.Low, 1, 40 + *Expected: + * occur AssertError + */ + @Test(expected = AssertionError.class) + public void emptyString_test() { + testing.makeSegmentsOptimally(nullstring, Ecc.LOW, 1, 40); + } + } From 601a0de46a932909fb10f9c9ef48a3ffb4039953 Mon Sep 17 00:00:00 2001 From: minsu4107 <32637512+minsu4107@users.noreply.github.com> Date: Fri, 19 Jun 2020 23:37:47 +0900 Subject: [PATCH 6/7] This program has several mode and making these. When making these mode, find suitable mode using flag. So, i test this functions. --- .../qrcodegen/testQrSegmentAdvanced.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java index 75266fa..4f9b0e6 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java +++ b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java @@ -71,4 +71,32 @@ public class testQrSegmentAdvanced { testing.makeSegmentsOptimally(nullstring, Ecc.LOW, 1, 40); } + /** + *Purpose: This program has several mode and making these. When making these mode, find suitable mode using flag. So, i test this functions. + * is_numeric -> 0 ~ 9 's UTF-8 number, is_alphanumeric -> "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:" stinrg set, + *Input: "0123456780", "A", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:" + *Expected: + * All is correct + */ + @Test + public void is_Corredt_Mode_test() { + int[] correctStr = "09".codePoints().toArray(); + for (int forcnt : correctStr){ + assertEquals(QrSegmentAdvanced.is_numeric(forcnt), true); + } + int[] wrongStr = "a".codePoints().toArray(); + for (int forcnt : wrongStr){ + assertEquals(QrSegmentAdvanced.is_numeric(forcnt), false); + } + + correctStr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:".codePoints().toArray(); + for (int forcnt : correctStr){ + assertEquals(QrSegmentAdvanced.is_alphanumeric(forcnt), true); + } + + wrongStr = "\\".codePoints().toArray(); + for (int forcnt : wrongStr){ + assertEquals(QrSegmentAdvanced.is_alphanumeric(forcnt), false); + } + } } From 5b2085e2cfabcd84d38efcc58b2c27f2c01a7534 Mon Sep 17 00:00:00 2001 From: minsu4107 <32637512+minsu4107@users.noreply.github.com> Date: Fri, 19 Jun 2020 23:48:44 +0900 Subject: [PATCH 7/7] Testing 'toCodePoints' function whether it distinguish UTF-8 character or not. --- .../nayuki/qrcodegen/testQrSegmentAdvanced.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java index 4f9b0e6..f672289 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java +++ b/java/src/main/java/io/nayuki/qrcodegen/testQrSegmentAdvanced.java @@ -99,4 +99,19 @@ public class testQrSegmentAdvanced { assertEquals(QrSegmentAdvanced.is_alphanumeric(forcnt), false); } } + + /** + *Purpose: 'toCodePoints' function is convert String to integer, if String is in UTF-8. + * In UTF-8 has variable character why I haven't check all UTF-8's string. + * So, I just test character that are excluded at UTF-8. + * For checking exception occurs when a character other than UTF-8 is entered. + *Input: "A�" + *Expected: + * occur IllegalArgumentException + */ + @Test(expected = IllegalArgumentException.class) + public void toCodePoints_test() { + String not_UTF = "A�"; + testing.makeSegmentsOptimally(not_UTF, Ecc.LOW, 1, 40); + } }