// Tests if condition key map merges existing values public void TestConditionMapPutAll() { ConditionMap cmap1 = new ConditionMap(); cmap1.Add("StringEquals", new ConditionKeyMap("s3:prefix", new HashSet <string>() { "hello" })); ConditionMap cmap2 = new ConditionMap(); cmap2.Add("StringEquals", new ConditionKeyMap("s3:prefix", new HashSet <string>() { "world" })); ConditionMap cmap3 = new ConditionMap(); cmap3.Add("StringEquals", new ConditionKeyMap("s3:myprefix", new HashSet <string>() { "world" })); ConditionMap cmap4 = new ConditionMap(); cmap4.Add("StringEquals", new ConditionKeyMap("s3:prefix", new HashSet <string>() { "hello" })); var testCases = new List <KeyValuePair <Tuple <ConditionMap, ConditionMap>, string> >() { // Both args are empty new KeyValuePair <Tuple <ConditionMap, ConditionMap>, string>(Tuple.Create(new ConditionMap(), new ConditionMap()), @"{}"), // First arg empty new KeyValuePair <Tuple <ConditionMap, ConditionMap>, string>(Tuple.Create(new ConditionMap(), cmap1), @"{""StringEquals"":{""s3:prefix"":[""hello""]}}"), //Second arg empty new KeyValuePair <Tuple <ConditionMap, ConditionMap>, string>(Tuple.Create(cmap1, new ConditionMap()), @"{""StringEquals"":{""s3:prefix"":[""hello""]}}"), //Both args have same value new KeyValuePair <Tuple <ConditionMap, ConditionMap>, string>(Tuple.Create(cmap1, cmap4), @"{""StringEquals"":{""s3:prefix"":[""hello""]}}"), //Value of second arg will be merged new KeyValuePair <Tuple <ConditionMap, ConditionMap>, string>(Tuple.Create(cmap1, cmap2), @"{""StringEquals"":{""s3:prefix"":[""hello"",""world""]}}"), //second arg will be added new KeyValuePair <Tuple <ConditionMap, ConditionMap>, string>(Tuple.Create(cmap1, cmap3), @"{""StringEquals"":{""s3:prefix"":[""hello"",""world""],""s3:myprefix"":[""world""]}}"), }; int index = 0; foreach (KeyValuePair <Tuple <ConditionMap, ConditionMap>, string> pair in testCases) { try { index += 1; var testcase = pair.Key; ConditionMap first = testcase.Item1; ConditionMap second = testcase.Item2; string expectedConditionKMapJSON = pair.Value; first.PutAll(second); string cmpstring = JsonConvert.SerializeObject(first, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); Assert.AreEqual(cmpstring, expectedConditionKMapJSON); } catch (ArgumentException) { Assert.Fail(); } } }