LCOV - code coverage report
Current view: top level - tests - BListTests.cpp (source / functions) Hit Total Coverage
Test: cpp-bencoding code coverage Lines: 130 130 100.0 %
Date: 2018-04-21 15:28:44 Functions: 68 69 98.6 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /**
       2             : * @file      BListTests.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 BList class.
       6             : */
       7             : 
       8             : #include <gtest/gtest.h>
       9             : 
      10             : #include "BInteger.h"
      11             : #include "BList.h"
      12             : 
      13             : namespace bencoding {
      14             : namespace tests {
      15             : 
      16             : using namespace testing;
      17             : 
      18          32 : class BListTests: public Test {};
      19             : 
      20           5 : TEST_F(BListTests,
      21             : ListIsEmptyAfterCreation) {
      22           2 :     auto l = BList::create();
      23             : 
      24           1 :     EXPECT_TRUE(l->empty());
      25           1 : }
      26             : 
      27           5 : TEST_F(BListTests,
      28             : ListIsEmptyAfterCreationFromEmptySequenceOfItems) {
      29           2 :     auto l = BList::create({});
      30             : 
      31           1 :     EXPECT_TRUE(l->empty());
      32           1 : }
      33             : 
      34           5 : TEST_F(BListTests,
      35             : ListIsNotEmptyAfterItemIsAppendedToEmptyList) {
      36           2 :     auto l = BList::create();
      37           1 :     l->push_back(BInteger::create(1));
      38             : 
      39           1 :     EXPECT_FALSE(l->empty());
      40           1 : }
      41             : 
      42           5 : TEST_F(BListTests,
      43             : SizeCorrespondsToNumberOfItemsAppendedIntoList) {
      44           2 :     auto l = BList::create();
      45             : 
      46           1 :     ASSERT_EQ(0, l->size());
      47           1 :     l->push_back(BInteger::create(1));
      48           1 :     ASSERT_EQ(1, l->size());
      49           1 :     l->push_back(BInteger::create(1));
      50           1 :     ASSERT_EQ(2, l->size());
      51             : }
      52             : 
      53           5 : TEST_F(BListTests,
      54             : ListCreatedFromNonEmptySequenceOfItemsContainsTheItems) {
      55           2 :     std::shared_ptr<BItem> firstItem = BInteger::create(1);
      56           2 :     std::shared_ptr<BItem> secondItem = BInteger::create(2);
      57           2 :     auto l = BList::create({firstItem, secondItem});
      58             : 
      59           1 :     EXPECT_EQ(2, l->size());
      60           1 :     EXPECT_EQ(firstItem, l->front());
      61           1 :     EXPECT_EQ(secondItem, l->back());
      62           1 : }
      63             : 
      64           5 : TEST_F(BListTests,
      65             : PopBackCorrectlyRemovesLastItemInNonEmptyList) {
      66           2 :     auto l = BList::create();
      67           2 :     std::shared_ptr<BItem> firstItem = BInteger::create(1);
      68           1 :     l->push_back(firstItem);
      69           2 :     std::shared_ptr<BItem> secondItem = BInteger::create(2);
      70           1 :     l->push_back(secondItem);
      71             : 
      72           1 :     ASSERT_EQ(2, l->size());
      73           1 :     l->pop_back();
      74           1 :     ASSERT_EQ(1, l->size());
      75           1 :     EXPECT_EQ(firstItem, l->front());
      76             : }
      77             : 
      78           5 : TEST_F(BListTests,
      79             : FrontReturnsFirstItemFromNonEmptyList) {
      80           2 :     auto l = BList::create();
      81           2 :     std::shared_ptr<BItem> firstItem = BInteger::create(1);
      82           1 :     l->push_back(firstItem);
      83           2 :     std::shared_ptr<BItem> secondItem = BInteger::create(2);
      84           1 :     l->push_back(secondItem);
      85             : 
      86           1 :     EXPECT_EQ(firstItem, l->front());
      87           1 : }
      88             : 
      89           5 : TEST_F(BListTests,
      90             : FrontReturnsFirstItemFromNonEmptyConstantList) {
      91           2 :     auto l = BList::create();
      92           2 :     std::shared_ptr<BItem> firstItem = BInteger::create(1);
      93           1 :     l->push_back(firstItem);
      94           2 :     std::shared_ptr<BItem> secondItem = BInteger::create(2);
      95           1 :     l->push_back(secondItem);
      96           2 :     std::shared_ptr<const BList> cl(std::move(l));
      97             : 
      98           1 :     EXPECT_EQ(firstItem, cl->front());
      99           1 : }
     100             : 
     101           5 : TEST_F(BListTests,
     102             : BackReturnsLastItemFromNonEmptyList) {
     103           2 :     auto l = BList::create();
     104           2 :     std::shared_ptr<BItem> firstItem = BInteger::create(1);
     105           1 :     l->push_back(firstItem);
     106           2 :     std::shared_ptr<BItem> secondItem = BInteger::create(2);
     107           1 :     l->push_back(secondItem);
     108             : 
     109           1 :     EXPECT_EQ(secondItem, l->back());
     110           1 : }
     111             : 
     112           5 : TEST_F(BListTests,
     113             : BackReturnsLastItemFromNonEmptyConstantList) {
     114           2 :     auto l = BList::create();
     115           2 :     std::shared_ptr<BItem> firstItem = BInteger::create(1);
     116           1 :     l->push_back(firstItem);
     117           2 :     std::shared_ptr<BItem> secondItem = BInteger::create(2);
     118           1 :     l->push_back(secondItem);
     119           2 :     std::shared_ptr<const BList> cl(std::move(l));
     120             : 
     121           1 :     EXPECT_EQ(secondItem, cl->back());
     122           1 : }
     123             : 
     124           5 : TEST_F(BListTests,
     125             : IterationWorksCorrectlyOverEmptyList) {
     126           2 :     auto l = BList::create();
     127             : 
     128           1 :     EXPECT_EQ(l->begin(), l->end());
     129           1 : }
     130             : 
     131           5 : TEST_F(BListTests,
     132             : IterationWorksCorrectlyOverListWithTwoItems) {
     133           2 :     auto l = BList::create();
     134           1 :     l->push_back(BInteger::create(1));
     135           1 :     l->push_back(BInteger::create(2));
     136             : 
     137           1 :     auto i = l->begin();
     138           2 :     auto firstItem = (*i)->as<BInteger>();
     139           1 :     ASSERT_TRUE(firstItem != nullptr);
     140           1 :     ASSERT_EQ(1, firstItem->value());
     141             : 
     142           1 :     ++i;
     143           2 :     auto secondItem = (*i)->as<BInteger>();
     144           1 :     ASSERT_TRUE(secondItem != nullptr);
     145           1 :     ASSERT_EQ(2, secondItem->value());
     146             : 
     147           1 :     ++i;
     148           1 :     ASSERT_EQ(l->end(), i);
     149             : }
     150             : 
     151           5 : TEST_F(BListTests,
     152             : IterationWorksCorrectlyOverEmptyConstantList) {
     153           2 :     std::unique_ptr<const BList> l = BList::create();
     154             : 
     155           1 :     EXPECT_EQ(l->begin(), l->end());
     156           1 : }
     157             : 
     158           5 : TEST_F(BListTests,
     159             : IterationWorksCorrectlyOverConstantListWithTwoItems) {
     160           2 :     auto l = BList::create();
     161           1 :     l->push_back(BInteger::create(1));
     162           1 :     l->push_back(BInteger::create(2));
     163           2 :     std::shared_ptr<const BList> cl(std::move(l));
     164             : 
     165           1 :     auto i = cl->begin();
     166           2 :     auto firstItem = (*i)->as<BInteger>();
     167           1 :     ASSERT_TRUE(firstItem != nullptr);
     168           1 :     ASSERT_EQ(1, firstItem->value());
     169             : 
     170           1 :     ++i;
     171           2 :     auto secondItem = (*i)->as<BInteger>();
     172           1 :     ASSERT_TRUE(secondItem != nullptr);
     173           1 :     ASSERT_EQ(2, secondItem->value());
     174             : 
     175           1 :     ++i;
     176           1 :     ASSERT_EQ(cl->end(), i);
     177             : }
     178             : 
     179           5 : TEST_F(BListTests,
     180             : IterationWorksCorrectlyOverEmptyConstantListUsingCPrefixedMethods) {
     181           2 :     std::unique_ptr<const BList> l = BList::create();
     182             : 
     183           1 :     EXPECT_EQ(l->cbegin(), l->cend());
     184           1 : }
     185             : 
     186           5 : TEST_F(BListTests,
     187             : IterationWorksCorrectlyOverConstantListWithTwoItemsUsingCPrefixedMethods) {
     188           2 :     auto l = BList::create();
     189           1 :     l->push_back(BInteger::create(1));
     190           1 :     l->push_back(BInteger::create(2));
     191           2 :     std::shared_ptr<const BList> cl(std::move(l));
     192             : 
     193           1 :     auto i = cl->cbegin();
     194           2 :     auto firstItem = (*i)->as<BInteger>();
     195           1 :     ASSERT_TRUE(firstItem != nullptr);
     196           1 :     ASSERT_EQ(1, firstItem->value());
     197             : 
     198           1 :     ++i;
     199           2 :     auto secondItem = (*i)->as<BInteger>();
     200           1 :     ASSERT_TRUE(secondItem != nullptr);
     201           1 :     ASSERT_EQ(2, secondItem->value());
     202             : 
     203           1 :     ++i;
     204           1 :     ASSERT_EQ(cl->cend(), i);
     205             : }
     206             : 
     207             : } // namespace tests
     208           3 : } // namespace bencoding

Generated by: LCOV version 1.13