// Copyright (C) 2018 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import {PrimaryTrackSortKey} from '../public'; import {createEmptyState} from './empty_state'; import {getContainingGroupKey, State} from './state'; import {deserializeStateObject, serializeStateObject} from './upload_utils'; test('createEmptyState', () => { const state: State = createEmptyState(); expect(state.engine).toEqual(undefined); }); test('getContainingTrackId', () => { const state: State = createEmptyState(); state.tracks['a'] = { key: 'a', uri: 'Foo', name: 'a track', trackSortKey: PrimaryTrackSortKey.ORDINARY_TRACK, }; state.tracks['b'] = { key: 'b', uri: 'Foo', name: 'b track', trackSortKey: PrimaryTrackSortKey.ORDINARY_TRACK, trackGroup: 'containsB', }; expect(getContainingGroupKey(state, 'z')).toEqual(null); expect(getContainingGroupKey(state, 'a')).toEqual(null); expect(getContainingGroupKey(state, 'b')).toEqual('containsB'); }); test('state is serializable', () => { const state = createEmptyState(); const json = serializeStateObject(state); const restored = deserializeStateObject(json); // Remove non-serialized fields from the original state object, so it may be // compared fairly with the restored version. // This is a legitimate use of 'any'. We are comparing this object against // one that's taken a round trip through JSON, which has therefore lost any // type information. Attempting to ask TS for help here would serve no // purpose. // eslint-disable-next-line @typescript-eslint/no-explicit-any const serializableState: any = state; serializableState.nonSerializableState = undefined; // Remove any undefined values from original as JSON doesn't serialize them for (const key in serializableState) { if (serializableState[key] === undefined) { delete serializableState[key]; } } expect(serializableState).toEqual(restored); });