blob: a00e0d386ea671ec65401cfb8a8a7060893af61e [file] [log] [blame]
/*
* 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 android.autofillservice.cts;
import static com.google.common.truth.Truth.assertThat;
import static org.testng.Assert.assertThrows;
import android.os.Bundle;
import android.platform.test.annotations.AppModeFull;
import android.service.autofill.CompositeUserData;
import android.service.autofill.UserData;
import android.util.ArrayMap;
import com.google.common.base.Strings;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
@AppModeFull(reason = "Unit test")
public class CompositeUserDataTest {
private final String mShortValue = Strings.repeat("k", UserData.getMinValueLength() - 1);
private final String mLongValue = "LONG VALUE, Y U NO SHORTER"
+ Strings.repeat("?", UserData.getMaxValueLength());
private final String mId = "4815162342";
private final String mId2 = "4815162343";
private final String mCategoryId = "id1";
private final String mCategoryId2 = "id2";
private final String mCategoryId3 = "id3";
private final String mValue = mShortValue + "-1";
private final String mValue2 = mShortValue + "-2";
private final String mValue3 = mShortValue + "-3";
private final String mValue4 = mShortValue + "-4";
private final String mValue5 = mShortValue + "-5";
private final String mAlgo = "algo";
private final String mAlgo2 = "algo2";
private final String mAlgo3 = "algo3";
private final String mAlgo4 = "algo4";
private final UserData mEmptyGenericUserData = new UserData.Builder(mId, mValue, mCategoryId)
.build();
private final UserData mLoadedGenericUserData = new UserData.Builder(mId, mValue, mCategoryId)
.add(mValue2, mCategoryId2)
.setFieldClassificationAlgorithm(mAlgo, createBundle(false))
.setFieldClassificationAlgorithmForCategory(mCategoryId2, mAlgo2, createBundle(false))
.build();
private final UserData mEmptyPackageUserData = new UserData.Builder(mId2, mValue3, mCategoryId3)
.build();
private final UserData mLoadedPackageUserData = new UserData
.Builder(mId2, mValue3, mCategoryId3)
.add(mValue4, mCategoryId2)
.setFieldClassificationAlgorithm(mAlgo3, createBundle(true))
.setFieldClassificationAlgorithmForCategory(mCategoryId2, mAlgo4, createBundle(true))
.build();
@Test
public void testMergeInvalid_bothNull() {
assertThrows(NullPointerException.class, () -> new CompositeUserData(null, null));
}
@Test
public void testMergeInvalid_nullPackageUserData() {
assertThrows(NullPointerException.class,
() -> new CompositeUserData(mEmptyGenericUserData, null));
}
@Test
public void testMerge_nullGenericUserData() {
final CompositeUserData userData = new CompositeUserData(null, mEmptyPackageUserData);
final String[] categoryIds = userData.getCategoryIds();
assertThat(categoryIds.length).isEqualTo(1);
assertThat(categoryIds[0]).isEqualTo(mCategoryId3);
final String[] values = userData.getValues();
assertThat(values.length).isEqualTo(1);
assertThat(values[0]).isEqualTo(mValue3);
assertThat(userData.getFieldClassificationAlgorithm()).isNull();
assertThat(userData.getDefaultFieldClassificationArgs()).isNull();
}
@Test
public void testMerge_bothEmpty() {
final CompositeUserData userData = new CompositeUserData(mEmptyGenericUserData,
mEmptyPackageUserData);
final String[] categoryIds = userData.getCategoryIds();
assertThat(categoryIds.length).isEqualTo(2);
assertThat(categoryIds[0]).isEqualTo(mCategoryId3);
assertThat(categoryIds[1]).isEqualTo(mCategoryId);
final String[] values = userData.getValues();
assertThat(values.length).isEqualTo(2);
assertThat(values[0]).isEqualTo(mValue3);
assertThat(values[1]).isEqualTo(mValue);
assertThat(userData.getFieldClassificationAlgorithm()).isNull();
assertThat(userData.getDefaultFieldClassificationArgs()).isNull();
}
@Test
public void testMerge_emptyGenericUserData() {
final CompositeUserData userData = new CompositeUserData(mEmptyGenericUserData,
mLoadedPackageUserData);
final String[] categoryIds = userData.getCategoryIds();
assertThat(categoryIds.length).isEqualTo(3);
assertThat(categoryIds[0]).isEqualTo(mCategoryId3);
assertThat(categoryIds[1]).isEqualTo(mCategoryId2);
assertThat(categoryIds[2]).isEqualTo(mCategoryId);
final String[] values = userData.getValues();
assertThat(values.length).isEqualTo(3);
assertThat(values[0]).isEqualTo(mValue3);
assertThat(values[1]).isEqualTo(mValue4);
assertThat(values[2]).isEqualTo(mValue);
assertThat(userData.getFieldClassificationAlgorithm()).isEqualTo(mAlgo3);
final Bundle defaultArgs = userData.getDefaultFieldClassificationArgs();
assertThat(defaultArgs).isNotNull();
assertThat(defaultArgs.getBoolean("isPackage")).isTrue();
assertThat(userData.getFieldClassificationAlgorithmForCategory(mCategoryId2))
.isEqualTo(mAlgo4);
final ArrayMap<String, Bundle> args = userData.getFieldClassificationArgs();
assertThat(args.size()).isEqualTo(1);
assertThat(args.containsKey(mCategoryId2)).isTrue();
assertThat(args.get(mCategoryId2)).isNotNull();
assertThat(args.get(mCategoryId2).getBoolean("isPackage")).isTrue();
}
@Test
public void testMerge_emptyPackageUserData() {
final CompositeUserData userData = new CompositeUserData(mLoadedGenericUserData,
mEmptyPackageUserData);
final String[] categoryIds = userData.getCategoryIds();
assertThat(categoryIds.length).isEqualTo(3);
assertThat(categoryIds[0]).isEqualTo(mCategoryId3);
assertThat(categoryIds[1]).isEqualTo(mCategoryId);
assertThat(categoryIds[2]).isEqualTo(mCategoryId2);
final String[] values = userData.getValues();
assertThat(values.length).isEqualTo(3);
assertThat(values[0]).isEqualTo(mValue3);
assertThat(values[1]).isEqualTo(mValue);
assertThat(values[2]).isEqualTo(mValue2);
assertThat(userData.getFieldClassificationAlgorithm()).isEqualTo(mAlgo);
final Bundle defaultArgs = userData.getDefaultFieldClassificationArgs();
assertThat(defaultArgs).isNotNull();
assertThat(defaultArgs.getBoolean("isPackage")).isFalse();
assertThat(userData.getFieldClassificationAlgorithmForCategory(mCategoryId2))
.isEqualTo(mAlgo2);
final ArrayMap<String, Bundle> args = userData.getFieldClassificationArgs();
assertThat(args.size()).isEqualTo(1);
assertThat(args.containsKey(mCategoryId2)).isTrue();
assertThat(args.get(mCategoryId2)).isNotNull();
assertThat(args.get(mCategoryId2).getBoolean("isPackage")).isFalse();
}
@Test
public void testMerge_bothHaveData() {
final CompositeUserData userData = new CompositeUserData(mLoadedGenericUserData,
mLoadedPackageUserData);
final String[] categoryIds = userData.getCategoryIds();
assertThat(categoryIds.length).isEqualTo(3);
assertThat(categoryIds[0]).isEqualTo(mCategoryId3);
assertThat(categoryIds[1]).isEqualTo(mCategoryId2);
assertThat(categoryIds[2]).isEqualTo(mCategoryId);
final String[] values = userData.getValues();
assertThat(values.length).isEqualTo(3);
assertThat(values[0]).isEqualTo(mValue3);
assertThat(values[1]).isEqualTo(mValue4);
assertThat(values[2]).isEqualTo(mValue);
assertThat(userData.getFieldClassificationAlgorithm()).isEqualTo(mAlgo3);
assertThat(userData.getDefaultFieldClassificationArgs()).isNotNull();
assertThat(userData.getFieldClassificationAlgorithmForCategory(mCategoryId2))
.isEqualTo(mAlgo4);
final Bundle defaultArgs = userData.getDefaultFieldClassificationArgs();
assertThat(defaultArgs).isNotNull();
assertThat(defaultArgs.getBoolean("isPackage")).isTrue();
assertThat(userData.getFieldClassificationAlgorithmForCategory(mCategoryId2))
.isEqualTo(mAlgo4);
final ArrayMap<String, Bundle> args = userData.getFieldClassificationArgs();
assertThat(args.size()).isEqualTo(1);
assertThat(args.containsKey(mCategoryId2)).isTrue();
assertThat(args.get(mCategoryId2)).isNotNull();
assertThat(args.get(mCategoryId2).getBoolean("isPackage")).isTrue();
}
private Bundle createBundle(Boolean isPackageBundle) {
final Bundle bundle = new Bundle();
bundle.putBoolean("isPackage", isPackageBundle);
return bundle;
}
}