/*
 * Copyright 2015 Open Networking Laboratory
 *
 * 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.
 */
package org.onosproject.codec.impl;

import org.junit.Test;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass;

/**
 * Tests to assure that the codec classes follow the contract of having
 * no local context.
 */
public class ImmutableCodecsTest {

    /**
     * Checks that the codec classes adhere to the contract that there cannot
     * be any local context in a codec.
     */
    @Test
    public void checkImmutability() {
        assertThatClassIsImmutableBaseClass(AnnotatedCodec.class);
        assertThatClassIsImmutable(AnnotationsCodec.class);
        assertThatClassIsImmutable(ApplicationCodec.class);
        assertThatClassIsImmutable(ConnectivityIntentCodec.class);
        assertThatClassIsImmutable(ConnectPointCodec.class);
        assertThatClassIsImmutable(ConstraintCodec.class);
        assertThatClassIsImmutable(CriterionCodec.class);
        assertThatClassIsImmutable(EncodeCriterionCodec.class);
        assertThatClassIsImmutable(DecodeCriterionCodec.class);
        assertThatClassIsImmutable(DeviceCodec.class);
        assertThatClassIsImmutable(EthernetCodec.class);
        assertThatClassIsImmutable(FlowEntryCodec.class);
        assertThatClassIsImmutable(HostCodec.class);
        assertThatClassIsImmutable(HostLocationCodec.class);
        assertThatClassIsImmutable(HostToHostIntentCodec.class);
        assertThatClassIsImmutable(InstructionCodec.class);
        assertThatClassIsImmutable(EncodeInstructionCodec.class);
        assertThatClassIsImmutable(DecodeInstructionCodec.class);
        assertThatClassIsImmutable(IntentCodec.class);
        assertThatClassIsImmutable(LinkCodec.class);
        assertThatClassIsImmutable(PathCodec.class);
        assertThatClassIsImmutable(PointToPointIntentCodec.class);
        assertThatClassIsImmutable(PortCodec.class);
        assertThatClassIsImmutable(TopologyClusterCodec.class);
        assertThatClassIsImmutable(TopologyCodec.class);
        assertThatClassIsImmutable(TrafficSelectorCodec.class);
        assertThatClassIsImmutable(TrafficTreatmentCodec.class);
        assertThatClassIsImmutable(FlowRuleCodec.class);
    }
}
