Unit test for iri_util 76/88276/4 accepted/tizen/3.0/ivi/20161011.050554 accepted/tizen/3.0/mobile/20161015.033634 accepted/tizen/3.0/tv/20161016.005210 accepted/tizen/3.0/wearable/20161015.083535 accepted/tizen/common/20160920.131749 accepted/tizen/ivi/20160920.231552 accepted/tizen/mobile/20160920.231425 accepted/tizen/tv/20160920.231516 accepted/tizen/wearable/20160920.231532 submit/tizen/20160920.011443 submit/tizen_3.0_common/20161104.104000 submit/tizen_3.0_ivi/20161010.000004 submit/tizen_3.0_mobile/20161015.000004 submit/tizen_3.0_tv/20161015.000004 submit/tizen_3.0_wearable/20161015.000004
authorPiotr Ganicz <p.ganicz@samsung.com>
Thu, 8 Sep 2016 13:59:29 +0000 (15:59 +0200)
committerTomasz Iwanek <t.iwanek@samsung.com>
Fri, 16 Sep 2016 10:28:54 +0000 (03:28 -0700)
Change-Id: I707cff42d8a146805f07bbf47611848b9c6bb9b0

src/manifest_parser/utils/iri_util.cc
src/unit_tests/CMakeLists.txt
src/unit_tests/iri_util_unittest.cc [new file with mode: 0644]

index 03f6aab533a16f593683ff493c256bb8b99ad65d..6a9b8cf1f9d3c632368c7e84e3bb36fea1c9e5bb 100644 (file)
@@ -17,7 +17,7 @@ bool IsValidIRI(const std::string& iri_string) {
       iri_parse(iri_string.c_str()), iri_destroy);
   return
       iri != nullptr &&
-      iri->scheme != nullptr && (
+      (iri->scheme != nullptr && strlen(iri->scheme) > 0) && (
         iri->display != nullptr ||
         iri->user != nullptr ||
         iri->auth != nullptr ||
@@ -36,7 +36,7 @@ bool IsValidWarpIRI(const std::string& iri_string) {
   return
       iri != nullptr &&
       (iri->host != nullptr && strlen(iri->host) > 0) &&
-      iri->scheme != nullptr &&
+      (iri->scheme != nullptr && strlen(iri->scheme) > 0) &&
       iri->display == nullptr &&
       iri->user == nullptr &&
       iri->auth == nullptr &&
index 9b0a962a38fe257f97114c95811940226536e1ae..479764a65e68e9a5ceef02d4c73828b6beec4b75 100644 (file)
@@ -8,6 +8,7 @@ SET(TESTS
   string_util_unittest
   version_number_unittest
   language_tag_validator_unittest
+  iri_util_unittest
 )
 SET(DESTINATION_DIR manifest-parser-ut)
 
@@ -25,6 +26,7 @@ ADD_EXECUTABLE(parser_unittest
 ADD_EXECUTABLE(string_util_unittest string_util_unittest.cc)
 ADD_EXECUTABLE(version_number_unittest version_number_unittest.cc)
 ADD_EXECUTABLE(language_tag_validator_unittest language_tag_validator_unittest.cc)
+ADD_EXECUTABLE(iri_util_unittest iri_util_unittest.cc)
 
 INSTALL(DIRECTORY test_samples/ DESTINATION ${SHAREDIR}/${DESTINATION_DIR}/test_samples)
 
@@ -49,6 +51,7 @@ TARGET_LINK_LIBRARIES(parser_unittest PUBLIC ${TARGET_LIBNAME_PARSER} ${GTEST_MA
 TARGET_LINK_LIBRARIES(string_util_unittest PUBLIC ${TARGET_LIBNAME_UTILS} ${GTEST_MAIN_LIBRARIES})
 TARGET_LINK_LIBRARIES(version_number_unittest PUBLIC ${TARGET_LIBNAME_UTILS} ${GTEST_MAIN_LIBRARIES})
 TARGET_LINK_LIBRARIES(language_tag_validator_unittest PUBLIC ${TARGET_LIBNAME_UTILS} ${GTEST_MAIN_LIBRARIES})
+TARGET_LINK_LIBRARIES(iri_util_unittest PUBLIC ${TARGET_LIBNAME_UTILS} ${GTEST_MAIN_LIBRARIES})
 
 FOREACH(test ${TESTS})
   INSTALL(TARGETS ${test} DESTINATION ${BINDIR}/${DESTINATION_DIR})
diff --git a/src/unit_tests/iri_util_unittest.cc b/src/unit_tests/iri_util_unittest.cc
new file mode 100644 (file)
index 0000000..8b590f0
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache 2.0 license that can be
+// found in the LICENSE file.
+
+#include <gtest/gtest.h>
+
+#include <string>
+
+#include "manifest_parser/utils/iri_util.h"
+
+#define TEST_VALID(Name, Sequence)                                             \
+    TEST_F(IriUtilTest, IriUtilValid_ ## Name) {                               \
+        std::string iri = std::string(Sequence);                               \
+        ASSERT_TRUE(IsValidIRI(iri)) << iri;                                   \
+    }
+
+#define TEST_FAIL(Name, Sequence)                                              \
+    TEST_F(IriUtilTest, IriNotValid_ ## Name) {                                \
+        std::string iri = std::string(Sequence);                               \
+        ASSERT_FALSE(IsValidIRI(iri)) << iri;                                  \
+    }
+
+#define TEST_WRAP_VALID(Name, Sequence)                                        \
+    TEST_F(IriUtilTest, IriWarpValid_ ## Name) {                               \
+        std::string iri = std::string(Sequence);                               \
+        ASSERT_TRUE(IsValidWarpIRI(iri)) << iri;                               \
+    }
+
+#define TEST_WRAP_FAIL(Name, Sequence)                                         \
+    TEST_F(IriUtilTest, IriWarpNotValid_ ## Name) {                            \
+        std::string iri = std::string(Sequence);                               \
+        ASSERT_FALSE(IsValidWarpIRI(iri)) << iri;                              \
+    }
+
+namespace parser {
+namespace utils {
+
+class IriUtilTest : public testing::Test { };
+
+TEST_FAIL(TC_1, "");
+TEST_VALID(TC_2, "ab1+-.://a1-._~%xA0%AB/a1-._~%xA0:@asdf%AB");
+TEST_VALID(TC_3, "htt&#x0070;://www.example.com"
+        "/&#x0066;&#x006f;&#x006f;bar&#x002f;foo&#x003f;bar");
+TEST_VALID(TC_4, "http://:300");
+TEST_VALID(TC_5, "http:///");
+TEST_VALID(TC_6, "http:///?\?/?#??..ab1+-.");
+TEST_VALID(TC_7, "http:/");
+TEST_VALID(TC_8, "ftp:abv");
+TEST_VALID(TC_9, "ftp:");
+TEST_VALID(TC_10, "ftp:/a////");
+TEST_FAIL(TC_11, "ftp");
+TEST_VALID(TC_12, "ftp://[2001:0db8:0000:0000:0000:0000:1428:57ab]:300");
+TEST_VALID(TC_13, "ftp://[2001:0db8::1428:57ab]:300");
+
+TEST_WRAP_FAIL(EmptyScheme, "://asdfa.com");
+TEST_WRAP_VALID(ValidScheme, "http://asda.com");
+TEST_WRAP_FAIL(EmptyHostWrap, "http://:30");
+TEST_WRAP_VALID(ValidHost, "http://asas.com:30");
+TEST_WRAP_FAIL(HasIuserinfo, "http://user@example.com:300");
+
+}  // namespace utils
+}  // namespace parser