LCOV - code coverage report
Current view: top level - tests - UtilsTests.cpp (source / functions) Hit Total Coverage
Test: cpp-bencoding code coverage Lines: 176 176 100.0 %
Date: 2018-04-21 15:28:44 Functions: 96 97 99.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /**
       2             : * @file      UtilsTests.cpp
       3             : * @copyright (c) 2014 by Petr Zemek (s3rvac@gmail.com) and contributors
       4             : * @license   BSD, see the @c LICENSE file for more details
       5             : * @brief     Tests for the utilities.
       6             : */
       7             : 
       8             : #include <gtest/gtest.h>
       9             : 
      10             : #include "TestUtils.h"
      11             : #include "Utils.h"
      12             : 
      13             : namespace bencoding {
      14             : namespace tests {
      15             : 
      16             : using namespace testing;
      17             : 
      18          46 : class UtilsTests: public Test {};
      19             : 
      20             : //
      21             : // strToNum()
      22             : //
      23             : 
      24           5 : TEST_F(UtilsTests,
      25             : StrToNumWithValidDecimalIntegerSucceeds) {
      26           1 :     int num = 0;
      27           1 :     EXPECT_TRUE(strToNum("-1000", num, std::dec));
      28           1 :     EXPECT_EQ(-1000, num);
      29             : 
      30           1 :     num = 0;
      31           1 :     EXPECT_TRUE(strToNum("-1", num, std::dec));
      32           1 :     EXPECT_EQ(-1, num);
      33             : 
      34           1 :     num = 0;
      35           1 :     EXPECT_TRUE(strToNum("0", num, std::dec));
      36           1 :     EXPECT_EQ(0, num);
      37             : 
      38           1 :     num = 0;
      39           1 :     EXPECT_TRUE(strToNum("1", num, std::dec));
      40           1 :     EXPECT_EQ(1, num);
      41             : 
      42           1 :     num = 0;
      43           1 :     EXPECT_TRUE(strToNum("1000", num, std::dec));
      44           1 :     EXPECT_EQ(1000, num);
      45             : 
      46           1 :     num = 0;
      47           1 :     EXPECT_TRUE(strToNum("0000", num, std::dec));
      48           1 :     EXPECT_EQ(0, num);
      49             : 
      50           1 :     num = 0;
      51           1 :     EXPECT_TRUE(strToNum("0003", num, std::dec));
      52           1 :     EXPECT_EQ(3, num);
      53           1 : }
      54             : 
      55           5 : TEST_F(UtilsTests,
      56             : StrToNumWithInvalidDecimalIntegerFails) {
      57           1 :     int num = -1;
      58           1 :     EXPECT_FALSE(strToNum("", num, std::dec));
      59           1 :     EXPECT_EQ(-1, num);
      60             : 
      61           1 :     num = -1;
      62           1 :     EXPECT_FALSE(strToNum("zzz", num, std::dec));
      63           1 :     EXPECT_EQ(-1, num);
      64             : 
      65           1 :     num = -1;
      66           1 :     EXPECT_FALSE(strToNum("13 something", num, std::dec));
      67           1 :     EXPECT_EQ(-1, num);
      68             : 
      69           1 :     num = -1;
      70           1 :     EXPECT_FALSE(strToNum("13something", num, std::dec));
      71           1 :     EXPECT_EQ(-1, num);
      72           1 : }
      73             : 
      74           5 : TEST_F(UtilsTests,
      75             : StrToNumWithValidHexadecimalIntegerSucceeds) {
      76           1 :     int num = 0;
      77           1 :     EXPECT_TRUE(strToNum("-0x3E8", num, std::hex));
      78           1 :     EXPECT_EQ(-0x3E8, num);
      79             : 
      80           1 :     num = 0;
      81           1 :     EXPECT_TRUE(strToNum("-0x1", num, std::hex));
      82           1 :     EXPECT_EQ(-0x1, num);
      83             : 
      84           1 :     num = 0;
      85           1 :     EXPECT_TRUE(strToNum("0x0", num, std::hex));
      86           1 :     EXPECT_EQ(0x0, num);
      87             : 
      88           1 :     num = 0;
      89           1 :     EXPECT_TRUE(strToNum("0x1", num, std::hex));
      90           1 :     EXPECT_EQ(0x1, num);
      91             : 
      92           1 :     num = 0;
      93           1 :     EXPECT_TRUE(strToNum("0x3E8", num, std::hex));
      94           1 :     EXPECT_EQ(0x3E8, num);
      95             : 
      96           1 :     num = 0;
      97           1 :     EXPECT_TRUE(strToNum("0x00C", num, std::hex));
      98           1 :     EXPECT_EQ(0x00C, num);
      99           1 : }
     100             : 
     101           5 : TEST_F(UtilsTests,
     102             : StrToNumWithInvalidHexadecimalIntegerFails) {
     103           1 :     int num = -1;
     104           1 :     EXPECT_FALSE(strToNum("", num, std::hex));
     105           1 :     EXPECT_EQ(-1, num);
     106             : 
     107           1 :     num = -1;
     108           1 :     EXPECT_FALSE(strToNum("0x", num, std::hex));
     109           1 :     EXPECT_EQ(-1, num);
     110             : 
     111           1 :     num = -1;
     112           1 :     EXPECT_FALSE(strToNum("zz", num, std::hex));
     113           1 :     EXPECT_EQ(-1, num);
     114             : 
     115           1 :     num = -1;
     116           1 :     EXPECT_FALSE(strToNum("0xC something", num, std::hex));
     117           1 :     EXPECT_EQ(-1, num);
     118             : 
     119           1 :     num = -1;
     120           1 :     EXPECT_FALSE(strToNum("0xCsomething", num, std::hex));
     121           1 :     EXPECT_EQ(-1, num);
     122           1 : }
     123             : 
     124             : //
     125             : // readUpTo()
     126             : //
     127             : 
     128           5 : TEST_F(UtilsTests,
     129             : ReadUpToReadsCorrectlyAllCharactersUpToSentinel) {
     130           2 :     std::istringstream input("abcd$");
     131           2 :     std::string readData;
     132             : 
     133           1 :     bool dataReadCorrectly = readUpTo(input, readData, '$');
     134           1 :     ASSERT_TRUE(dataReadCorrectly);
     135           1 :     EXPECT_EQ(readData, "abcd");
     136             : }
     137             : 
     138           5 : TEST_F(UtilsTests,
     139             : ReadUpToReturnsFalseWhenSentinelIsNotFound) {
     140           2 :     std::istringstream input("abcd");
     141           2 :     std::string readData;
     142             : 
     143           1 :     bool dataReadCorrectly = readUpTo(input, readData, '$');
     144           1 :     EXPECT_FALSE(dataReadCorrectly);
     145           1 : }
     146             : 
     147           5 : TEST_F(UtilsTests,
     148             : ReadUpToStoresReadCharsEvenWhenSentinelIsNotFound) {
     149           2 :     std::istringstream input("abcd");
     150           2 :     std::string readData;
     151             : 
     152           1 :     readUpTo(input, readData, '$');
     153           1 :     EXPECT_EQ("abcd", readData);
     154           1 : }
     155             : 
     156           5 : TEST_F(UtilsTests,
     157             : ReadUpToReturnsFalseWhenInputIsInError) {
     158           2 :     std::istringstream input("abcd$");
     159           2 :     std::string readData;
     160             : 
     161           1 :     putIntoErrorState(input);
     162           1 :     EXPECT_FALSE(readUpTo(input, readData, '$'));
     163           1 : }
     164             : 
     165           5 : TEST_F(UtilsTests,
     166             : ReadUpToDoesNotReadAnyDataWhenInputIsInError) {
     167           2 :     std::istringstream input("abc$");
     168           2 :     std::string readData;
     169             : 
     170           1 :     putIntoErrorState(input);
     171           1 :     readUpTo(input, readData, '$');
     172           1 :     EXPECT_EQ("", readData);
     173           1 : }
     174             : 
     175           5 : TEST_F(UtilsTests,
     176             : ReadUpToReturnsFalseWhenInputIsAtEOF) {
     177           2 :     std::istringstream input("abcd$");
     178           2 :     std::string readData;
     179             : 
     180           1 :     putIntoEOFState(input);
     181           1 :     EXPECT_FALSE(readUpTo(input, readData, '$'));
     182           1 : }
     183             : 
     184           5 : TEST_F(UtilsTests,
     185             : ReadUpToDoesNotReadAnyDataWhenInputIsAtEOF) {
     186           2 :     std::istringstream input("abcd$");
     187           2 :     std::string readData;
     188             : 
     189           1 :     putIntoEOFState(input);
     190           1 :     readUpTo(input, readData, '$');
     191           1 :     EXPECT_EQ("", readData);
     192           1 : }
     193             : 
     194             : //
     195             : // readUntil()
     196             : //
     197             : 
     198           5 : TEST_F(UtilsTests,
     199             : ReadUntilReadsCorrectlyAllCharactersIncludingLast) {
     200           2 :     std::istringstream input("abcd$");
     201           2 :     std::string readData;
     202             : 
     203           1 :     bool dataReadCorrectly = readUntil(input, readData, '$');
     204           1 :     ASSERT_TRUE(dataReadCorrectly);
     205           1 :     EXPECT_EQ(readData, "abcd$");
     206             : }
     207             : 
     208           5 : TEST_F(UtilsTests,
     209             : ReadUntilToReturnsFalseWhenLastIsNotFound) {
     210           2 :     std::istringstream input("abcd");
     211           2 :     std::string readData;
     212             : 
     213           1 :     bool dataReadCorrectly = readUntil(input, readData, '$');
     214           1 :     EXPECT_FALSE(dataReadCorrectly);
     215           1 : }
     216             : 
     217           5 : TEST_F(UtilsTests,
     218             : ReadUntilStoresReadCharsEvenWhenLastIsNotFound) {
     219           2 :     std::istringstream input("abcd");
     220           2 :     std::string readData;
     221             : 
     222           1 :     readUntil(input, readData, '$');
     223           1 :     EXPECT_EQ("abcd", readData);
     224           1 : }
     225             : 
     226           5 : TEST_F(UtilsTests,
     227             : ReadUntilDoesNotReadAnyDataWhenInputIsInError) {
     228           2 :     std::istringstream input("abcd$");
     229           2 :     std::string readData;
     230             : 
     231           1 :     putIntoErrorState(input);
     232           1 :     readUntil(input, readData, '$');
     233           1 :     EXPECT_EQ("", readData);
     234           1 : }
     235             : 
     236           5 : TEST_F(UtilsTests,
     237             : ReadUntilReturnsFalseWhenInputIsAtEOF) {
     238           2 :     std::istringstream input("abc$");
     239           2 :     std::string readData;
     240             : 
     241           1 :     putIntoEOFState(input);
     242           1 :     EXPECT_FALSE(readUntil(input, readData, '$'));
     243           1 : }
     244             : 
     245           5 : TEST_F(UtilsTests,
     246             : ReadUntilDoesNotReadAnyDataWhenInputIsAtEOF) {
     247           2 :     std::istringstream input("abcd$");
     248           2 :     std::string readData;
     249             : 
     250           1 :     putIntoEOFState(input);
     251           1 :     readUntil(input, readData, '$');
     252           1 :     EXPECT_EQ("", readData);
     253           1 : }
     254             : 
     255             : //
     256             : // replace()
     257             : //
     258             : 
     259           5 : TEST_F(UtilsTests,
     260             : ReplaceDoesNotPerformAnyReplacementWhenStringIsEmpty) {
     261           1 :     EXPECT_EQ("", replace("", 'x', "X"));
     262           1 : }
     263             : 
     264           5 : TEST_F(UtilsTests,
     265             : ReplaceDoesNotPerformAnyReplacementWhenCharDoesNotAppearInString) {
     266           1 :     EXPECT_EQ("abcd", replace("abcd", 'x', "X"));
     267           1 : }
     268             : 
     269           5 : TEST_F(UtilsTests,
     270             : ReplaceCorrectlyReplacesCharInStringIfItOccursOnce) {
     271           1 :     EXPECT_EQ("Abcd", replace("abcd", 'a', "A"));
     272           1 : }
     273             : 
     274           5 : TEST_F(UtilsTests,
     275             : ReplaceCorrectlyReplacesCharInStringIfItOccursTwice) {
     276           1 :     EXPECT_EQ("AbcA", replace("abca", 'a', "A"));
     277           1 : }
     278             : 
     279           5 : TEST_F(UtilsTests,
     280             : ReplaceCorrectlyReplacesCharInStringWhenWithWhatIsLongerThanOneChar) {
     281           1 :     EXPECT_EQ("XXXXbcXXXX", replace("abca", 'a', "XXXX"));
     282           1 : }
     283             : 
     284           5 : TEST_F(UtilsTests,
     285             : ReplaceDeletesCharsInStringWhenWithWhatIsEmpty) {
     286           1 :     EXPECT_EQ("bc", replace("abca", 'a', ""));
     287           1 : }
     288             : 
     289             : } // namespace tests
     290           3 : } // namespace bencoding

Generated by: LCOV version 1.13