def Merge(self, other): for name, other_diagnostic in other.items(): if name not in self: self[name] = other_diagnostic continue my_diagnostic = self[name] if my_diagnostic.CanAddDiagnostic(other_diagnostic): my_diagnostic.AddDiagnostic(other_diagnostic) continue self[name] = unmergeable_diagnostic_set.UnmergeableDiagnosticSet([ my_diagnostic, other_diagnostic])
def testMerge(self): events = related_event_set.RelatedEventSet() events.Add({ 'stableId': '0.0', 'title': 'foo', 'start': 0, 'duration': 1, }) generic = generic_set.GenericSet(['generic diagnostic']) generic2 = generic_set.GenericSet(['generic diagnostic 2']) related_map = histogram.RelatedHistogramMap() related_map.Set('a', histogram.Histogram('histogram', 'count')) hist = histogram.Histogram('', 'count') # When Histograms are merged, first an empty clone is created with an empty # DiagnosticMap. hist2 = histogram.Histogram('', 'count') hist2.diagnostics['a'] = generic hist.diagnostics.Merge(hist2.diagnostics) self.assertIs(generic, hist.diagnostics['a']) # Separate keys are not merged. hist3 = histogram.Histogram('', 'count') hist3.diagnostics['b'] = generic2 hist.diagnostics.Merge(hist3.diagnostics) self.assertIs(generic, hist.diagnostics['a']) self.assertIs(generic2, hist.diagnostics['b']) # Merging unmergeable diagnostics should produce an # UnmergeableDiagnosticSet. hist4 = histogram.Histogram('', 'count') hist4.diagnostics['a'] = related_map hist.diagnostics.Merge(hist4.diagnostics) self.assertIsInstance(hist.diagnostics['a'], ums.UnmergeableDiagnosticSet) diagnostics = list(hist.diagnostics['a']) self.assertIs(generic, diagnostics[0]) self.assertIs(related_map, diagnostics[1]) # UnmergeableDiagnosticSets are mergeable. hist5 = histogram.Histogram('', 'count') hist5.diagnostics['a'] = ums.UnmergeableDiagnosticSet( [events, generic2]) hist.diagnostics.Merge(hist5.diagnostics) self.assertIsInstance(hist.diagnostics['a'], ums.UnmergeableDiagnosticSet) diagnostics = list(hist.diagnostics['a']) self.assertIs(generic, diagnostics[0]) self.assertIs(related_map, diagnostics[1]) self.assertIs(events, diagnostics[2]) self.assertIs(generic2, diagnostics[3])