1 /* 2 * Copyright (C) 2018 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.textclassifier.common; 18 19 import static com.android.textclassifier.common.ModelFile.LANGUAGE_INDEPENDENT; 20 import static com.google.common.truth.Truth.assertThat; 21 22 import androidx.test.ext.junit.runners.AndroidJUnit4; 23 import androidx.test.filters.SmallTest; 24 import com.android.textclassifier.common.ModelType.ModelTypeDef; 25 import com.android.textclassifier.common.logging.ResultIdUtils.ModelInfo; 26 import com.google.common.base.Optional; 27 import com.google.common.collect.ImmutableList; 28 import java.util.stream.Collectors; 29 import org.junit.Test; 30 import org.junit.runner.RunWith; 31 32 @SmallTest 33 @RunWith(AndroidJUnit4.class) 34 public final class ModelFileTest { 35 @ModelTypeDef private static final String MODEL_TYPE = ModelType.ANNOTATOR; 36 37 @Test modelFileEquals()38 public void modelFileEquals() { 39 ModelFile modelA = 40 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 1, "ja", /* isAsset= */ false); 41 ModelFile modelB = 42 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 1, "ja", /* isAsset= */ false); 43 44 assertThat(modelA).isEqualTo(modelB); 45 } 46 47 @Test modelFile_different()48 public void modelFile_different() { 49 ModelFile modelA = 50 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 1, "ja", /* isAsset= */ false); 51 ModelFile modelB = 52 new ModelFile(MODEL_TYPE, "/path/b", /* version= */ 1, "ja", /* isAsset= */ false); 53 54 assertThat(modelA).isNotEqualTo(modelB); 55 } 56 57 @Test modelFile_isPreferredTo_languageDependentIsBetter()58 public void modelFile_isPreferredTo_languageDependentIsBetter() { 59 ModelFile modelA = 60 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 1, "ja", /* isAsset= */ false); 61 ModelFile modelB = 62 new ModelFile( 63 MODEL_TYPE, "/path/b", /* version= */ 2, LANGUAGE_INDEPENDENT, /* isAsset= */ false); 64 65 assertThat(modelA.isPreferredTo(modelB)).isTrue(); 66 } 67 68 @Test modelFile_isPreferredTo_version()69 public void modelFile_isPreferredTo_version() { 70 ModelFile modelA = 71 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 2, "ja", /* isAsset= */ false); 72 ModelFile modelB = 73 new ModelFile(MODEL_TYPE, "/path/b", /* version= */ 1, "ja", /* isAsset= */ false); 74 75 assertThat(modelA.isPreferredTo(modelB)).isTrue(); 76 } 77 78 @Test modelFile_toModelInfo()79 public void modelFile_toModelInfo() { 80 ModelFile modelFile = 81 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 2, "ja", /* isAsset= */ false); 82 83 ModelInfo modelInfo = modelFile.toModelInfo(); 84 85 assertThat(modelInfo.toModelName()).isEqualTo("ja_v2"); 86 } 87 88 @Test modelFile_toModelInfo_universal()89 public void modelFile_toModelInfo_universal() { 90 ModelFile modelFile = 91 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 2, "*", /* isAsset= */ false); 92 93 ModelInfo modelInfo = modelFile.toModelInfo(); 94 95 assertThat(modelInfo.toModelName()).isEqualTo("*_v2"); 96 } 97 98 @Test modelFile_toModelInfos()99 public void modelFile_toModelInfos() { 100 ModelFile englishModelFile = 101 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 1, "en", /* isAsset= */ false); 102 ModelFile japaneseModelFile = 103 new ModelFile(MODEL_TYPE, "/path/a", /* version= */ 2, "ja", /* isAsset= */ false); 104 105 ImmutableList<Optional<ModelInfo>> modelInfos = 106 ModelFile.toModelInfos(Optional.of(englishModelFile), Optional.of(japaneseModelFile)); 107 108 assertThat( 109 modelInfos.stream() 110 .map(modelFile -> modelFile.transform(ModelInfo::toModelName).or("")) 111 .collect(Collectors.toList())) 112 .containsExactly("en_v1", "ja_v2") 113 .inOrder(); 114 } 115 } 116