1 | package fr.sii.ogham.sms.sender.impl.ovh; | |
2 | ||
3 | /** | |
4 | * See <a href= | |
5 | * "https://docs.ovh.com/fr/sms/envoyer_des_sms_depuis_une_url_-_http2sms/#annexe_2">https://docs.ovh.com/fr/sms/envoyer_des_sms_depuis_une_url_-_http2sms/#annexe_2</a> | |
6 | * | |
7 | * @author Aurélien Baudet | |
8 | * | |
9 | */ | |
10 | public class DefaultSmsCodingDetector implements SmsCodingDetector { | |
11 | /** | |
12 | * Basic characters | |
13 | */ | |
14 | private static final char[] CHAR_TABLE = { | |
15 | // @formatter:off | |
16 | '@', '\u00a3', '$', '\u00a5', '\u00e8', '\u00e9', '\u00f9', '\u00ec', | |
17 | '\u00f2', '\u00c7', '\n', '\u00d8', '\u00f8', '\r', '\u00c5', '\u00e5', | |
18 | '\u0394', '_', '\u03a6', '\u0393', '\u039b', '\u03a9', '\u03a0', '\u03a8', | |
19 | '\u03a3', '\u0398', '\u039e', ' ', '\u00c6', '\u00e6', '\u00df', '\u00c9', // 0x1B is actually an escape which we'll encode to a space char | |
20 | ' ', '!', '"', '#', '\u00a4', '%', '&', '\'', | |
21 | '(', ')', '*', '+', ',', '-', '.', '/', | |
22 | '0', '1', '2', '3', '4', '5', '6', '7', | |
23 | '8', '9', ':', ';', '<', '=', '>', '?', | |
24 | '\u00a1', 'A', 'B', 'C', 'D', 'E', 'F', 'G', | |
25 | 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', | |
26 | 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', | |
27 | 'X', 'Y', 'Z', '\u00c4', '\u00d6', '\u00d1', '\u00dc', '\u00a7', | |
28 | '\u00bf', 'a', 'b', 'c', 'd', 'e', 'f', 'g', | |
29 | 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', | |
30 | 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', | |
31 | 'x', 'y', 'z', '\u00e4', '\u00f6', '\u00f1', '\u00fc', '\u00e0', | |
32 | // @formatter:on | |
33 | }; | |
34 | ||
35 | /** | |
36 | * Extended character table. | |
37 | */ | |
38 | private static final char[] EXT_CHAR_TABLE = { | |
39 | // @formatter:off | |
40 | '\u20ac' /* € */, '\f', '[', '\\', ']', | |
41 | '^', '{', '|', '}', '~', | |
42 | // @formatter:on | |
43 | }; | |
44 | ||
45 | @Override | |
46 | public SmsCoding detect(String message) { | |
47 |
4
1. detect : negated conditional → NO_COVERAGE 2. detect : replaced return value with null for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::detect → NO_COVERAGE 3. detect : negated conditional → KILLED 4. detect : replaced return value with null for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::detect → KILLED |
return canUseGsm7(message) ? SmsCoding.GSM7 : SmsCoding.UNICODE; |
48 | } | |
49 | ||
50 | private static boolean canUseGsm7(String message) { | |
51 |
6
1. canUseGsm7 : changed conditional boundary → NO_COVERAGE 2. canUseGsm7 : Changed increment from 1 to -1 → NO_COVERAGE 3. canUseGsm7 : negated conditional → NO_COVERAGE 4. canUseGsm7 : changed conditional boundary → KILLED 5. canUseGsm7 : Changed increment from 1 to -1 → KILLED 6. canUseGsm7 : negated conditional → KILLED |
for (int i=0 ; i<message.length() ; i++) { |
52 | char c = message.charAt(i); | |
53 |
4
1. canUseGsm7 : negated conditional → NO_COVERAGE 2. canUseGsm7 : negated conditional → NO_COVERAGE 3. canUseGsm7 : negated conditional → KILLED 4. canUseGsm7 : negated conditional → KILLED |
if (!isInCharTable(c) && !isInExtensionCharTable(c)) { |
54 |
2
1. canUseGsm7 : replaced boolean return with true for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::canUseGsm7 → NO_COVERAGE 2. canUseGsm7 : replaced boolean return with true for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::canUseGsm7 → KILLED |
return false; |
55 | } | |
56 | } | |
57 |
2
1. canUseGsm7 : replaced boolean return with false for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::canUseGsm7 → NO_COVERAGE 2. canUseGsm7 : replaced boolean return with false for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::canUseGsm7 → KILLED |
return true; |
58 | } | |
59 | | |
60 | private static boolean isInCharTable(char c) { | |
61 |
6
1. isInCharTable : changed conditional boundary → NO_COVERAGE 2. isInCharTable : Changed increment from 1 to -1 → NO_COVERAGE 3. isInCharTable : negated conditional → NO_COVERAGE 4. isInCharTable : negated conditional → TIMED_OUT 5. isInCharTable : changed conditional boundary → KILLED 6. isInCharTable : Changed increment from 1 to -1 → KILLED |
for (int i=0 ; i<CHAR_TABLE.length ; i++) { |
62 |
2
1. isInCharTable : negated conditional → NO_COVERAGE 2. isInCharTable : negated conditional → TIMED_OUT |
if (c == CHAR_TABLE[i]) { |
63 |
2
1. isInCharTable : replaced boolean return with false for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::isInCharTable → NO_COVERAGE 2. isInCharTable : replaced boolean return with false for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::isInCharTable → KILLED |
return true; |
64 | } | |
65 | } | |
66 |
2
1. isInCharTable : replaced boolean return with true for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::isInCharTable → NO_COVERAGE 2. isInCharTable : replaced boolean return with true for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::isInCharTable → KILLED |
return false; |
67 | } | |
68 | ||
69 | private static boolean isInExtensionCharTable(char c) { | |
70 |
6
1. isInExtensionCharTable : changed conditional boundary → NO_COVERAGE 2. isInExtensionCharTable : Changed increment from 1 to -1 → NO_COVERAGE 3. isInExtensionCharTable : negated conditional → NO_COVERAGE 4. isInExtensionCharTable : changed conditional boundary → KILLED 5. isInExtensionCharTable : Changed increment from 1 to -1 → KILLED 6. isInExtensionCharTable : negated conditional → KILLED |
for (int i=0 ; i<EXT_CHAR_TABLE.length ; i++) { |
71 |
2
1. isInExtensionCharTable : negated conditional → NO_COVERAGE 2. isInExtensionCharTable : negated conditional → KILLED |
if (c == EXT_CHAR_TABLE[i]) { |
72 |
2
1. isInExtensionCharTable : replaced boolean return with false for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::isInExtensionCharTable → NO_COVERAGE 2. isInExtensionCharTable : replaced boolean return with false for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::isInExtensionCharTable → KILLED |
return true; |
73 | } | |
74 | } | |
75 |
2
1. isInExtensionCharTable : replaced boolean return with true for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::isInExtensionCharTable → NO_COVERAGE 2. isInExtensionCharTable : replaced boolean return with true for fr/sii/ogham/sms/sender/impl/ovh/DefaultSmsCodingDetector::isInExtensionCharTable → KILLED |
return false; |
76 | } | |
77 | ||
78 | } | |
Mutations | ||
47 |
1.1 2.2 3.3 4.4 |
|
51 |
1.1 2.2 3.3 4.4 5.5 6.6 |
|
53 |
1.1 2.2 3.3 4.4 |
|
54 |
1.1 2.2 |
|
57 |
1.1 2.2 |
|
61 |
1.1 2.2 3.3 4.4 5.5 6.6 |
|
62 |
1.1 2.2 |
|
63 |
1.1 2.2 |
|
66 |
1.1 2.2 |
|
70 |
1.1 2.2 3.3 4.4 5.5 6.6 |
|
71 |
1.1 2.2 |
|
72 |
1.1 2.2 |
|
75 |
1.1 2.2 |