xref: /aosp_15_r20/external/perfetto/ui/src/base/registry_unittest.ts (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2018 The Android Open Source Project
2*6dbdd20aSAndroid Build Coastguard Worker//
3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*6dbdd20aSAndroid Build Coastguard Worker//
7*6dbdd20aSAndroid Build Coastguard Worker//      http://www.apache.org/licenses/LICENSE-2.0
8*6dbdd20aSAndroid Build Coastguard Worker//
9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard Workerimport {Registry} from './registry';
16*6dbdd20aSAndroid Build Coastguard Worker
17*6dbdd20aSAndroid Build Coastguard Workerinterface Registrant {
18*6dbdd20aSAndroid Build Coastguard Worker  kind: string;
19*6dbdd20aSAndroid Build Coastguard Worker  n: number;
20*6dbdd20aSAndroid Build Coastguard Worker}
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard Workertest('registry returns correct registrant', () => {
23*6dbdd20aSAndroid Build Coastguard Worker  const registry = Registry.kindRegistry<Registrant>();
24*6dbdd20aSAndroid Build Coastguard Worker
25*6dbdd20aSAndroid Build Coastguard Worker  const a: Registrant = {kind: 'a', n: 1};
26*6dbdd20aSAndroid Build Coastguard Worker  const b: Registrant = {kind: 'b', n: 2};
27*6dbdd20aSAndroid Build Coastguard Worker  registry.register(a);
28*6dbdd20aSAndroid Build Coastguard Worker  registry.register(b);
29*6dbdd20aSAndroid Build Coastguard Worker
30*6dbdd20aSAndroid Build Coastguard Worker  expect(registry.get('a')).toBe(a);
31*6dbdd20aSAndroid Build Coastguard Worker  expect(registry.get('b')).toBe(b);
32*6dbdd20aSAndroid Build Coastguard Worker});
33*6dbdd20aSAndroid Build Coastguard Worker
34*6dbdd20aSAndroid Build Coastguard Workertest('registry throws error on kind collision', () => {
35*6dbdd20aSAndroid Build Coastguard Worker  const registry = Registry.kindRegistry<Registrant>();
36*6dbdd20aSAndroid Build Coastguard Worker
37*6dbdd20aSAndroid Build Coastguard Worker  const a1: Registrant = {kind: 'a', n: 1};
38*6dbdd20aSAndroid Build Coastguard Worker  const a2: Registrant = {kind: 'a', n: 2};
39*6dbdd20aSAndroid Build Coastguard Worker
40*6dbdd20aSAndroid Build Coastguard Worker  registry.register(a1);
41*6dbdd20aSAndroid Build Coastguard Worker  expect(() => registry.register(a2)).toThrow();
42*6dbdd20aSAndroid Build Coastguard Worker});
43*6dbdd20aSAndroid Build Coastguard Worker
44*6dbdd20aSAndroid Build Coastguard Workertest('registry throws error on non-existent track', () => {
45*6dbdd20aSAndroid Build Coastguard Worker  const registry = Registry.kindRegistry<Registrant>();
46*6dbdd20aSAndroid Build Coastguard Worker  expect(() => registry.get('foo')).toThrow();
47*6dbdd20aSAndroid Build Coastguard Worker});
48*6dbdd20aSAndroid Build Coastguard Worker
49*6dbdd20aSAndroid Build Coastguard Workertest('registry allows iteration', () => {
50*6dbdd20aSAndroid Build Coastguard Worker  const registry = Registry.kindRegistry<Registrant>();
51*6dbdd20aSAndroid Build Coastguard Worker  const a: Registrant = {kind: 'a', n: 1};
52*6dbdd20aSAndroid Build Coastguard Worker  const b: Registrant = {kind: 'b', n: 2};
53*6dbdd20aSAndroid Build Coastguard Worker  registry.register(a);
54*6dbdd20aSAndroid Build Coastguard Worker  registry.register(b);
55*6dbdd20aSAndroid Build Coastguard Worker
56*6dbdd20aSAndroid Build Coastguard Worker  const values = [...registry.values()];
57*6dbdd20aSAndroid Build Coastguard Worker  expect(values.length).toBe(2);
58*6dbdd20aSAndroid Build Coastguard Worker  expect(values.includes(a)).toBe(true);
59*6dbdd20aSAndroid Build Coastguard Worker  expect(values.includes(b)).toBe(true);
60*6dbdd20aSAndroid Build Coastguard Worker});
61