demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java
Go to the documentation of this file.
1 package ai.picovoice.rhinodemo;
2 
3 import android.content.Context;
4 import android.content.res.AssetManager;
5 
6 import androidx.test.ext.junit.runners.AndroidJUnit4;
7 import androidx.test.platform.app.InstrumentationRegistry;
8 
9 import com.microsoft.appcenter.espresso.Factory;
10 import com.microsoft.appcenter.espresso.ReportHelper;
11 
12 import org.junit.After;
13 import org.junit.Before;
14 import org.junit.Rule;
15 import org.junit.Test;
16 import org.junit.runner.RunWith;
17 
18 import java.io.BufferedInputStream;
19 import java.io.BufferedOutputStream;
20 import java.io.File;
21 import java.io.FileInputStream;
22 import java.io.FileOutputStream;
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.io.OutputStream;
26 import java.nio.ByteBuffer;
27 import java.nio.ByteOrder;
28 import java.util.Map;
29 
30 import ai.picovoice.rhino.Rhino;
33 
34 import static org.junit.Assert.assertEquals;
35 import static org.junit.Assert.assertFalse;
36 import static org.junit.Assert.assertTrue;
37 
38 
39 @RunWith(AndroidJUnit4.class)
40 public class RhinoTest {
41  @Rule
42  public ReportHelper reportHelper = Factory.getReportHelper();
43  Context testContext;
44  Context appContext;
45  AssetManager assetManager;
46  String testResourcesPath;
47  String accessKey;
48 
49  @After
50  public void TearDown() {
51  reportHelper.label("Stopping App");
52  }
53 
54  @Before
55  public void Setup() throws IOException {
56  testContext = InstrumentationRegistry.getInstrumentation().getContext();
57  appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
58  assetManager = testContext.getAssets();
59  extractAssetsRecursively("test_resources");
60  testResourcesPath = new File(appContext.getFilesDir(), "test_resources").getAbsolutePath();
61 
62  accessKey = appContext.getString(R.string.pvTestingAccessKey);
63  }
64 
65  @Test
66  public void testInitSuccessSimple() throws RhinoException {
67  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_android.rhn");
68  Rhino r = new Rhino.Builder()
69  .setAccessKey(accessKey)
70  .setContextPath(contextPath.getAbsolutePath())
71  .build(appContext);
72 
73  assertTrue(r.getVersion() != null && !r.getVersion().equals(""));
74  assertTrue(r.getFrameLength() > 0);
75  assertTrue(r.getSampleRate() > 0);
76  assertTrue(r.getContextInformation() != null && !r.getContextInformation().equals(""));
77 
78  r.delete();
79  }
80 
81  @Test
83  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_android.rhn");
84  File modelPath = new File(testResourcesPath, "model_files/rhino_params.pv");
85  Rhino r = new Rhino.Builder()
86  .setAccessKey(accessKey)
87  .setContextPath(contextPath.getAbsolutePath())
88  .setModelPath(modelPath.getAbsolutePath())
89  .build(appContext);
90 
91  assertTrue(r.getContextInformation() != null && !r.getContextInformation().equals(""));
92  r.delete();
93  }
94 
95  @Test
97  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_android.rhn");
98  Rhino r = new Rhino.Builder()
99  .setAccessKey(accessKey)
100  .setContextPath(contextPath.getAbsolutePath())
101  .setSensitivity(0.7f)
102  .build(appContext);
103 
104  assertTrue(r.getContextInformation() != null && !r.getContextInformation().equals(""));
105  r.delete();
106  }
107 
108  @Test
110  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_android.rhn");
111  Rhino r = new Rhino.Builder()
112  .setAccessKey(accessKey)
113  .setContextPath(contextPath.getAbsolutePath())
114  .setRequireEndpoint(false)
115  .build(appContext);
116 
117  assertTrue(r.getContextInformation() != null && !r.getContextInformation().equals(""));
118  r.delete();
119  }
120 
121  @Test
122  public void testInitSuccessDE() throws RhinoException {
123  File contextPath = new File(testResourcesPath, "context_files/test_de_android.rhn");
124  File modelPath = new File(testResourcesPath, "model_files/rhino_params_de.pv");
125  Rhino r = new Rhino.Builder()
126  .setAccessKey(accessKey)
127  .setContextPath(contextPath.getAbsolutePath())
128  .setModelPath(modelPath.getAbsolutePath())
129  .build(appContext);
130 
131  assertTrue(r.getContextInformation() != null && !r.getContextInformation().equals(""));
132  r.delete();
133  }
134 
135  @Test
136  public void testInitSuccessES() throws RhinoException {
137  File contextPath = new File(testResourcesPath, "context_files/test_es_android.rhn");
138  File modelPath = new File(testResourcesPath, "model_files/rhino_params_es.pv");
139  Rhino r = new Rhino.Builder()
140  .setAccessKey(accessKey)
141  .setContextPath(contextPath.getAbsolutePath())
142  .setModelPath(modelPath.getAbsolutePath())
143  .build(appContext);
144 
145  assertTrue(r.getContextInformation() != null && !r.getContextInformation().equals(""));
146  r.delete();
147  }
148 
149  @Test
150  public void testInitSuccessFR() throws RhinoException {
151  File contextPath = new File(testResourcesPath, "context_files/test_fr_android.rhn");
152  File modelPath = new File(testResourcesPath, "model_files/rhino_params_fr.pv");
153  Rhino r = new Rhino.Builder()
154  .setAccessKey(accessKey)
155  .setContextPath(contextPath.getAbsolutePath())
156  .setModelPath(modelPath.getAbsolutePath())
157  .build(appContext);
158 
159  assertTrue(r.getContextInformation() != null && !r.getContextInformation().equals(""));
160  r.delete();
161  }
162 
163  @Test
165  boolean didFail = false;
166  File contextPath = new File(testResourcesPath, "context_files/test_de_android.rhn");
167  File modelPath = new File(testResourcesPath, "model_files/rhino_params.pv");
168  try {
169  new Rhino.Builder()
170  .setAccessKey(accessKey)
171  .setContextPath(contextPath.getAbsolutePath())
172  .setModelPath(modelPath.getAbsolutePath())
173  .build(appContext);
174  } catch (RhinoException e) {
175  didFail = true;
176  }
177 
178  assertTrue(didFail);
179  }
180 
181  @Test
183  boolean didFail = false;
184  File contextPath = new File(testResourcesPath, "context_files/test_fr_android.rhn");
185  try {
186  new Rhino.Builder()
187  .setContextPath(contextPath.getAbsolutePath())
188  .build(appContext);
189  } catch (RhinoException e) {
190  didFail = true;
191  }
192 
193  assertTrue(didFail);
194  }
195 
196  @Test
198  boolean didFail = false;
199  try {
200  new Rhino.Builder()
201  .setAccessKey(accessKey)
202  .build(appContext);
203  } catch (RhinoException e) {
204  didFail = true;
205  }
206 
207  assertTrue(didFail);
208  }
209 
210  @Test
212  boolean didFail = false;
213  File contextPath = new File(testResourcesPath, "bad_path/bad_path.rhn");
214  try {
215  new Rhino.Builder()
216  .setAccessKey(accessKey)
217  .setContextPath(contextPath.getAbsolutePath())
218  .build(appContext);
219  } catch (RhinoException e) {
220  didFail = true;
221  }
222 
223  assertTrue(didFail);
224  }
225 
226  @Test
228  boolean didFail = false;
229  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_android.rhn");
230  File modelPath = new File(testResourcesPath, "bad_path/bad_path.pv");
231  try {
232  new Rhino.Builder()
233  .setAccessKey(accessKey)
234  .setContextPath(contextPath.getAbsolutePath())
235  .setModelPath(modelPath.getAbsolutePath())
236  .build(appContext);
237  } catch (RhinoException e) {
238  didFail = true;
239  }
240 
241  assertTrue(didFail);
242  }
243 
244  @Test
246  boolean didFail = false;
247  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_android.rhn");
248  try {
249  new Rhino.Builder()
250  .setAccessKey(accessKey)
251  .setContextPath(contextPath.getAbsolutePath())
252  .setSensitivity(10)
253  .build(appContext);
254  } catch (RhinoException e) {
255  didFail = true;
256  }
257 
258  assertTrue(didFail);
259  }
260 
261  @Test
263  boolean didFail = false;
264  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_linux.rhn");
265  try {
266  new Rhino.Builder()
267  .setAccessKey(accessKey)
268  .setContextPath(contextPath.getAbsolutePath())
269  .build(appContext);
270  } catch (RhinoException e) {
271  didFail = true;
272  }
273 
274  assertTrue(didFail);
275  }
276 
277  @Test
278  public void testProcWithinContext() throws Exception {
279 
280  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_android.rhn");
281  Rhino r = new Rhino.Builder()
282  .setAccessKey(accessKey)
283  .setContextPath(contextPath.getAbsolutePath())
284  .build(appContext);
285 
286  File testAudio = new File(testResourcesPath, "audio_samples/test_within_context.wav");
287  FileInputStream audioInputStream = new FileInputStream(testAudio);
288 
289  byte[] rawData = new byte[r.getFrameLength() * 2];
290  short[] pcm = new short[r.getFrameLength()];
291  ByteBuffer pcmBuff = ByteBuffer.wrap(rawData).order(ByteOrder.LITTLE_ENDIAN);
292 
293  assertEquals(44, audioInputStream.skip(44));
294 
295  boolean isFinalized = false;
296  while (audioInputStream.available() > 0) {
297  int numRead = audioInputStream.read(pcmBuff.array());
298  if (numRead == r.getFrameLength() * 2) {
299  pcmBuff.asShortBuffer().get(pcm);
300  isFinalized = r.process(pcm);
301  if (isFinalized) {
302  break;
303  }
304  }
305  }
306 
307  assertTrue(isFinalized);
308 
309  RhinoInference inference = r.getInference();
310  assertTrue(inference.getIsUnderstood());
311  assertEquals("orderBeverage", inference.getIntent());
312 
313  Map<String, String> slots = inference.getSlots();
314  assertEquals("medium", slots.get("size"));
315  assertEquals("double shot", slots.get("numberOfShots"));
316  assertEquals("americano", slots.get("beverage"));
317 
318  r.delete();
319  }
320 
321  @Test
322  public void testProcOutOfContext() throws Exception {
323 
324  File contextPath = new File(testResourcesPath, "context_files/coffee_maker_android.rhn");
325  Rhino r = new Rhino.Builder()
326  .setAccessKey(accessKey)
327  .setContextPath(contextPath.getAbsolutePath())
328  .build(appContext);
329 
330  File testAudio = new File(testResourcesPath, "audio_samples/test_out_of_context.wav");
331  FileInputStream audioInputStream = new FileInputStream(testAudio);
332 
333  byte[] rawData = new byte[r.getFrameLength() * 2];
334  short[] pcm = new short[r.getFrameLength()];
335  ByteBuffer pcmBuff = ByteBuffer.wrap(rawData).order(ByteOrder.LITTLE_ENDIAN);
336 
337  assertEquals(44, audioInputStream.skip(44));
338 
339  boolean isFinalized = false;
340  while (audioInputStream.available() > 0) {
341  int numRead = audioInputStream.read(pcmBuff.array());
342  if (numRead == r.getFrameLength() * 2) {
343  pcmBuff.asShortBuffer().get(pcm);
344  isFinalized = r.process(pcm);
345  if (isFinalized) {
346  break;
347  }
348  }
349  }
350 
351  assertTrue(isFinalized);
352 
353  RhinoInference inference = r.getInference();
354  assertFalse(inference.getIsUnderstood());
355 
356  r.delete();
357  }
358 
359  private void extractAssetsRecursively(String path) throws IOException {
360 
361  String[] list = assetManager.list(path);
362  if (list.length > 0) {
363  File outputFile = new File(appContext.getFilesDir(), path);
364  if (!outputFile.exists()) {
365  if (!outputFile.mkdirs()) {
366  throw new IOException("Couldn't create output directory " + outputFile.getAbsolutePath());
367  }
368  }
369 
370  for (String file : list) {
371  String filepath = path + "/" + file;
372  extractAssetsRecursively(filepath);
373  }
374  } else {
375  extractTestFile(path);
376  }
377  }
378 
379  private void extractTestFile(String filepath) throws IOException {
380 
381  InputStream is = new BufferedInputStream(assetManager.open(filepath), 256);
382  File absPath = new File(appContext.getFilesDir(), filepath);
383  OutputStream os = new BufferedOutputStream(new FileOutputStream(absPath), 256);
384  int r;
385  while ((r = is.read()) != -1) {
386  os.write(r);
387  }
388  os.flush();
389 
390  is.close();
391  os.close();
392  }
393 }
R
#define R
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/extras/stb_vorbis.c:5104
ai.picovoice.rhino.RhinoException
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoException.java:14
ai.picovoice.rhino.Rhino.process
boolean process(short[] pcm)
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:90
ai.picovoice.rhino.Rhino.Builder.setSensitivity
Builder setSensitivity(float sensitivity)
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:221
ai.picovoice.rhinodemo.RhinoTest.testInitFailWithNoContext
void testInitFailWithNoContext()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:197
ai.picovoice.rhinodemo.RhinoTest.testInitSuccessFR
void testInitSuccessFR()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:150
ai.picovoice.rhino.RhinoInference.getIntent
String getIntent()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/RhinoInference.java:30
ai.picovoice.rhino.Rhino.Builder.setContextPath
Builder setContextPath(String contextPath)
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:216
ai.picovoice.rhinodemo.RhinoTest.testInitSuccessSimple
void testInitSuccessSimple()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:66
ai.picovoice.rhino.Rhino.Builder.setAccessKey
Builder setAccessKey(String accessKey)
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:206
ai.picovoice.rhino.Rhino.getSampleRate
native int getSampleRate()
ai.picovoice.rhinodemo.RhinoTest.testInitFailWithInvalidSensitivity
void testInitFailWithInvalidSensitivity()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:245
ai.picovoice.rhinodemo.RhinoTest.extractAssetsRecursively
void extractAssetsRecursively(String path)
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:359
ai.picovoice.rhinodemo.RhinoTest.testProcWithinContext
void testProcWithinContext()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:278
ai.picovoice.rhinodemo.RhinoTest.testInitFailWithNoAccessKey
void testInitFailWithNoAccessKey()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:182
ai.picovoice.rhinodemo.RhinoTest.TearDown
void TearDown()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:50
f
f
ai.picovoice.rhinodemo.RhinoTest
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:40
ai.picovoice.rhino.RhinoInference
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/RhinoInference.java:15
ai.picovoice.rhinodemo.RhinoTest.testInitSuccessWithCustomModelPath
void testInitSuccessWithCustomModelPath()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:82
ai
ai.picovoice.rhino
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoActivationException.java:11
ai.picovoice.rhino.Rhino.getVersion
native String getVersion()
ai.picovoice
ai.picovoice.rhino.Rhino
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:35
ai.picovoice.rhino.Rhino.Builder.setRequireEndpoint
Builder setRequireEndpoint(boolean requireEndpoint)
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:226
ai.picovoice.rhino.Rhino.Builder.setModelPath
Builder setModelPath(String modelPath)
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:211
ai.picovoice.rhino.Rhino.Builder
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:199
ai.picovoice.rhinodemo.RhinoTest.extractTestFile
void extractTestFile(String filepath)
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:379
ai.picovoice.rhino.Rhino.getInference
RhinoInference getInference()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:120
ai.picovoice.rhinodemo.RhinoTest.Setup
void Setup()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:55
ai.picovoice.rhino.RhinoInference.getIsUnderstood
boolean getIsUnderstood()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/RhinoInference.java:26
ai.picovoice.rhinodemo.RhinoTest.testInitSuccessWithCustomSensitivity
void testInitSuccessWithCustomSensitivity()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:96
ai.picovoice.rhinodemo.RhinoTest.testInitSuccessES
void testInitSuccessES()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:136
ai.picovoice.rhinodemo.RhinoTest.testInitSuccessWithRequireEndpointFalse
void testInitSuccessWithRequireEndpointFalse()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:109
ai.picovoice.rhinodemo.RhinoTest.testInitFailWithInvalidModelPath
void testInitFailWithInvalidModelPath()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:227
ai.picovoice.rhino.Rhino.Builder.build
Rhino build(Context context)
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:266
ai.picovoice.rhino.Rhino.getFrameLength
native int getFrameLength()
ai.picovoice.rhinodemo.RhinoTest.testInitFailWithInvalidContextPath
void testInitFailWithInvalidContextPath()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:211
ai.picovoice.rhinodemo.RhinoTest.testInitFailWithWrongPlatform
void testInitFailWithWrongPlatform()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:262
ai.picovoice.rhino.Rhino.delete
void delete()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:71
ai.picovoice.rhino.RhinoInference.getSlots
Map< String, String > getSlots()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/RhinoInference.java:34
ai.picovoice.rhinodemo.RhinoTest.testInitFailWithMismatchedLanguage
void testInitFailWithMismatchedLanguage()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:164
ai.picovoice.rhino.Rhino.getContextInformation
String getContextInformation()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/Rhino.java:157
ai.picovoice.rhinodemo.RhinoTest.testInitSuccessDE
void testInitSuccessDE()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:122
ai.picovoice.rhinodemo.RhinoTest.testProcOutOfContext
void testProcOutOfContext()
Definition: demo/android/Activity/rhino-activity-demo-app/src/androidTest/java/ai/picovoice/rhinodemo/RhinoTest.java:322


picovoice_driver
Author(s):
autogenerated on Fri Apr 1 2022 02:14:50