WIP.
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/dialog/NCDialogSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/dialog/NCDialogSpec.scala
index 49fe2d2..a6647c9 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/dialog/NCDialogSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/dialog/NCDialogSpec.scala
@@ -17,14 +17,12 @@
package org.apache.nlpcraft.model.dialog
-import java.util
-import java.util.Collections
-
import org.apache.nlpcraft.model.{NCElement, NCIntent, NCModel, NCResult}
import org.apache.nlpcraft.{NCTestContext, NCTestEnvironment}
-import org.junit.jupiter.api.Assertions.{assertFalse, assertTrue}
+import org.junit.jupiter.api.Assertions.{assertEquals, assertTrue}
import org.junit.jupiter.api.Test
+import java.util
import scala.collection.JavaConverters._
/**
@@ -35,27 +33,20 @@
override def getName: String = this.getClass.getSimpleName
override def getVersion: String = "1.0.0"
- private def mkElement(id: String): NCElement = new NCElement {
- override def getId: String = id
- override def getSynonyms: util.List[String] = Collections.singletonList(id)
- }
+ override def getElements: util.Set[NCElement] =
+ (for (ch ← 'a' to 'y'; i ← 1 to 9) yield new NCElement { override def getId: String = s"$ch$i" }).toSet.asJava
- override def getElements: util.Set[NCElement] = Set(mkElement("test1"), mkElement("test2")).asJava
+ @NCIntent("intent=onA1 term~{id == 'a1'}")
+ def onA1(): NCResult = NCResult.text("ok")
- @NCIntent("intent=test1 term~{id == 'test1'}")
- def onTest1(): NCResult = NCResult.text("ok")
+ @NCIntent("intent=onA2 flow='^(?:onA1)(^:onA1)*$' term~{id == 'a2'}")
+ def onA2(): NCResult = NCResult.text("ok")
- /**
- * 'test2' requires one and only one 'test1' immediately before in history.
- */
- @NCIntent("intent=test2 flow='^(?:test1)(^:test1)*$' term~{id == 'test2'}")
- def onTest2(): NCResult = NCResult.text("ok")
+ @NCIntent("intent=onA3 flow='onA1' term~{id == 'a3'}")
+ def onA3(): NCResult = NCResult.text("ok")
- /**
- * 'test3' requires 'test1' immediately before in history.
- */
- @NCIntent("intent=test3 flow='test1$' term={id == 'test3'}")
- def onTest3(): NCResult = NCResult.text("ok")
+ @NCIntent("intent=onA4 flow='onA1 onA1' term~{id == 'a4'}")
+ def onA4(): NCResult = NCResult.text("ok")
}
/**
@@ -63,62 +54,53 @@
*/
@NCTestEnvironment(model = classOf[NCDialogSpecModel], startClient = true)
class NCDialogSpec extends NCTestContext {
- @Test
- @throws[Exception]
- private[dialog] def test2(): Unit = {
+ private def f(pairs: (String, String)*): Unit = {
val cli = getClient
- def flow(): Unit = {
- // FAIL: there isn't 'test1' before for 'test2' to match.
- assertFalse(cli.ask("test2").isOk)
+ def go(): Unit =
+ pairs.zipWithIndex.foreach { case ((txt, intentId), idx) ⇒
+ val res = cli.ask(txt)
- // OK: 'test1' is always ok.
- assertTrue(cli.ask("test1").isOk)
+ if (intentId == null)
+ assertTrue(
+ res.isFailed,
+ s"Unexpected success [request=$txt, resultIntent=${res.getIntentId}, idx=$idx]"
+ )
+ else {
+ assertTrue(
+ res.isOk,
+ s"Unexpected error [request=$txt, expectedIntent=$intentId, idx=$idx]"
+ )
+ assertEquals(
+ intentId, res.getIntentId,
+ s"Expected: $intentId, but got: ${res.getIntentId}, idx=$idx"
+ )
+ }
+ }
- // OK: 'test2' matches as there is one 'test1' before.
- assertTrue(cli.ask("test2").isOk)
-
- // OK: 'test1' is always ok.
- assertTrue(cli.ask("test1").isOk)
- assertTrue(cli.ask("test1").isOk)
-
- // FAIL: there are too many (2) 'test1' before in history,
- // 'test2' requires one and only one 'test1' to match.
- assertFalse(cli.ask("test2").isOk)
- }
-
- flow()
+ go()
cli.clearConversation()
cli.clearDialog()
- flow()
+ go()
}
@Test
@throws[Exception]
- private[dialog] def test3(): Unit = {
- val cli = getClient
+ private[dialog] def test1(): Unit = f(
+ "a2" → null, "a1" → "onA1", "a2" → "onA2", "a1" → "onA1", "a1" → "onA1", "a2" -> null
+ )
- def flow(): Unit = {
- // No required history.
- assertFalse(cli.ask("test3").isOk)
- // Always OK.
- assertTrue(cli.ask("test1").isOk)
- // OK, required history.
- assertFalse(cli.ask("test3").isOk)
- // Always OK.
- assertTrue(cli.ask("test1").isOk)
- // Too much history.
- assertFalse(cli.ask("test3").isOk)
- }
+ @Test
+ @throws[Exception]
+ private[dialog] def test2(): Unit = f(
+ "a3" → null, "a1" → "onA1", "a3" → "onA3", "a1" → "onA1", "a1" → "onA1", "a3" -> null
+ )
- flow()
-
- cli.clearConversation()
- cli.clearDialog()
-
- flow()
- }
-
-}
+ @Test
+ @throws[Exception]
+ private[dialog] def test3(): Unit = f(
+ "a4" → null, "a1" → "onA1", "a1" → "onA1", "a4" → "onA4", "a4" → null
+ )
+}
\ No newline at end of file