/*
 * Copyright (C) 2025 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.
 */

import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect, Level, Size, TestType } from '@ohos/hypium';
import { BusinessError, pasteboard } from '@kit.BasicServicesKit';

let TAG = 'ttt';
let systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();

export default function PasteboardAppShareOptions() {
  describe('PasteboardAppShareOptions', () => {
    beforeAll(() => {
    })
    beforeEach(() => {
      systemPasteboard.clearDataSync();
      systemPasteboard.removeAppShareOptions();
    })
    afterEach(() => {
    })
    afterAll(() => {
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0100
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0100
     * @tc.desc   PasteData setAppShareOptions inapp removeAppShareOption.
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL0
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0100', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL0, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0100 start ************')
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.INAPP);
        console.info(TAG + 'setAppShareOptions001 setAppShareOptions inApp success');
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions001 setAppShareOptions inApp fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      try {
        systemPasteboard.removeAppShareOptions();
        console.info(TAG + 'setAppShareOptions001 removeAppShareOptions success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions001 removeAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0100 end ************')
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0200
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0200
     * @tc.desc   PasteData setAppShareOptions localDevice removeAppShareOption.
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL2
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0200', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL2, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0200 start ************')
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.LOCALDEVICE);
        console.info(TAG + 'setAppShareOptions002 setAppShareOptions localDevice success');
        expect().assertFail();
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions002 setAppShareOptions localDevice fail, code:${error.code}, msg:${error.message}`);
        expect(error.code).assertEqual('401');
      }
      try {
        systemPasteboard.removeAppShareOptions();
        console.info(TAG + 'setAppShareOptions002 removeAppShareOptions success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions002 removeAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0200 end ************')
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0300
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0300
     * @tc.desc   PasteData setAppShareOptions localDevice removeAppShareOption.
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL2
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0300', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL2, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0300 start ************')
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.CROSSDEVICE);
        console.info(TAG + 'setAppShareOptions003 setAppShareOptions localDevice success');
        expect().assertFail();
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions003 setAppShareOptions corssDevice fail, code:${error.code}, msg:${error.message}`);
        expect(error.code).assertEqual('401');
      }
      try {
        systemPasteboard.removeAppShareOptions();
        console.info(TAG + 'setAppShareOptions003 removeAppShareOptions success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions003 removeAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0300 end ************')
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0400
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0400
     * @tc.desc   PasteData setAppShareOptions param undefined.
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL2
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0400', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL2, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0400 start ************')
      try {
        systemPasteboard.setAppShareOptions(undefined);
        console.info(TAG + 'setAppShareOptions004 setAppShareOptions localDevice success');
        expect().assertFail();
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions004 setAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect(error.code).assertEqual('401');
      }
      try {
        systemPasteboard.removeAppShareOptions();
        console.info(TAG + 'setAppShareOptions004 removeAppShareOptions success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions004 removeAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0400 end ************')
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0600
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0600
     * @tc.desc   PasteData setAppShareOptions inApp and crossDevice and remove
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL2
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0600', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL2, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0600 start ************')
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.INAPP);
        console.info(TAG + 'setAppShareOptions006 setAppShareOptions inApp success');
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions006 setAppShareOptions inApp fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.CROSSDEVICE);
        console.info(TAG + 'setAppShareOptions006 setAppShareOptions crossDevice success')
        expect().assertFail();
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions006 removeAppShareOptions crossDevice fail, code:${error.code}, msg:${error.message}`);
        expect(error.code).assertEqual('401')
      }
      try {
        systemPasteboard.removeAppShareOptions();
        console.info(TAG + 'setAppShareOptions006 removeAppShareOptions success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions006 removeAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0600 end ************')
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0800
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0800
     * @tc.desc   PasteData setAppShareOptions crossDevice and remove setAppShareOptions inApp and remove
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL2
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0800', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL2, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0800 start ************')
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.CROSSDEVICE);
        expect().assertFail();
        console.info(TAG + 'setAppShareOptions008 setAppShareOptions inApp success');
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions008 setAppShareOptions inApp fail, code:${error.code}, msg:${error.message}`);
        expect(error.code).assertEqual('401');
      }
      systemPasteboard.removeAppShareOptions();
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.INAPP);
        console.info(TAG + 'setAppShareOptions008 setAppShareOptions crossDevice success');
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions008 removeAppShareOptions crossDevice fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      systemPasteboard.removeAppShareOptions();
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0800 end ************')
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0900
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0900
     * @tc.desc   PasteData setAppShareOptions localDevice and remove twice
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL2
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0900', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL2, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0900 start ************')
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.LOCALDEVICE);
        expect().assertFail();
        console.info(TAG + 'setAppShareOptions009 setAppShareOptions inApp success');
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions009 setAppShareOptions inApp fail, code:${error.code}, msg:${error.message}`);
        expect(error.code).assertEqual('401');
      }
      systemPasteboard.removeAppShareOptions();
      try {
        systemPasteboard.removeAppShareOptions();
        console.info(TAG + 'setAppShareOptions006 removeAppShareOptions success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions006 removeAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_0900 end ************')
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1000
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1000
     * @tc.desc   PasteData setAppShareOptions inApp twice
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL2
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1000', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL2, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1000 start ************')
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.INAPP);
        console.info(TAG + 'setAppShareOptions010 setAppShareOptions inApp success');
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions010 setAppShareOptions inApp fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      try {
        systemPasteboard.setAppShareOptions(pasteboard.ShareOption.INAPP);
        expect().assertFail();
        console.info(TAG + 'setAppShareOptions010 setAppShareOptions inApp success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions010 setAppShareOptions inApp fail, code:${error.code}, msg:${error.message}`);
        expect(error.code).assertEqual('12900006');
      }
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1000 end ************')
    })

    /**
     * @tc.name   SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1100
     * @tc.number SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1100
     * @tc.desc   PasteData removeAppShareOptions twice
     * @tc.type   FUNCTION
     * @tc.size   MEDIUMTEST
     * @tc.level  LEVEL2
     */
    it('SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1100', TestType.FUNCTION | Size.MEDIUMTEST | Level.LEVEL2, async () => {
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1100 start ************')
      try {
        systemPasteboard.removeAppShareOptions();
        console.info(TAG + 'setAppShareOptions011 removeAppShareOptions success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions011 removeAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      try {
        systemPasteboard.removeAppShareOptions();
        console.info(TAG + 'setAppShareOptions011 removeAppShareOptions success')
      } catch (err) {
        let error: BusinessError = err as BusinessError;
        console.info(TAG + `setAppShareOptions011 removeAppShareOptions fail, code:${error.code}, msg:${error.message}`);
        expect().assertFail();
      }
      console.info(TAG + '************ SUB_Pasteboard_Local_SDK_PasteDataSetAppShareOptions_1100 end ************')
    })
  })
}