This is an automated email from the ASF dual-hosted git repository.
sergeykamov pushed a commit to branch NLPCRAFT-16
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-16 by this push:
new 938919f WIP.
938919f is described below
commit 938919f5a60fa3195c36cc8efc1d86535e1e29ed
Author: Sergey Kamov <[email protected]>
AuthorDate: Mon Mar 16 21:29:24 2020 +0300
WIP.
---
.../mgrs/nlp/enrichers/NCEnricherBaseSpec.scala | 19 +-
.../mgrs/nlp/enrichers/NCEnrichersTestBeans.scala | 258 ++++++++++++++++-----
.../nlp/enrichers/limit/NCEnricherLimitSpec.scala | 6 +-
3 files changed, 214 insertions(+), 69 deletions(-)
diff --git
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnricherBaseSpec.scala
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnricherBaseSpec.scala
index cb8319e..0103ae3 100644
---
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnricherBaseSpec.scala
+++
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnricherBaseSpec.scala
@@ -19,6 +19,7 @@ package org.apache.nlpcraft.probe.mgrs.nlp.enrichers
import org.apache.nlpcraft.model.tools.test.{NCTestClient, NCTestClientBuilder}
import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe
+
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.{AfterEach, BeforeEach}
import org.scalatest.Assertions
@@ -31,9 +32,9 @@ class NCEnricherBaseSpec {
@BeforeEach
private[enrichers] def setUp(): Unit = {
- NCEmbeddedProbe.start(classOf[NCEnricherTestModel])
+ //NCEmbeddedProbe.start(classOf[NCEnricherTestModel])
- client = new NCTestClientBuilder().newBuilder.build
+ client = new
NCTestClientBuilder().newBuilder.setResponseLog(false).build
client.open(NCEnricherTestModel.ID)
}
@@ -50,15 +51,15 @@ class NCEnricherBaseSpec {
private[enrichers] def checkExists(txt: String, expToks: NCTestToken*):
Unit = {
val res = client.ask(txt)
- assertTrue(res.isOk, s"Result is not successful, error:
${res.getResultError.get()}")
- assertTrue(res.getResult.isPresent, s"Result is not successful, error:
${res.getResultError.get()}")
+ assertTrue(res.isOk, s"Result is not successful, result: $res")
+ assertTrue(res.getResult.isPresent, s"Result is not successful,
result: $res")
val sens = NCTestSentence.deserialize(res.getResult.get())
val expSen = NCTestSentence(expToks)
assertTrue(
sens.exists(_ == expSen),
- s"Required sentence not found [request=$txt, expected=$expSen,
found=${sens.mkString("\n")}]"
+ s"Required sentence not found [request=$txt, \nexpected=\n$expSen,
\nfound=\n${sens.mkString("\n")}\n]"
)
}
@@ -71,8 +72,8 @@ class NCEnricherBaseSpec {
private[enrichers] def checkAll(txt: String, expToks:
Seq[Seq[NCTestToken]]): Unit = {
val res = client.ask(txt)
- assertTrue(res.isOk, s"Result is not successful, error:
${res.getResultError.get()}")
- assertTrue(res.getResult.isPresent, s"Result is not successful, error:
${res.getResultError.get()}")
+ assertTrue(res.isOk, s"Result is not successful, result: $res")
+ assertTrue(res.getResult.isPresent, s"Result is not successful,
result: $res")
val expSens = expToks.map(NCTestSentence(_))
val sens = NCTestSentence.deserialize(res.getResult.get())
@@ -85,7 +86,7 @@ class NCEnricherBaseSpec {
for (expSen ← expSens)
require(
sens.exists(_ == expSen),
- s"Required sentence not found [request=$txt, expected=$expSen,
found=${sens.mkString("\n")}]"
+ s"Required sentence not found [request=$txt,
\nexpected=\n$expSen, \nfound=\n${sens.mkString("\n")}\n]"
)
}
@@ -115,6 +116,6 @@ class NCEnricherBaseSpec {
Assertions.fail(s"Failed ${errs.size} tests. See errors list
above.")
}
else
- println("All tests passed")
+ println(s"All tests passed: ${tests.size}")
}
}
diff --git
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
index fa24df6..08ff8e7 100644
---
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
+++
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/NCEnrichersTestBeans.scala
@@ -19,200 +19,344 @@ package org.apache.nlpcraft.probe.mgrs.nlp.enrichers
import java.io.{ByteArrayInputStream, ByteArrayOutputStream,
ObjectInputStream, ObjectOutputStream}
import java.nio.charset.StandardCharsets.UTF_8
-import java.util.Base64
+import java.util.{Base64, Optional}
import org.apache.nlpcraft.model.NCToken
import resource.managed
+import scala.compat.java8.OptionConverters._
+import scala.collection.JavaConverters._
+
/**
* Tests infrastructure beans.
*/
sealed trait NCTestToken {
def id: String
- def origText: String
+ def text: String
def isStop: Boolean = false
}
// Simplified set of tokens data. Added only fields for validation.
// Server enrichers.
-case class NCTestNlpToken(origText: String, override val isStop: Boolean)
extends NCTestToken {
+case class NCTestNlpToken(text: String, override val isStop: Boolean) extends
NCTestToken {
+ require(text != null)
+
override def id: String = "nlpcraft:nlp"
+ override def toString: String = s"nlp[text=$text, isStop=$isStop]"
}
// Skip non-deteministric properties verification.
-case class NCTestDateToken(origText: String) extends NCTestToken {
+case class NCTestDateToken(text: String) extends NCTestToken {
+ require(text != null)
+
override def id: String = "nlpcraft:date"
+ override def toString: String = s"date[text=$text, isStop=$isStop]"
}
-case class NCTestCoordinateToken(origText: String, latitude: Double,
longitude: Double) extends NCTestToken {
+case class NCTestCoordinateToken(text: String, latitude: Double, longitude:
Double) extends NCTestToken {
+ require(text != null)
+
override def id: String = "nlpcraft:coordinate"
+ override def toString: String = s"coordinate[text=$text,
latitude=$longitude, latitude=$longitude]"
}
-case class NCTestNumericToken(origText: String, from: Double, to: Double)
extends NCTestToken {
+case class NCTestNumericToken(text: String, from: Double, to: Double) extends
NCTestToken {
+ require(text != null)
+
override def id: String = "nlpcraft:num"
+ override def toString: String = s"num[text=$text, from=$from, to=$to]"
}
-case class NCTestCityToken(origText: String, city: String) extends NCTestToken
{
+case class NCTestCityToken(text: String, city: String) extends NCTestToken {
+ require(text != null)
+ require(city != null)
+
override def id: String = "nlpcraft:city"
+
+ override def toString: String = s"city[text=$text, city=$city]"
}
-case class NCTestCountryToken(origText: String, country: String) extends
NCTestToken {
+case class NCTestCountryToken(text: String, country: String) extends
NCTestToken {
+ require(text != null)
+ require(country != null)
+
override def id: String = "nlpcraft:country"
+ override def toString: String = s"country[text=$text, country=$country]"
}
-case class NCTestRegionToken(origText: String, region: String) extends
NCTestToken {
+case class NCTestRegionToken(text: String, region: String) extends NCTestToken
{
+ require(text != null)
+ require(region != null)
+
override def id: String = "nlpcraft:region"
+ override def toString: String = s"region[text=$region, city=$region]"
}
-case class NCTestContinentToken(origText: String, continent: String) extends
NCTestToken {
+case class NCTestContinentToken(text: String, continent: String) extends
NCTestToken {
+ require(text != null)
+ require(continent != null)
+
override def id: String = "nlpcraft:continent"
+ override def toString: String = s"continent[text=$text,
continent=$continent]"
}
-case class NCTestSubcontinentToken(origText: String, city: String) extends
NCTestToken {
+case class NCTestSubcontinentToken(text: String, subcontinent: String) extends
NCTestToken {
+ require(text != null)
+ require(subcontinent != null)
+
override def id: String = "nlpcraft:subcontinent"
+ override def toString: String = s"subcontinent[text=$text,
subcontinent=$subcontinent]"
}
-case class NCTestMetroToken(origText: String, metro: String) extends
NCTestToken {
+case class NCTestMetroToken(text: String, metro: String) extends NCTestToken {
+ require(text != null)
+ require(metro != null)
+
override def id: String = "nlpcraft:metro"
+ override def toString: String = s"metro[text=$text, metro=$metro]"
}
// Probe enrichers.
case class NCTestSortToken(
- origText: String,
+ text: String,
subjNotes: Seq[String],
subjIndexes: Seq[Int],
byNotes: Option[Seq[String]] = None,
byIndexes: Option[Seq[Int]] = None,
asc: Option[Boolean] = None
) extends NCTestToken {
+ require(text != null)
+ require(subjNotes != null)
+ require(subjNotes.nonEmpty)
+ require(subjIndexes != null)
+ require(subjIndexes.nonEmpty)
+ require(byNotes != null)
+ require(byNotes.isEmpty || byNotes.get.nonEmpty)
+ require(byIndexes != null)
+ require(byIndexes.isEmpty || byIndexes.get.nonEmpty)
+ require(asc != null)
+
override def id: String = "nlpcraft:sort"
+ override def toString: String = {
+ var s = s"sort" +
+ s"[text=$text" +
+ s", subjNotes=[${subjNotes.mkString(",")}]" +
+ s", subjIndexes=[${subjIndexes.mkString(",")}]"
+
+ if (byNotes.isDefined)
+ s = s"$s" +
+ s", byNotes=[${byNotes.get.mkString(",")}]" +
+ s", byIndexes=[${byIndexes.get.mkString(",")}]"
+
+ if (asc.isDefined)
+ s = s"$s, asc=$asc"
+
+ s = s"$s]"
+
+ s
+ }
}
object NCTestSortToken {
def apply(
- origText: String,
+ text: String,
subjNotes: Seq[String],
subjIndexes: Seq[Int],
asc: Boolean
- ): NCTestSortToken = new NCTestSortToken(origText, subjNotes, subjIndexes,
None, None, Some(asc))
+ ): NCTestSortToken = new NCTestSortToken(text, subjNotes, subjIndexes,
None, None, Some(asc))
def apply(
- origText: String,
+ text: String,
subjNote: String,
subjIndex: Int,
asc: Boolean
- ): NCTestSortToken = new NCTestSortToken(origText, Seq(subjNote),
Seq(subjIndex), None, None, Some(asc))
+ ): NCTestSortToken = new NCTestSortToken(text, Seq(subjNote),
Seq(subjIndex), None, None, Some(asc))
def apply(
- origText: String,
+ text: String,
subjNote: String,
subjIndex: Int
- ): NCTestSortToken = new NCTestSortToken(origText, Seq(subjNote),
Seq(subjIndex), None, None, None)
+ ): NCTestSortToken = new NCTestSortToken(text, Seq(subjNote),
Seq(subjIndex), None, None, None)
def apply(
- origText: String,
+ text: String,
subjNotes: Seq[String],
subjIndexes: Seq[Int],
byNotes: Seq[String],
byIndexes: Seq[Int]
- ): NCTestSortToken = new NCTestSortToken(origText, subjNotes, subjIndexes,
Some(byNotes), Some(byIndexes), None)
+ ): NCTestSortToken = new NCTestSortToken(text, subjNotes, subjIndexes,
Some(byNotes), Some(byIndexes), None)
def apply(
- origText: String,
+ text: String,
subjNote: String,
subjIndex: Int,
byNote: String,
byIndex: Int): NCTestSortToken =
- new NCTestSortToken(origText, Seq(subjNote), Seq(subjIndex),
Some(Seq(byNote)), Some(Seq(byIndex)), None)
+ new NCTestSortToken(text, Seq(subjNote), Seq(subjIndex),
Some(Seq(byNote)), Some(Seq(byIndex)), None)
def apply(
- origText: String,
+ text: String,
subjNote: String,
subjIndex: Int,
byNote: String,
byIndex: Int,
asc: Boolean): NCTestSortToken =
- new NCTestSortToken(origText, Seq(subjNote), Seq(subjIndex),
Some(Seq(byNote)), Some(Seq(byIndex)), Some(asc))
+ new NCTestSortToken(text, Seq(subjNote), Seq(subjIndex),
Some(Seq(byNote)), Some(Seq(byIndex)), Some(asc))
}
-case class NCTestRelationToken(origText: String, `type`: String, indexes:
Seq[Int], note: String) extends NCTestToken {
+case class NCTestRelationToken(text: String, `type`: String, indexes:
Seq[Int], note: String) extends NCTestToken {
+ require(text != null)
+ require(`type` != null)
+ require(indexes != null)
+ require(indexes.nonEmpty)
+ require(note != null)
+
override def id: String = "nlpcraft:relation"
+ override def toString: String =
+ s"relation" +
+ s"[text=$text" +
+ s", type=${`type`}" +
+ s", indexes=[${indexes.mkString(",")}]" +
+ s", note=$note]"
}
-case class NCTestAggregationToken(origText: String, `type`: String, indexes:
Seq[Int], note: String) extends NCTestToken {
+case class NCTestAggregationToken(text: String, `type`: String, indexes:
Seq[Int], note: String) extends NCTestToken {
+ require(text != null)
+ require(`type` != null)
+ require(indexes != null)
+ require(indexes.nonEmpty)
+ require(note != null)
+
override def id: String = "nlpcraft:aggregation"
+ override def toString: String =
+ s"aggregation" +
+ s"[text=$text" +
+ s", type=${`type`}" +
+ s", indexes=[${indexes.mkString(",")}]" +
+ s", note=$note]"
}
case class NCTestLimitToken(
- origText: String,
+ text: String,
limit: Double,
indexes: Seq[Int],
note: String,
asc: Option[Boolean] = None
) extends NCTestToken {
+ require(text != null)
+ require(indexes != null)
+ require(indexes.nonEmpty)
+ require(note != null)
+ require(asc != null)
+
override def id: String = "nlpcraft:limit"
+ override def toString: String = {
+ var s = s"limit" +
+ s"[text=$text" +
+ s", limit=$limit" +
+ s", indexes=[${indexes.mkString(",")}]" +
+ s", note=$note]"
+
+ if (asc.isDefined)
+ s = s"$s, asc=$asc"
+
+ s = s"$s]"
+
+ s
+ }
}
-case class NCTestUserToken(origText: String, id: String) extends NCTestToken
+case class NCTestUserToken(text: String, id: String) extends NCTestToken {
+ require(text != null)
+ require(id != null)
+ override def toString: String = s"user [text=$text, id=$id]"}
// Token and sentence beans and utilities.
object NCTestToken {
def apply(t: NCToken): NCTestToken = {
val txt = t.getOriginalText
+ val id = t.getId
- t.getId match {
+ id match {
case "nlpcraft:nlp" ⇒ NCTestNlpToken(txt, t.isStopWord)
case "nlpcraft:coordinate" ⇒
- NCTestCoordinateToken(txt, latitude = t.meta("latitude"),
longitude = t.meta("longitude"))
- case "nlpcraft:num" ⇒ NCTestNumericToken(txt, from =
t.meta("from"), to = t.meta("to"))
+ NCTestCoordinateToken(
+ txt,
+ latitude = t.meta("nlpcraft:coordinate:latitude"),
+ longitude = t.meta("nlpcraft:coordinate:longitude")
+ )
+ case "nlpcraft:num" ⇒ NCTestNumericToken(
+ txt,
+ from = t.meta("nlpcraft:num:from"),
+ to = t.meta("nlpcraft:num:to")
+ )
case "nlpcraft:date" ⇒ NCTestDateToken(txt)
- case "nlpcraft:city" ⇒ NCTestCityToken(txt, city = t.meta("city"))
- case "nlpcraft:region" ⇒ NCTestRegionToken(txt, region =
t.meta("region"))
- case "nlpcraft:country" ⇒ NCTestCountryToken(txt, country =
t.meta("country"))
- case "nlpcraft:subcontinent" ⇒ NCTestSubcontinentToken(txt, city =
t.meta("subcontinent"))
- case "nlpcraft:continent" ⇒ NCTestContinentToken(txt, continent =
t.meta("continent"))
- case "nlpcraft:metro" ⇒ NCTestMetroToken(txt, metro =
t.meta("metro"))
+ case "nlpcraft:city" ⇒ NCTestCityToken(txt, city =
t.meta("nlpcraft:city:city"))
+ case "nlpcraft:region" ⇒ NCTestRegionToken(txt, region =
t.meta("nlpcraft:region:region"))
+ case "nlpcraft:country" ⇒ NCTestCountryToken(txt, country =
t.meta("nlpcraft:country:country"))
+ case "nlpcraft:subcontinent" ⇒
+ NCTestSubcontinentToken(txt, subcontinent =
t.meta("nlpcraft:subcontinent:subcontinent"))
+ case "nlpcraft:continent" ⇒
+ NCTestContinentToken(txt, continent =
t.meta("nlpcraft:continent:continent"))
+ case "nlpcraft:metro" ⇒ NCTestMetroToken(txt, metro =
t.meta("nlpcraft:metro:metro"))
case "nlpcraft:sort" ⇒
- val subjNotes: Seq[String] = t.meta("subjnotes")
- val subjIndexes: Seq[Int] = t.meta("subjindexes")
- val byNotes: Option[Seq[String]] = t.meta("bynotes")
- val byIndexes: Option[Seq[Int]] = t.meta("byindexes")
- val asc: Option[Boolean] = t.meta("asc")
-
- NCTestSortToken(txt, subjNotes, subjIndexes, byNotes,
byIndexes, asc)
+ val subjNotes: java.util.List[String] =
t.meta("nlpcraft:sort:subjnotes")
+ val subjIndexes: java.util.List[Int] =
t.meta("nlpcraft:sort:subjindexes")
+ val byNotes: Optional[java.util.List[String]] =
t.metaOpt("nlpcraft:sort:bynotes")
+ val byIndexes: Optional[java.util.List[Int]] =
t.metaOpt("nlpcraft:sort:byindexes")
+ val asc: Optional[Boolean] = t.metaOpt("nlpcraft:sort:asc")
+
+ def toOpt[T](lOpt: Optional[java.util.List[T]]):
Option[Seq[T]] =
+ lOpt.asScala match {
+ case Some(l) ⇒ Some(l.asScala)
+ case None ⇒ None
+ }
+
+ NCTestSortToken(txt, subjNotes.asScala, subjIndexes.asScala,
toOpt(byNotes), toOpt(byIndexes), asc.asScala)
case "nlpcraft:relation" ⇒
+ val indexes: java.util.List[Int] =
t.meta("nlpcraft:relation:indexes")
+
NCTestRelationToken(
txt,
- `type` = t.meta("type"),
- indexes = t.meta("indexes"),
- note = t.meta("note")
+ `type` = t.meta("nlpcraft:relation:type"),
+ indexes = indexes.asScala,
+ note = t.meta("nlpcraft:relation:note")
)
case "nlpcraft:aggregation" ⇒
+ val indexes: java.util.List[Int] =
t.meta("nlpcraft:aggregation:indexes")
+
NCTestAggregationToken(
txt,
- `type` = t.meta("type"),
- indexes = t.meta("indexes"),
- note = t.meta("note")
+ `type` = t.meta("nlpcraft:aggregation:type"),
+ indexes = indexes.asScala,
+ note = t.meta("nlpcraft:aggregation:note")
)
case "nlpcraft:limit" ⇒
+ val indexes: java.util.List[Int] =
t.meta("nlpcraft:limit:indexes")
+ val asc: Optional[Boolean] = t.metaOpt("nlpcraft:sort:asc")
+
NCTestLimitToken(
txt,
- limit = t.meta("limit"),
- asc = t.meta("asc"),
- indexes = t.meta("indexes"),
- note = t.meta("note")
+ limit = t.meta("nlpcraft:limit:limit"),
+ indexes = indexes.asScala,
+ note = t.meta("nlpcraft:limit:note"),
+ asc.asScala
)
- case _ ⇒ throw new AssertionError(s"Unsupported token: ${t.getId}")
+ case _ ⇒
+ if (t.isUserDefined)
+ NCTestUserToken(txt, id)
+ else
+ throw new AssertionError(s"Unsupported token: $id")
}
}
- def apply(origText: String, isStop: Boolean): NCTestToken =
NCTestNlpToken(origText, isStop)
+ def apply(text: String, isStop: Boolean): NCTestToken =
NCTestNlpToken(text, isStop)
}
case class NCTestSentence(tokens: Seq[NCTestToken]) {
diff --git
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCEnricherLimitSpec.scala
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCEnricherLimitSpec.scala
index 1e87143..ac5468d 100644
---
a/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCEnricherLimitSpec.scala
+++
b/src/test/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/limit/NCEnricherLimitSpec.scala
@@ -17,7 +17,7 @@
package org.apache.nlpcraft.probe.mgrs.nlp.enrichers.limit
-import org.apache.nlpcraft.probe.mgrs.nlp.enrichers.{NCEnricherBaseSpec,
NCTestLimitToken, NCTestUserToken}
+import org.apache.nlpcraft.probe.mgrs.nlp.enrichers.{NCEnricherBaseSpec,
NCTestLimitToken ⇒ limit, NCTestUserToken ⇒ user}
import org.junit.jupiter.api.Test
/**
@@ -32,8 +32,8 @@ class NCEnricherLimitSpec extends NCEnricherBaseSpec {
def test(): Unit = {
checkExists(
"top 5 A",
- NCTestLimitToken("top 5", limit = 5, indexes = Seq(1), note = "A",
asc = Some(true)),
- NCTestUserToken("A", "A")
+ limit("top 5", limit = 5, indexes = Seq(1), note = "A", asc =
Some(true)),
+ user("A", "A")
)
}
}