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
|