• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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