/*
 * Copyright (C) 2022 Huawei Device Co., Ltd.
 * 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.
 */

jest.mock('../../../../dist/trace/component/trace/base/TraceRow.js', () => {
  return {};
});

// @ts-ignore
import { fps, FpsStruct, FpsRender } from '../../../../dist/trace/database/ui-worker/ProcedureWorkerFPS.js';
// @ts-ignore
import { Rect } from '../../../../dist/trace/component/trace/timer-shaft/Rect.js';

describe(' FPSTest', () => {
  it('FpsTest01', () => {
    const canvas = document.createElement('canvas');
    canvas.width = 1;
    canvas.height = 1;
    const ctx = canvas.getContext('2d');
    let dataList = new Array();
    dataList.push({
      startTime: 0,
      dur: 10,
      frame: { x: 0, y: 9, width: 10, height: 10 },
    });
    dataList.push({ startTime: 1, dur: 111 });
    let rect = new Rect(0, 10, 10, 10);
    fps(dataList, [{ length: 1 }], 1, 100254, 100254, rect, true);
  });

  it('FpsTest02', () => {
    let fpsDataList = new Array();
    fpsDataList.push({
      startTime: 34,
      dur: 14,
      frame: { x: 40, y: 442, width: 230, height: 340 },
    });
    fpsDataList.push({
      startTime: 61,
      dur: 156,
      frame: { x: 60, y: 9, width: 10, height: 10 },
    });
    let rect = new Rect(0, 50, 50, 16);
    fps(fpsDataList, [{ length: 0 }], 1, 100254, 100254, rect, false);
  });

  it('FpsTest03', () => {
    const canvas = document.createElement('canvas');
    canvas.width = 8;
    canvas.height = 8;
    const ctx = canvas.getContext('2d');

    const data = {
      frame: {
        x: 218,
        y: 201,
        width: 220,
        height: 320,
      },
      startNS: 255,
      value: 4,
    };

    expect(FpsStruct.draw(ctx, data)).toBeUndefined();
  });

  it('FpsTest04', () => {
    const canvas = document.createElement('canvas');
    canvas.width = 1;
    canvas.height = 8;
    const ctx = canvas.getContext('2d');

    const data = {
      frame: {
        x: 80,
        y: 30,
        width: 320,
        height: 220,
      },
      startNS: 200,
      value: 50,
    };
    new FpsStruct(1);
    FpsStruct.hoverFpsStruct = jest.fn(() => {
      startNS: 200;
    });
    FpsStruct.a = jest.fn(() => data);
    expect(FpsStruct.draw(ctx, data)).toBeUndefined();
  });
  it('FpsTest05 ', () => {
    const canvas = document.createElement('canvas');
    canvas.width = 1;
    canvas.height = 1;
    const ctx = canvas.getContext('2d');
    const Sourcedate = {
      frame: {
        x: 520,
        y: 50,
        width: 300,
        height: 300,
      },
      maxFps: 255,
      value: 550,
    };
    expect(FpsStruct.draw(ctx, Sourcedate)).toBeUndefined();
  });

  it('FpsTest06', function () {
    let fpsRender = new FpsRender();
    let fpsReq = {
      lazyRefresh: true,
      type: '',
      startNS: 1,
      endNS: 32,
      totalNS: 31,
      frame: {
        x: 54,
        y: 50,
        width: 133,
        height: 133,
      },
      useCache: false,
      range: {
        refresh: '',
      },
      canvas: 'a',
      context: {
        font: '12px sans-serif',
        fillStyle: '#af919b',
        globalAlpha: 0.56,
        height: 120,
        width: 100,
        clearRect: jest.fn(() => true),
        beginPath: jest.fn(() => true),
        measureText: jest.fn(() => true),
        closePath: jest.fn(() => true),
        fillRect: jest.fn(() => []),
        fillText: jest.fn(() => true),
        stroke: jest.fn(() => true),
      },
      lineColor: '',
      isHover: '',
      hoverX: 21,
      wakeupBean: undefined,
      flagMoveInfo: '',
      flagSelectedInfo: '',
      slicesTime: 34,
      id: 1,
      x: 220,
      y: 203,
      width: 1030,
      height: 890,
      params: {
        isLive: false,
        maxHeight: 52,
        dpr: 41,
        hoverFuncStruct: '',
        selectFuncStruct: undefined,
      },
    };
    window.postMessage = jest.fn(() => true);
    expect(fpsRender.render(fpsReq, [], [])).toBeUndefined();
  });
});