Parcourir la source

tests; human to raw

develop
Robin Thoni il y a 8 ans
Parent
révision
95baa822f1
3 fichiers modifiés avec 85 ajouts et 2 suppressions
  1. 48
    1
      src/Business/StringUtils.cpp
  2. 7
    1
      src/Business/StringUtils.h
  3. 30
    0
      tests/test-main.cpp

+ 48
- 1
src/Business/StringUtils.cpp Voir le fichier

4
 
4
 
5
 #include "StringUtils.h"
5
 #include "StringUtils.h"
6
 
6
 
7
-const char* StringUtils::hex = "0123456789abcdef";
7
+const std::string StringUtils::hex = "0123456789abcdef";
8
 
8
 
9
 std::string StringUtils::rawToHuman(unsigned char c)
9
 std::string StringUtils::rawToHuman(unsigned char c)
10
 {
10
 {
57
 
57
 
58
 ResultString StringUtils::humanToRaw(std::string human)
58
 ResultString StringUtils::humanToRaw(std::string human)
59
 {
59
 {
60
+    if (human.size() % 2 != 0) {
61
+        return ResultString::error("Malformed hex data: invalid length");
62
+    }
60
     std::string raw;
63
     std::string raw;
64
+    for (size_t i = 0; i < human.size(); i += 2) {
65
+        char c1 = toLower(human[i]);
66
+        char c2 = toLower(human[i + 1]);
67
+        size_t i1 = hex.find(c1);
68
+        size_t i2 = hex.find(c2);
69
+        if (i1 == std::string::npos || i2 == std::string::npos) {
70
+            return ResultString::error("Malformed hex data at char " + std::to_string(i));
71
+        }
72
+        raw += std::string(1, (char)((i1 << 4) + i2));
73
+    }
61
     return ResultString::ok(raw);
74
     return ResultString::ok(raw);
62
 }
75
 }
76
+
77
+std::string StringUtils::toLower(std::string str)
78
+{
79
+    std::string lower;
80
+    for (size_t i = 0; i < str.size(); ++i) {
81
+        lower += tolower(str[i]);
82
+    }
83
+    return lower;
84
+}
85
+
86
+char StringUtils::toLower(char c)
87
+{
88
+    if (c >= 'A' && c <= 'Z') {
89
+        return c + ('a' - 'A');
90
+    }
91
+    return c;
92
+}
93
+
94
+std::string StringUtils::toUpper(std::string str)
95
+{
96
+    std::string upper;
97
+    for (size_t i = 0; i < str.size(); ++i) {
98
+        upper += toUpper(str[i]);
99
+    }
100
+    return upper;
101
+}
102
+
103
+char StringUtils::toUpper(char c)
104
+{
105
+    if (c >= 'a' && c <= 'z') {
106
+        return c - ('a' - 'A');
107
+    }
108
+    return c;
109
+}

+ 7
- 1
src/Business/StringUtils.h Voir le fichier

12
 class StringUtils
12
 class StringUtils
13
 {
13
 {
14
 public:
14
 public:
15
-    static const char* hex;
15
+    static const std::string hex;
16
 
16
 
17
     static std::string rawToHuman(unsigned char c);
17
     static std::string rawToHuman(unsigned char c);
18
     static std::string rawToHuman(char c);
18
     static std::string rawToHuman(char c);
25
     static std::string rawToHuman(std::string raw);
25
     static std::string rawToHuman(std::string raw);
26
 
26
 
27
     static ResultString humanToRaw(std::string human);
27
     static ResultString humanToRaw(std::string human);
28
+
29
+    static std::string toLower(std::string str);
30
+    static char toLower(char c);
31
+
32
+    static std::string toUpper(std::string str);
33
+    static char toUpper(char c);
28
 };
34
 };
29
 
35
 
30
 
36
 

+ 30
- 0
tests/test-main.cpp Voir le fichier

61
             "000102030405060708090a0b0c0d0e0f");
61
             "000102030405060708090a0b0c0d0e0f");
62
 }
62
 }
63
 
63
 
64
+TEST(StringUtils, toLower)
65
+{
66
+  ASSERT_EQ(StringUtils::toLower('a'), 'a');
67
+  ASSERT_EQ(StringUtils::toLower('z'), 'z');
68
+  ASSERT_EQ(StringUtils::toLower('A'), 'a');
69
+  ASSERT_EQ(StringUtils::toLower('Z'), 'z');
70
+  ASSERT_EQ(StringUtils::toLower('1'), '1');
71
+  ASSERT_EQ(StringUtils::toLower('@'), '@');
72
+}
73
+
74
+TEST(StringUtils, toUpper)
75
+{
76
+  ASSERT_EQ(StringUtils::toUpper('a'), 'A');
77
+  ASSERT_EQ(StringUtils::toUpper('z'), 'Z');
78
+  ASSERT_EQ(StringUtils::toUpper('A'), 'A');
79
+  ASSERT_EQ(StringUtils::toUpper('Z'), 'Z');
80
+  ASSERT_EQ(StringUtils::toUpper('1'), '1');
81
+  ASSERT_EQ(StringUtils::toUpper('@'), '@');
82
+}
83
+
84
+TEST(StringUtils, humanToRaw)
85
+{
86
+  ASSERT_EQ(StringUtils::humanToRaw("0f00").getData(), std::string({0x0f, 0x00}));
87
+  ASSERT_EQ(StringUtils::humanToRaw("000f").getData(), std::string({0x00, 0x0f}));
88
+  ASSERT_EQ(StringUtils::humanToRaw("0a0a").getData(), std::string({0x0a, 0x0a}));
89
+  ASSERT_EQ(StringUtils::humanToRaw("1a0f").getData(), std::string({0x1a, 0x0f}));
90
+  ASSERT_EQ(StringUtils::humanToRaw("1a00f").getError(), "Malformed hex data: invalid length");
91
+  ASSERT_EQ(StringUtils::humanToRaw("1a\n00f").getError(), "Malformed hex data at char 2");
92
+}
93
+
64
 int main(int argc, char* argv[])
94
 int main(int argc, char* argv[])
65
 {
95
 {
66
     std::cout << "LibNfc version: " << LibNfc::getVersion() << std::endl;
96
     std::cout << "LibNfc version: " << LibNfc::getVersion() << std::endl;

Chargement…
Annuler
Enregistrer