def testSerialize(self):
    hist = histogram.Histogram('aaa', 'count_biggerIsBetter')
    hist.description = 'lorem ipsum'
    hist.diagnostics['bbb'] = related_name_map.RelatedNameMap({
        'ccc': 'a:c',
        'ddd': 'a:d',
    })
    hist.diagnostics['hhh'] = generic_set.GenericSet(['ggg'])
    hist.AddSample(0, {
        'bbb': breakdown.Breakdown.FromEntries({
            'ccc': 11,
            'ddd': 31,
        }),
        'eee': related_event_set.RelatedEventSet([{
            'stableId': 'fff',
            'title': 'ggg',
            'start': 3,
            'duration': 4,
        }]),
    })

    data = histogram_serializer.Serialize([hist])
    self.assertEqual(data, [
        [
            'aaa',
            [1, [1, 1000.0, 20]],
            '',
            'ccc',
            'ddd',
            [3, 4],
            'ggg',
            'avg', 'count', 'max', 'min', 'std', 'sum',
            'lorem ipsum',
            'a:c',
            'a:d',
        ],
        {
            'Breakdown': {'bbb': {5: [2, 5, 11, 31]}},
            'GenericSet': {
                'hhh': {0: 6},
                'statisticsNames': {1: [7, 8, 9, 10, 11, 12]},
                'description': {3: 13},
            },
            'RelatedEventSet': {'eee': {4: [['fff', 6, 3, 4]]}},
            'RelatedNameMap': {'bbb': {2: [5, 14, 15]}},
        },
        [
            0,
            'count+',
            1,
            [0, 1, 2, 3],
            [1, 0, None, 0, 0, 0, 0],
            {0: [1, [None, 4, 5]]},
            0,
        ]
    ])
    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])
 def testRoundtrip(self):
     events = related_event_set.RelatedEventSet()
     events.Add({
         'stableId': '0.0',
         'title': 'foo',
         'start': 0,
         'duration': 1,
     })
     d = events.AsDict()
     clone = diagnostic.Diagnostic.FromDict(d)
     self.assertEqual(histogram_unittest.ToJSON(d),
                      histogram_unittest.ToJSON(clone.AsDict()))
     self.assertEqual(len(events), 1)
     event = list(events)[0]
     self.assertEqual(event['stableId'], '0.0')
     self.assertEqual(event['title'], 'foo')
     self.assertEqual(event['start'], 0)
     self.assertEqual(event['duration'], 1)