Index: tracing/tracing/extras/importer/streaming_event_expander_test.html |
diff --git a/tracing/tracing/extras/importer/streaming_event_expander_test.html b/tracing/tracing/extras/importer/streaming_event_expander_test.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..111b9ee7987de6677502caf60d993199bdcdfdff |
--- /dev/null |
+++ b/tracing/tracing/extras/importer/streaming_event_expander_test.html |
@@ -0,0 +1,251 @@ |
+<!DOCTYPE html> |
+<!-- |
+Copyright 2017 The Chromium Authors. All rights reserved. |
+Use of this source code is governed by a BSD-style license that can be |
+found in the LICENSE file. |
+--> |
+ |
+<link rel="import" href="/tracing/core/test_utils.html"> |
+<link rel="import" href="/tracing/extras/importer/streaming_event_expander.html"> |
+ |
+<script> |
+'use strict'; |
+ |
+tr.b.unittest.testSuite(function() { |
+ function makeEvent(json) { |
+ return { |
+ args: { |
+ data: addVersion(json), |
+ }, |
+ }; |
+ } |
+ |
+ function addVersion(json) { |
+ json['version'] = '1'; |
+ return json; |
+ } |
+ |
+ test('singularize', function() { |
+ assert.strictEqual('name', tr.e.importer.singularize('names')); |
+ assert.strictEqual('aircraft', tr.e.importer.singularize('aircraft')); |
+ }); |
+ |
+ test('missing_version_key_errors', function() { |
+ var data = {}; |
+ var expander = new tr.e.importer.StreamingEventExpander(); |
+ assert.throws(() => expander.expandData(data)); |
+ }); |
+ |
+ test('missing_map_ids_error', function() { |
+ var data = addVersion({ |
+ maps: { |
+ price: [ |
+ { 'i_dont_have_an_id_key': 100 }, |
+ ], |
+ }, |
+ }); |
+ var expander = new tr.e.importer.StreamingEventExpander(); |
+ assert.throws(() => expander.expandData(data)); |
+ }); |
+ |
+ test('empty_method_makes_an_empty_expander', function() { |
+ var expander = tr.e.importer.StreamingEventExpander.empty(); |
+ assert.equal(expander.metadata.size, 0); |
+ assert.equal(expander.maps.size, 0); |
+ assert.equal(expander.groups.size, 0); |
+ }); |
+ |
+ |
+ test('single_event_with_single_group_and_single_row', function() { |
+ var data = addVersion({ |
+ allocators: { |
+ books: { |
+ pages: [10, 20, 30], |
+ }, |
+ }, |
+ }); |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandData(data); |
+ assert.deepEqual(expander2.raw.books, [ |
+ { pages: 10 }, |
+ { pages: 20 }, |
+ { pages: 30 }, |
+ ]); |
+ }); |
+ |
+ test('can_take_event', function() { |
+ var data = addVersion({ |
+ allocators: { |
+ books: { |
+ pages: [10, 20, 30], |
+ }, |
+ }, |
+ }); |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandEvent(makeEvent(data)); |
+ assert.deepEqual(expander2.raw.books, [ |
+ { pages: 10 }, |
+ { pages: 20 }, |
+ { pages: 30 }, |
+ ]); |
+ }); |
+ |
+ test('handles_events', function() { |
+ var data = addVersion({ |
+ allocators: { |
+ books: { |
+ pages: [10, 20, 30], |
+ }, |
+ }, |
+ }); |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandEvent(makeEvent(data)); |
+ assert.deepEqual(expander2.raw.books, [ |
+ { pages: 10 }, |
+ { pages: 20 }, |
+ { pages: 30 }, |
+ ]); |
+ }); |
+ |
+ test('handles_extra_metadata', function() { |
+ var data = addVersion({ |
+ myStringMetadata: '1', |
+ myNumberMetadata: 2, |
+ myArrayMetadata: [3], |
+ }); |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandData(data); |
+ assert.deepEqual(expander2.metadata.get('myStringMetadata'), '1'); |
+ assert.deepEqual(expander2.metadata.get('myNumberMetadata'), 2); |
+ assert.deepEqual(expander2.metadata.get('myArrayMetadata'), [3]); |
+ }); |
+ |
+ test('single_event_with_multiple_groups_and_multiple_rows', function() { |
+ var data = addVersion({ |
+ allocators: { |
+ books: { |
+ pages: [10, 20, 30], |
+ wordCount: [100, 200, 300], |
+ }, |
+ magazines: { |
+ pages: [5, 10, 15], |
+ wordCount: [50, 100, 150], |
+ }, |
+ }, |
+ }); |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandData(data); |
+ assert.deepEqual(expander2.raw.books, [ |
+ { pages: 10, wordCount: 100 }, |
+ { pages: 20, wordCount: 200 }, |
+ { pages: 30, wordCount: 300 }, |
+ ]); |
+ assert.deepEqual(expander2.raw.magazines, [ |
+ { pages: 5, wordCount: 50 }, |
+ { pages: 10, wordCount: 100 }, |
+ { pages: 15, wordCount: 150 }, |
+ ]); |
+ }); |
+ |
+ test('multiple_events', function() { |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandData(addVersion({ |
+ maps: { |
+ isbn: [{ id: 0, isbn: 'aaa' }], |
+ }, |
+ })); |
+ var expander3 = expander2.expandData(addVersion({ |
+ maps: { |
+ isbn: [{ id: 1, isbn: 'bbb' }], |
+ }, |
+ })); |
+ assert.deepEqual(expander2.getMapValue('isbn', 0), { id: 0, isbn: 'aaa' }); |
+ assert.deepEqual(expander2.getMapValue('isbn', 1), undefined); |
+ assert.deepEqual(expander3.getMapValue('isbn', 0), { id: 0, isbn: 'aaa' }); |
+ assert.deepEqual(expander3.getMapValue('isbn', 1), { id: 1, isbn: 'bbb' }); |
+ }); |
+ |
+ test('has_map', function() { |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandData(addVersion({ |
+ maps: { |
+ a: [{ id: 0, name: 'aaa' }], |
+ }, |
+ })); |
+ var expander3 = expander2.expandData(addVersion({ |
+ maps: { |
+ b: [{ id: 1, name: 'bbb' }], |
+ }, |
+ })); |
+ assert.isTrue(expander3.hasMap('a')); |
+ assert.isTrue(expander3.hasMap('b')); |
+ assert.isFalse(expander3.hasMap('c')); |
+ }); |
+ |
+ test('can_handle_start_time', function() { |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandData(addVersion({ |
+ startTime: 100, |
+ allocators: { |
+ sales: { |
+ timeDelta: [1, 1, 10, 10], |
+ price: [1, 2, 3, 4], |
+ }, |
+ }, |
+ })); |
+ assert.deepEqual(expander2.raw.sales, [ |
+ { time: 101, timeDelta: 1, price: 1 }, |
+ { time: 102, timeDelta: 1, price: 2 }, |
+ { time: 112, timeDelta: 10, price: 3 }, |
+ { time: 122, timeDelta: 10, price: 4 }, |
+ ]); |
+ }); |
+ |
+ test('can_handle_time_deltas', function() { |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandData(addVersion({ |
+ startTime: 100, |
+ allocators: { |
+ sales: { |
+ price: [1, 2, 3, 4], |
+ }, |
+ }, |
+ })); |
+ assert.deepEqual(expander2.raw.sales, [ |
+ { time: 100, price: 1 }, |
+ { time: 100, price: 2 }, |
+ { time: 100, price: 3 }, |
+ { time: 100, price: 4 }, |
+ ]); |
+ }); |
+ |
+ test('can_inflate', function() { |
+ var expander1 = new tr.e.importer.StreamingEventExpander(); |
+ var expander2 = expander1.expandData(addVersion({ |
+ allocators: { |
+ books: { |
+ authors: [1, 1, 2, 3], |
+ isbn: [100, 101, 102, 103], |
+ }, |
+ }, |
+ maps: { |
+ authors: [ |
+ { id: 1, name_sid: 1 }, |
+ { id: 2, name_sid: 1 }, |
+ { id: 3, name_sid: 2 }, |
+ ], |
+ strings: [ |
+ { id: 1, string: 'DFW' }, |
+ { id: 2, string: 'C. Stross' }, |
+ ], |
+ }, |
+ })); |
+ |
+ assert.strictEqual(expander2.getMapValue('strings', 1).string, 'DFW'); |
+ assert.strictEqual(expander2.getString(2), 'C. Stross'); |
+ assert.strictEqual(expander2.inflated.books[0].author.name, 'DFW'); |
+ assert.strictEqual(expander2.inflated.books[0].isbn, 100); |
+ }); |
+}); |
+</script> |
+ |