소스 검색

tests; human to raw

develop
Robin Thoni 8 년 전
부모
커밋
95baa822f1
3개의 변경된 파일85개의 추가작업 그리고 2개의 파일을 삭제
  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 파일 보기

@@ -4,7 +4,7 @@
4 4
 
5 5
 #include "StringUtils.h"
6 6
 
7
-const char* StringUtils::hex = "0123456789abcdef";
7
+const std::string StringUtils::hex = "0123456789abcdef";
8 8
 
9 9
 std::string StringUtils::rawToHuman(unsigned char c)
10 10
 {
@@ -57,6 +57,53 @@ std::string StringUtils::rawToHuman(std::string raw)
57 57
 
58 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 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 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 파일 보기

@@ -12,7 +12,7 @@
12 12
 class StringUtils
13 13
 {
14 14
 public:
15
-    static const char* hex;
15
+    static const std::string hex;
16 16
 
17 17
     static std::string rawToHuman(unsigned char c);
18 18
     static std::string rawToHuman(char c);
@@ -25,6 +25,12 @@ public:
25 25
     static std::string rawToHuman(std::string raw);
26 26
 
27 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 파일 보기

@@ -61,6 +61,36 @@ TEST(StringUtils, rawToHumanString)
61 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 94
 int main(int argc, char* argv[])
65 95
 {
66 96
     std::cout << "LibNfc version: " << LibNfc::getVersion() << std::endl;

Loading…
취소
저장