# Copyright (c) 2021 Project CHIP Authors
#
# 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.

name: 74.1.1. [TC-SWTCH-1.1] Global Attributes with DUT as Server

PICS:
    - SWTCH.S

config:
    nodeId: 0x12344321
    cluster: "Switch"
    endpoint: 1

tests:
    - label:
          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
          test)."
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label: "Step 3: TH reads from the DUT the ClusterRevision attribute."
      command: "readAttribute"
      attribute: "ClusterRevision"
      response:
          value: 1
          constraints:
              type: int16u

    - label:
          "Step 2a: TH reads from the DUT the FeatureMap attribute and Check
          values of flags in this FeatureMap"
      PICS:
          "!SWTCH.S.F00 && !SWTCH.S.F01 && !SWTCH.S.F02 && !SWTCH.S.F03 &&
          !SWTCH.S.F04"
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 0
          constraints:
              type: bitmap32

    - label:
          "Step 2b: Given SWTCH.S.F00(LS) ensure featuremap has the correct bit
          set"
      PICS: SWTCH.S.F00
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x01]
              hasMasksClear: [0x02, 0x04, 0x08, 0x10]

    - label:
          "Step 2c: Given SWTCH.S.F01(MS) ensure featuremap has the correct bit
          set"
      PICS: SWTCH.S.F01
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x2]
              hasMasksClear: [0x1]

    - label:
          "Step 2d: Given SWTCH.S.F02(MSR) ensure featuremap has the correct bit
          set"
      PICS: SWTCH.S.F02
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x2, 0x4]
              hasMasksClear: [0x1]

    - label:
          "Step 2e: Given SWTCH.S.F03(MSL) ensure featuremap has the correct bit
          set"
      PICS: SWTCH.S.F03
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x2, 0x4, 0x8]
              hasMasksClear: [0x1]

    - label:
          "Step 2f: Given SWTCH.S.F04(MSM) ensure featuremap has the correct bit
          set"
      PICS: SWTCH.S.F04
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          constraints:
              type: bitmap32
              hasMasksSet: [0x2, 0x4, 0x10]
              hasMasksClear: [0x1]

    - label: "Step 4a: TH reads from the DUT the AttributeList attribute."
      PICS: SWTCH.S.F04
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [2]

    - label: "Step 4b: TH reads from the DUT the AttributeList attribute."
      PICS: "PICS_EVENT_LIST_ENABLED && !SWTCH.S.F04"
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [0, 1, 65528, 65529, 65530, 65531, 65532, 65533]

    - label: "Step 4b: TH reads from the DUT the AttributeList attribute."
      PICS: "!PICS_EVENT_LIST_ENABLED && !SWTCH.S.F04"
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [0, 1, 65528, 65529, 65531, 65532, 65533]

    - label: "Step 5a: TH reads from the DUT the EventList attribute."
      PICS:
          "!SWTCH.S.F00 && !SWTCH.S.F01 && !SWTCH.S.F02 && !SWTCH.S.F03 &&
          !SWTCH.S.F04 "
      command: "readAttribute"
      attribute: "EventList"
      response:
          value: []
          constraints:
              type: list

    - label: "Step 5b: TH reads EventList if SWTCH.S.F00(LS)"
      PICS: PICS_EVENT_LIST_ENABLED && SWTCH.S.F00
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [0]

    - label:
          "Step 5c: TH reads EventList if SWTCH.S.F01(MS) & !SWTCH.S.F02(MSR)"
      PICS: PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && !SWTCH.S.F02
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [1]

    - label:
          "Step 5d: TH reads EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) &
          !SWTCH.S.F03(MSL) & !SWTCH.S.F04(MSM)"
      PICS:
          " PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 &&
          !SWTCH.S.F03 && !SWTCH.S.F04 "
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [1, 3]

    - label:
          "Step 5e: TH reads EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) &
          SWTCH.S.F03(MSL) & !SWTCH.S.F04(MSM)"
      PICS:
          " PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03
          && !SWTCH.S.F04 "
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [1, 2, 3, 4]

    - label:
          "Step 5f: TH reads EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) &
          !SWTCH.S.F03(MSL) & SWTCH.S.F04(MSM) "
      PICS:
          " PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 &&
          !SWTCH.S.F03 && SWTCH.S.F04 "
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [1, 3, 5, 6]

    - label:
          "Step 5g: TH reads EventList if SWTCH.S.F01(MS) & SWTCH.S.F02(MSR) &
          SWTCH.S.F03(MSL) & SWTCH.S.F04(MSM) "
      PICS:
          " PICS_EVENT_LIST_ENABLED && SWTCH.S.F01 && SWTCH.S.F02 && SWTCH.S.F03
          && SWTCH.S.F04 "
      command: "readAttribute"
      attribute: "EventList"
      response:
          constraints:
              type: list
              contains: [1, 2, 3, 4, 5, 6]

    - label: "Step 6: TH reads from the DUT the AcceptedCommandList attribute."
      command: "readAttribute"
      attribute: "AcceptedCommandList"
      response:
          value: []
          constraints:
              type: list

    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
      command: "readAttribute"
      attribute: "GeneratedCommandList"
      response:
          value: []
          constraints:
              type: list
