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

Commit 15628f80 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Check contents of Bundle for ScoredNetwork.equals"

parents 488c5db2 4efd1ca5
Loading
Loading
Loading
Loading
+23 −6
Original line number Diff line number Diff line
@@ -16,18 +16,14 @@

package android.net;

import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.Math;
import java.lang.UnsupportedOperationException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Objects;
import java.util.Set;

/**
 * A network identifier along with a score for the quality of that network.
@@ -195,7 +191,28 @@ public class ScoredNetwork implements Parcelable {
        return Objects.equals(networkKey, that.networkKey)
                && Objects.equals(rssiCurve, that.rssiCurve)
                && Objects.equals(meteredHint, that.meteredHint)
                && Objects.equals(attributes, that.attributes);
                && bundleEquals(attributes, that.attributes);
    }

    private boolean bundleEquals(Bundle bundle1, Bundle bundle2) {
        if (bundle1 == bundle2) {
            return true;
        }
        if (bundle1 == null || bundle2 == null) {
            return false;
        }
        if (bundle1.size() != bundle2.size()) {
            return false;
        }
        Set<String> keys = bundle1.keySet();
        for (String key : keys) {
            Object value1 = bundle1.get(key);
            Object value2 = bundle2.get(key);
            if (!Objects.equals(value1, value2)) {
                return false;
            }
        }
        return true;
    }

    @Override
+49 −0
Original line number Diff line number Diff line
@@ -48,6 +48,55 @@ public class ScoredNetworkTest {
    private static final NetworkKey KEY
        = new NetworkKey(new WifiKey("\"ssid\"", "00:00:00:00:00:00"));

    @Test
    public void scoredNetworksWithBothNullAttributeBundle_equal() {
        ScoredNetwork scoredNetwork1 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, null /* attributes */);
        ScoredNetwork scoredNetwork2 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, null /* attributes */);
        assertTrue(scoredNetwork1.equals(scoredNetwork2));
    }

    @Test
    public void scoredNetworksWithOneNullAttributeBundle_notEqual() {
        ScoredNetwork scoredNetwork1 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES);
        ScoredNetwork scoredNetwork2 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, null /* attributes */);
        assertFalse(scoredNetwork1.equals(scoredNetwork2));
    }

    @Test
    public void scoredNetworksWithDifferentSizedAttributeBundle_notEqual() {
        ScoredNetwork scoredNetwork1 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES);
        Bundle attr = new Bundle(ATTRIBUTES);
        attr.putBoolean(ScoredNetwork.ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL, true);
        ScoredNetwork scoredNetwork2 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr);
        assertFalse(scoredNetwork1.equals(scoredNetwork2));
    }

    @Test
    public void scoredNetworksWithDifferentAttributeValues_notEqual() {
        ScoredNetwork scoredNetwork1 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES);
        Bundle attr = new Bundle();
        attr.putInt(ScoredNetwork.ATTRIBUTES_KEY_RANKING_SCORE_OFFSET, Integer.MIN_VALUE);
        ScoredNetwork scoredNetwork2 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, attr);
        assertFalse(scoredNetwork1.equals(scoredNetwork2));
    }

    @Test
    public void scoredNetworksWithSameAttributeValuesAndSize_equal() {
        ScoredNetwork scoredNetwork1 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES);
        ScoredNetwork scoredNetwork2 =
                new ScoredNetwork(KEY, CURVE, false /* meteredHint */, ATTRIBUTES);
        assertTrue(scoredNetwork1.equals(scoredNetwork2));
    }

    @Test
    public void calculateRankingOffsetShouldThrowUnsupportedOperationException() {
        // No curve or ranking score offset set in curve