LCOV - code coverage report
Current view: top level - src/libs/tools/tests - testtool_metamergestrategy.cpp (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 25 25 100.0 %
Date: 2019-09-12 12:28:41 Functions: 6 8 75.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Tests for the MetaMergeStrategy
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  *
       8             :  */
       9             : 
      10             : #include "mergetestutils.cpp"
      11             : #include <gtest/gtest.h>
      12             : #include <merging/metamergestrategy.hpp>
      13             : #include <merging/onesidestrategy.hpp>
      14             : #include <merging/threewaymerge.hpp>
      15             : 
      16             : using namespace std;
      17             : using namespace kdb;
      18             : using namespace kdb::tools::merging;
      19             : 
      20           6 : class MetaMergeStrategyTest : public MergeTest
      21             : {
      22             : protected:
      23             :         MergeResult result;
      24             :         MergeTask task;
      25             :         KeySet conflicts;
      26             : 
      27           2 :         MetaMergeStrategyTest ()
      28          16 :         : task (MergeTask (BaseMergeKeys (base, baseParent), OurMergeKeys (ours, ourParent), TheirMergeKeys (theirs, theirParent),
      29           8 :                            mergeParent))
      30             :         {
      31           4 :                 result = MergeResult (conflicts, mergeKeys);
      32           2 :         }
      33             : };
      34             : 
      35          20 : TEST_F (MetaMergeStrategyTest, MergesMetaWithInnerStrategy)
      36             : {
      37          18 :         base.lookup ("user/parentb/config/key1").setMeta ("testmeta", "valueb");
      38          18 :         ours.lookup ("user/parento/config/key1").setMeta ("testmeta", "valueo");
      39          18 :         theirs.lookup ("user/parentt/config/key1").setMeta ("testmeta", "valuet");
      40           6 :         Key conflictKey = mk1;
      41           2 :         result.addConflict (conflictKey, CONFLICT_META, CONFLICT_META);
      42          12 :         conflictKey = result.getConflictSet ().at (0);
      43             : 
      44           4 :         ThreeWayMerge merger;
      45           4 :         MergeConflictStrategy * strategy = new OneSideStrategy (OURS);
      46           2 :         merger.addConflictStrategy (strategy);
      47           4 :         MetaMergeStrategy metaStrategy (merger);
      48           2 :         metaStrategy.resolveConflict (task, conflictKey, result);
      49           2 :         delete (strategy);
      50             : 
      51           8 :         EXPECT_FALSE (result.hasConflicts ()) << "Invalid conflict detected";
      52           6 :         KeySet merged = result.getMergedKeys ();
      53           4 :         cout << merged << endl;
      54           6 :         EXPECT_EQ (4, merged.size ());
      55             : 
      56          18 :         EXPECT_EQ ("valueo", merged.lookup (mk1).getMeta<string> ("testmeta"));
      57           8 : }
      58             : 
      59             : // TODO: test conflict resolution

Generated by: LCOV version 1.13