All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.nuecho.rivr.voicexml.test.VoiceXmlTestDialogueChannel Maven / Gradle / Ivy

Go to download

Rivr is a lightweight open-source dialogue engine enabling flexible VoiceXML web application development for the agile Java developer and enterprise.

There is a newer version: 1.0.13
Show newest version
/*
 * Copyright (c) 2013 Nu Echo Inc. All rights reserved.
 */

package com.nuecho.rivr.voicexml.test;

import java.util.*;

import javax.json.*;

import com.nuecho.rivr.core.channel.*;
import com.nuecho.rivr.core.channel.synchronous.step.*;
import com.nuecho.rivr.core.test.*;
import com.nuecho.rivr.core.util.*;
import com.nuecho.rivr.voicexml.dialogue.*;
import com.nuecho.rivr.voicexml.turn.first.*;
import com.nuecho.rivr.voicexml.turn.input.*;
import com.nuecho.rivr.voicexml.turn.last.*;
import com.nuecho.rivr.voicexml.turn.output.*;
import com.nuecho.rivr.voicexml.util.json.*;

/**
 * Implementation of {@link VoiceXmlDialogueChannel} intended for unit testing.
 * This class allows a unit test method to be the controller of the dialogue
 * channel by simulating results from the VoiceXML platform (i.e. DTMF
 * recognition, events, recording, etc).
 * 

* In addition to all methods of {@link TestDialogueChannel}, this class adds * VoiceXML-related functions. * * @author Nu Echo Inc. */ public class VoiceXmlTestDialogueChannel extends TestDialogueChannel { private static final String CONFIDENCE_PROPERTY = "confidence"; private static final String INTERPRETATION_PROPERTY = "interpretation"; private static final String INPUTMODE_PROPERTY = "inputmode"; private static final String UTTERANCE_PROPERTY = "utterance"; public VoiceXmlTestDialogueChannel(String name, Duration defaultTimeout) { super(name, defaultTimeout); } public final Interaction getLastInteraction() { OutputTurn lastOutputTurn = getLastStepAsOutputTurn(); if (lastOutputTurn instanceof Interaction) return (Interaction) getLastStepAsOutputTurn(); throw new AssertionError("Last output turn was not an interaction. Last step=" + lastOutputTurn); } public final Step processDtmfRecognition(String dtmfString) { return processDtmfRecognition(dtmfString, JsonValue.NULL, null); } public final Step processDtmfRecognition(String dtmfString, JsonValue interpretation, MarkInfo markInfo) { JsonArrayBuilder builder = JsonUtils.createArrayBuilder(); JsonUtils.add(builder, createDtmfHypothesis(dtmfString, interpretation)); return processRecognition(new RecognitionInfo(builder.build(), markInfo)); } public final Step processRecognition(JsonArray recognitionResult) { return processRecognition(new RecognitionInfo(recognitionResult, null)); } public final Step processRecognition(RecognitionInfo recognitionInfo) { VoiceXmlInputTurn inputTurn = new VoiceXmlInputTurn(); inputTurn.setRecognitionInfo(recognitionInfo); return processInputTurn(inputTurn); } public final Step processScript(JsonValue value) { return processValue(value); } public Step processValue(JsonValue value) { VoiceXmlInputTurn inputTurn = new VoiceXmlInputTurn(); inputTurn.setJsonValue(value); return processInputTurn(inputTurn); } public final Step processRecording(RecordingInfo recordingInfo) { VoiceXmlInputTurn inputTurn = new VoiceXmlInputTurn(); inputTurn.setRecordingInfo(recordingInfo); return processInputTurn(inputTurn); } public final Step processNoAction() { return processInputTurn(new VoiceXmlInputTurn()); } public final Step processNoMatch() { return processEvent(VoiceXmlEvent.NO_MATCH); } public final Step processNoInput() { return processEvent(VoiceXmlEvent.NO_INPUT); } public final Step processMaxSpeechTimeout() { return processEvent(VoiceXmlEvent.MAX_SPEECH_TIMEOUT); } public final Step processHangup() { return processEvent(VoiceXmlEvent.CONNECTION_DISCONNECT_HANGUP); } public final Step processPlatformError() { return processEvent(VoiceXmlEvent.ERROR); } public final Step processTransferResult(TransferStatusInfo transferStatusInfo) { VoiceXmlInputTurn inputTurn = new VoiceXmlInputTurn(); inputTurn.setTransferResult(transferStatusInfo); return processInputTurn(inputTurn); } public final Step processTransferInvalidDestinationResult() { return processEvent(VoiceXmlEvent.ERROR_CONNECTION_BAD_DESTINATION); } public final Step processTransferDisconnect() { return processEvent(VoiceXmlEvent.CONNECTION_DISCONNECT_TRANSFER); } public final Step processEvent(String event) { VoiceXmlInputTurn inputTurn = new VoiceXmlInputTurn(); inputTurn.setEvents(createSingleEventList(event)); return processInputTurn(inputTurn); } private ArrayList createSingleEventList(String eventName) { VoiceXmlEvent event = new VoiceXmlEvent(eventName, null); return new ArrayList(Collections.singleton(event)); } private JsonObject createDtmfHypothesis(String dtmfString, JsonValue interpretation) { JsonObjectBuilder builder = JsonUtils.createObjectBuilder(); JsonUtils.add(builder, UTTERANCE_PROPERTY, dtmfString); JsonUtils.add(builder, INPUTMODE_PROPERTY, "dtmf"); JsonUtils.add(builder, INTERPRETATION_PROPERTY, interpretation); builder.add(CONFIDENCE_PROPERTY, 1.0); return builder.build(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy