import { decodeAndTransformProto, FILE_TYPES, FILE_DECODERS } from '../src/decode';
import fs from 'fs';
import path from 'path';
import { expectedEntries, expectedLayers, layers_traces } from './traces/ExpectedTraces';

describe("Proto Transformations", () => {
  it("can transform surface flinger traces", () => {
    for (var i = 0; i < layers_traces.length; i++) {
      const trace = layers_traces[i];
      const buffer = new Uint8Array(fs.readFileSync(path.resolve(__dirname, trace)));
      const data = decodeAndTransformProto(buffer, FILE_DECODERS[FILE_TYPES.SURFACE_FLINGER_TRACE].decoderParams, true);

      // use final entry as this determines if there was any error in previous entry parsing
      const transformedEntry = data.entries[data.entries.length-1];
      const expectedEntry = expectedEntries[i];
      for (const property in expectedEntry) {
        expect(transformedEntry[property]).toEqual(expectedEntry[property]);
      }

      // check final flattened layer
      const transformedLayer = transformedEntry.flattenedLayers[transformedEntry.flattenedLayers.length-1];
      const expectedLayer = expectedLayers[i];
      for (const property in expectedLayer) {
        expect(transformedLayer[property]).toEqual(expectedLayer[property]);
      }
    }
  });
});
