com.nuecho.rivr.voicexml.test.VoiceXmlTestDialogueChannel Maven / Gradle / Ivy
Show all versions of rivr-voicexml Show documentation
/*
* 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();
}
}