Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d6cadeb authored by Jun Yin's avatar Jun Yin Committed by android-build-merger
Browse files

Merge "EuiccSpecVersion" am: 064f8206

am: bf0353d8

Change-Id: I8450ab0daba824239c8d9cf61606013b09c791bf
parents 68b5c6f6 bf0353d8
Loading
Loading
Loading
Loading
+97 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * 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 com.android.internal.telephony.uicc.euicc;

import java.util.Arrays;

/**
 * This represents the version of GSMA SGP.22 spec in the form of 3 numbers: major, minor, and
 * revision.
 *
 * @hide
 */
public final class EuiccSpecVersion implements Comparable<EuiccSpecVersion> {
    private final int[] mVersionValues = new int[3];

    public EuiccSpecVersion(int major, int minor, int revision) {
        mVersionValues[0] = major;
        mVersionValues[1] = minor;
        mVersionValues[2] = revision;
    }

    /**
     * @param version The version bytes from ASN1 data. The length must be 3.
     */
    public EuiccSpecVersion(byte[] version) {
        mVersionValues[0] = version[0] & 0xFF;
        mVersionValues[1] = version[1] & 0xFF;
        mVersionValues[2] = version[2] & 0xFF;
    }

    public int getMajor() {
        return mVersionValues[0];
    }

    public int getMinor() {
        return mVersionValues[1];
    }

    public int getRevision() {
        return mVersionValues[2];
    }

    @Override
    public int compareTo(EuiccSpecVersion that) {
        if (getMajor() > that.getMajor()) {
            return 1;
        } else if (getMajor() < that.getMajor()) {
            return -1;
        }
        if (getMinor() > that.getMinor()) {
            return 1;
        } else if (getMinor() < that.getMinor()) {
            return -1;
        }
        if (getRevision() > that.getRevision()) {
            return 1;
        } else if (getRevision() < that.getRevision()) {
            return -1;
        }
        return 0;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        return Arrays.equals(mVersionValues, ((EuiccSpecVersion) obj).mVersionValues);
    }

    @Override
    public int hashCode() {
        return Arrays.hashCode(mVersionValues);
    }

    @Override
    public String toString() {
        return mVersionValues[0] + "." + mVersionValues[1] + "." + mVersionValues[2];
    }
}
+84 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * 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 com.android.internal.telephony.uicc.euicc;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;

import org.junit.Test;

public class EuiccSpecVersionTest {
    @Test
    public void testCreate() {
        EuiccSpecVersion ver = new EuiccSpecVersion(1, 2, 3);
        assertEquals(1, ver.getMajor());
        assertEquals(2, ver.getMinor());
        assertEquals(3, ver.getRevision());
    }

    @Test
    public void testCreateFromBytes() {
        EuiccSpecVersion ver = new EuiccSpecVersion(new byte[] {1, 2, 3});
        assertEquals(1, ver.getMajor());
        assertEquals(2, ver.getMinor());
        assertEquals(3, ver.getRevision());
    }

    @Test
    public void testCompareTo() {
        EuiccSpecVersion ver1 = new EuiccSpecVersion(1, 2, 3);
        EuiccSpecVersion ver2 = new EuiccSpecVersion(1, 2, 3);
        assertEquals(0, ver1.compareTo(ver2));
        assertEquals(0, ver2.compareTo(ver1));
        assertTrue(ver1.equals(ver2));
        assertFalse(ver1.equals(null));
        assertFalse(ver1.equals(new Object()));
        assertEquals(ver1.hashCode(), ver2.hashCode());

        ver2 = new EuiccSpecVersion(2, 2, 3);
        assertEquals(-1, ver1.compareTo(ver2));
        assertEquals(1, ver2.compareTo(ver1));
        assertFalse(ver2.equals(ver1));
        assertNotEquals(ver1.hashCode(), ver2.hashCode());

        ver2 = new EuiccSpecVersion(1, 3, 3);
        assertEquals(-1, ver1.compareTo(ver2));
        assertEquals(1, ver2.compareTo(ver1));
        assertFalse(ver2.equals(ver1));
        assertNotEquals(ver1.hashCode(), ver2.hashCode());

        ver2 = new EuiccSpecVersion(1, 2, 4);
        assertEquals(-1, ver1.compareTo(ver2));
        assertEquals(1, ver2.compareTo(ver1));
        assertFalse(ver2.equals(ver1));
        assertNotEquals(ver1.hashCode(), ver2.hashCode());

        ver2 = new EuiccSpecVersion(2, 2, 2);
        assertEquals(-1, ver1.compareTo(ver2));
        assertEquals(1, ver2.compareTo(ver1));

        ver2 = new EuiccSpecVersion(2, 1, 3);
        assertEquals(-1, ver1.compareTo(ver2));
        assertEquals(1, ver2.compareTo(ver1));

        ver2 = new EuiccSpecVersion(1, 3, 2);
        assertEquals(-1, ver1.compareTo(ver2));
        assertEquals(1, ver2.compareTo(ver1));
    }
}