1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.nfc; 18 19 import static com.android.nfc.NfcDiscoveryParameters.NFC_POLL_DEFAULT; 20 21 import static org.junit.Assert.assertEquals; 22 import static org.junit.Assert.assertFalse; 23 import static org.junit.Assert.assertNotNull; 24 import static org.junit.Assert.assertTrue; 25 import static org.mockito.Mockito.mock; 26 27 import android.util.proto.ProtoOutputStream; 28 29 import androidx.test.ext.junit.runners.AndroidJUnit4; 30 31 import com.android.dx.mockito.inline.extended.ExtendedMockito; 32 33 import org.junit.After; 34 import org.junit.Assert; 35 import org.junit.Before; 36 import org.junit.Test; 37 import org.junit.runner.RunWith; 38 import org.mockito.MockitoSession; 39 import org.mockito.quality.Strictness; 40 41 import java.util.Objects; 42 43 @RunWith(AndroidJUnit4.class) 44 public class NfcDiscoveryParametersTest { 45 46 private static final String TAG = NfcDiscoveryParametersTest.class.getSimpleName(); 47 private MockitoSession mStaticMockSession; 48 49 @Before setUp()50 public void setUp() throws Exception { 51 mStaticMockSession = ExtendedMockito.mockitoSession() 52 .strictness(Strictness.LENIENT) 53 .startMocking(); 54 } 55 56 @After tearDown()57 public void tearDown() throws Exception { 58 mStaticMockSession.finishMocking(); 59 } 60 61 computeDiscoveryParameters()62 private NfcDiscoveryParameters computeDiscoveryParameters() { 63 // Recompute discovery parameters based on screen state 64 NfcDiscoveryParameters.Builder paramsBuilder = NfcDiscoveryParameters.newBuilder(); 65 paramsBuilder.setTechMask(1); 66 paramsBuilder.setEnableLowPowerDiscovery(true); 67 paramsBuilder.setEnableHostRouting(true); 68 paramsBuilder.setEnableReaderMode(true); 69 return paramsBuilder.build(); 70 } 71 72 @Test testGetTechMask()73 public void testGetTechMask() { 74 NfcDiscoveryParameters nfcDiscoveryParameters = computeDiscoveryParameters(); 75 int techMask = nfcDiscoveryParameters.getTechMask(); 76 Assert.assertEquals(1, techMask); 77 } 78 79 @Test testDiscoveryParameters()80 public void testDiscoveryParameters() { 81 NfcDiscoveryParameters.Builder paramsBuilder = NfcDiscoveryParameters.newBuilder(); 82 NfcDiscoveryParameters nfcDiscoveryParameters = paramsBuilder.build(); 83 boolean shouldEnableDiscovery = nfcDiscoveryParameters.shouldEnableDiscovery(); 84 boolean shouldEnableLowPowerDiscovery = 85 nfcDiscoveryParameters.shouldEnableLowPowerDiscovery(); 86 boolean shouldEnableReaderMode = nfcDiscoveryParameters.shouldEnableReaderMode(); 87 boolean shouldEnableHostRouting = nfcDiscoveryParameters.shouldEnableHostRouting(); 88 89 assertFalse(shouldEnableDiscovery); 90 assertTrue(shouldEnableLowPowerDiscovery); 91 assertFalse(shouldEnableReaderMode); 92 assertFalse(shouldEnableHostRouting); 93 94 nfcDiscoveryParameters = computeDiscoveryParameters(); 95 shouldEnableDiscovery = nfcDiscoveryParameters.shouldEnableDiscovery(); 96 shouldEnableLowPowerDiscovery = nfcDiscoveryParameters.shouldEnableLowPowerDiscovery(); 97 shouldEnableReaderMode = nfcDiscoveryParameters.shouldEnableReaderMode(); 98 shouldEnableHostRouting = nfcDiscoveryParameters.shouldEnableHostRouting(); 99 100 assertTrue(shouldEnableDiscovery); 101 assertFalse(shouldEnableLowPowerDiscovery); 102 assertTrue(shouldEnableReaderMode); 103 assertTrue(shouldEnableHostRouting); 104 105 } 106 107 @Test testDefaultInstance()108 public void testDefaultInstance() { 109 ProtoOutputStream proto = mock(ProtoOutputStream.class); 110 NfcDiscoveryParameters nfcDiscoveryParameters = NfcDiscoveryParameters.getDefaultInstance(); 111 nfcDiscoveryParameters.dumpDebug(proto); 112 113 assertNotNull(nfcDiscoveryParameters); 114 } 115 116 @Test testToStringDefault()117 public void testToStringDefault() { 118 NfcDiscoveryParameters.Builder builder = NfcDiscoveryParameters.newBuilder(); 119 builder.setTechMask(NFC_POLL_DEFAULT); 120 builder.setEnableLowPowerDiscovery(true); 121 builder.setEnableReaderMode(true); 122 builder.setEnableHostRouting(true); 123 NfcDiscoveryParameters nfcDiscoveryParameters = builder.build(); 124 String stringBuilder = """ 125 mTechMask: default 126 mEnableLPD: false 127 mEnableReader: true 128 mEnableHostRouting: true 129 """; 130 131 assertEquals(stringBuilder, nfcDiscoveryParameters.toString()); 132 } 133 134 @Test testToString()135 public void testToString() { 136 NfcDiscoveryParameters.Builder builder = NfcDiscoveryParameters.newBuilder(); 137 builder.setTechMask(1); 138 builder.setEnableLowPowerDiscovery(true); 139 builder.setEnableReaderMode(true); 140 builder.setEnableHostRouting(true); 141 NfcDiscoveryParameters nfcDiscoveryParameters = builder.build(); 142 143 String stringBuilder = """ 144 mTechMask: 1 145 mEnableLPD: false 146 mEnableReader: true 147 mEnableHostRouting: true 148 """; 149 150 assertEquals(stringBuilder, nfcDiscoveryParameters.toString()); 151 } 152 153 @Test testHashCode()154 public void testHashCode() { 155 NfcDiscoveryParameters.Builder builder = NfcDiscoveryParameters.newBuilder(); 156 builder.setTechMask(NFC_POLL_DEFAULT); 157 builder.setEnableLowPowerDiscovery(true); 158 builder.setEnableReaderMode(true); 159 builder.setEnableHostRouting(true); 160 NfcDiscoveryParameters nfcDiscoveryParameters = builder.build(); 161 int expectedCode = Objects.hash(NFC_POLL_DEFAULT, false, true, true); 162 163 assertEquals(expectedCode, nfcDiscoveryParameters.hashCode()); 164 } 165 166 @Test testEquals()167 public void testEquals() { 168 NfcDiscoveryParameters.Builder builder = NfcDiscoveryParameters.newBuilder(); 169 builder.setTechMask(NFC_POLL_DEFAULT); 170 builder.setEnableLowPowerDiscovery(true); 171 builder.setEnableReaderMode(true); 172 builder.setEnableHostRouting(true); 173 NfcDiscoveryParameters nfcDiscoveryParameters = builder.build(); 174 NfcDiscoveryParameters obj = builder.build(); 175 176 assertTrue(nfcDiscoveryParameters.equals(obj)); 177 } 178 179 @Test testEqualsWithNullObject()180 public void testEqualsWithNullObject() { 181 NfcDiscoveryParameters.Builder builder = NfcDiscoveryParameters.newBuilder(); 182 builder.setTechMask(NFC_POLL_DEFAULT); 183 builder.setEnableLowPowerDiscovery(true); 184 builder.setEnableReaderMode(true); 185 builder.setEnableHostRouting(true); 186 NfcDiscoveryParameters nfcDiscoveryParameters = builder.build(); 187 188 assertFalse(nfcDiscoveryParameters.equals(null)); 189 } 190 } 191