Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ private[parsing] trait ApplicationParser {

private def appInput[u: P]: P[Input] = {
P(
location ~ inputAliases ~/ identifier ~ acquisitionAliases ~ typeRef ~
location ~ inputAliases ~/ identifier ~/ acquisitionAliases ~/ typeRef ~
inputDefinitions ~ briefly ~ description
).map { case (loc, inputAlias, id, acquisitionAlias, putIn, inputs, brief, description) =>
Input(loc, inputAlias, id, acquisitionAlias, putIn, inputs, brief, description)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,7 @@ private[parsing] trait CommonParser extends NoWhiteSpaceParsers {
"window",
"section",
"tab",
"flow",
"form"
"flow"
).!
)
}
Expand All @@ -262,7 +261,15 @@ private[parsing] trait CommonParser extends NoWhiteSpaceParsers {

def inputAliases[u: P]: P[String] = {
P(
StringIn(Keywords.input, "form", "text", "button", "picklist", "selector", "menu").!
StringIn(
Keywords.input,
"form",
"text",
"button",
"picklist",
"selector",
"menu"
).!
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import com.reactific.riddl.passes.{PassInput, PassesOutput}
import java.nio.file.Path

/** Unit Tests For the ResolutionPass */
class ResolutionPassTest extends ResolvingTest {
class PathResolutionPassTest extends ResolvingTest {

"PathResolution" must {
"PathResolutionPass" must {
"resolve a full path" in {
val rpi =
"""domain A {
Expand Down Expand Up @@ -47,14 +47,14 @@ class ResolutionPassTest extends ResolvingTest {
|
|}""".stripMargin
parseAndResolve(RiddlParserInput(rpi)) { (in, outs) =>
val target = in.root.domains.head.domains.head.domains.head.types.head
val target: Type = in.root.domains.head.domains.head.domains.head.types.head
val parent = in.root.domains.head.domains.head.types.head
val pid = parent.typ.asInstanceOf[AliasedTypeExpression].pathId
val resolution = outs.outputOf[ResolutionOutput](ResolutionPass.name).get
resolution.refMap.definitionOf[Type](pid, parent) match {
case Some(resolved) =>
resolved mustBe (target)
case None => fail(s"${pid} not resolved")
resolved mustBe target
case None => fail(s"$pid not resolved")
}
}
}
Expand All @@ -67,13 +67,13 @@ class ResolutionPassTest extends ResolvingTest {
|}
|""".stripMargin
parseAndResolve(RiddlParserInput(input)) { (in, outs) =>
val target = in.root.domains.head.types.find(_.id.value == "Top").get
val parent = in.root.domains.head.types.find(_.id.value == "aTop").get
val target: Type = in.root.domains.head.types.find(_.id.value == "Top").get
val parent: Type = in.root.domains.head.types.find(_.id.value == "aTop").get
val pid = parent.typ.asInstanceOf[AliasedTypeExpression].pathId
val resolution = outs.outputOf[ResolutionOutput](ResolutionPass.name).get
resolution.refMap.definitionOf[Type](pid, parent) match {
case Some(resolvedDef) =>
resolvedDef mustBe (target)
resolvedDef mustBe target
case None =>
fail(s"${pid.format} not resolved")
}
Expand Down Expand Up @@ -188,15 +188,15 @@ class ResolutionPassTest extends ResolvingTest {
|}
|""".stripMargin
parseAndResolve(RiddlParserInput(input)) { (in, outs) =>
outs.getAllMessages mustBe (Messages.empty)
outs.getAllMessages mustBe Messages.empty
val Top = in.root.domains.head.types.head
val D = in.root.domains.head.domains.head.contexts.find(_.id.value == "D").get
val ATop = D.types.find(_.id.value == "ATop").get
val pid = ATop.typ.asInstanceOf[AliasedTypeExpression].pathId
val resolution = outs.outputOf[ResolutionOutput](ResolutionPass.name).get
resolution.refMap.definitionOf[Type](pid, ATop) match {
case Some(resolved) => resolved mustBe (Top)
case None => fail(s"${pid} not resolved")
case Some(resolved) => resolved mustBe Top
case None => fail(s"$pid not resolved")
}
}
}
Expand Down Expand Up @@ -331,12 +331,12 @@ class ResolutionPassTest extends ResolvingTest {
)
parseAndResolve(input) { (in, outs) =>
val entity = in.root.domains.head.contexts.head.entities.head
entity.getClass mustBe (classOf[Entity])
entity.getClass mustBe classOf[Entity]
val cid = in.root.domains.head.types.head
cid.getClass mustBe (classOf[Type])
cid.typ.getClass mustBe (classOf[UniqueId])
cid.getClass mustBe classOf[Type]
cid.typ.getClass mustBe classOf[UniqueId]
val pid = cid.typ.asInstanceOf[UniqueId].entityPath
pid.value mustBe (Seq("ReactiveBBQ", "Customer", "Customer"))
pid.value mustBe Seq("ReactiveBBQ", "Customer", "Customer")
val resolution = outs.outputOf[ResolutionOutput](ResolutionPass.name).get
resolution.refMap.definitionOf[Entity](pid, cid) match {
case Some(definition) =>
Expand Down Expand Up @@ -413,51 +413,5 @@ class ResolutionPassTest extends ResolvingTest {
fail("contained group not found")
}()
}

"handle issue #480" in {
pending
val rpi = RiddlParserInput(
"""domain ksoTemplateAppDomain {
| type EmailAddress = String(1,255)
| application ksoTemplateApp {
| type FirstName: String(2,64)
| type LastName: String(2,64)
| type Password: String(8,128)
|
| type SignupParameters is {
| firstName: FirstName,
| lastName: LastName,
| emailAddress: ksoTemplateAppDomain.EmailAddress,
| password: Password
| }
|
| command CreateUser is {user: ksoTemplateAppDomain.ksoTemplateApp.SignupParameters }
| command CreateUserUsingFacebook is {???}
| command CreateUserUsingGitHub is {???}
| command CreateUserUsingGmail is {???}
| command RedirectUserToSigninPage is {???}
|
| page SignupPage {
|
| form NewUserForm accepts ksoTemplateApp.SignupParameters {
| input firstName accepts ksoTemplateApp.FirstName
| input lastName accepts ksoTemplateApp.LastName
| input emailAddress accepts ksoTemplateAppDomain.EmailAddress
| input password accepts ksoTemplateApp.Password
| }
| button SignupButton initiates command ksoTemplateAppDomain.ksoTemplateApp.CreateUser
| button FacebookSignupButton initiates command ksoTemplateAppDomain.ksoTemplateApp.CreateUserUsingFacebook
| button GitHubSignupButton initiates command ksoTemplateAppDomain.ksoTemplateApp.CreateUserUsingGitHub
| button GmailSignupButton initiates command ksoTemplateAppDomain.ksoTemplateApp.CreateUserUsingGmail
| text SigninLink takes command ksoTemplateAppDomain.ksoTemplateApp.RedirectUserToSigninPage
| }
| }
|}
|""".stripMargin
)
parseAndResolve(rpi) { (pi: PassInput, po: PassesOutput) =>
po.messages.justErrors mustBe(empty)
}()
}
}
}
38 changes: 38 additions & 0 deletions testkit/src/test/input/issues/480.riddl
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
domain ksoTemplateAppDomain {

type EmailAddress = String(1,255)

application ksoTemplateApp {
type FirstName: String(2,64)
type LastName: String(2,64)
type Password: String(8,128)

record SignupParameters is {
firstName: FirstName,
lastName: LastName,
emailAddress: ksoTemplateAppDomain.EmailAddress,
password: Password
}

command CreateUser is {user: SignupParameters }
command CreateUserUsingFacebook is {???}
command CreateUserUsingGitHub is {???}
command CreateUserUsingGmail is {???}
command RedirectUserToSigninPage is {???}

page SignupPage {

form NewUserForm acquires record ksoTemplateApp.SignupParameters is {
input firstName accepts ksoTemplateApp.FirstName
input lastName accepts ksoTemplateApp.LastName
input emailAddress accepts ksoTemplateAppDomain.EmailAddress
input password accepts ksoTemplateApp.Password
}
button SignupButton initiates command ksoTemplateAppDomain.ksoTemplateApp.CreateUser
button FacebookSignupButton initiates command ksoTemplateAppDomain.ksoTemplateApp.CreateUserUsingFacebook
button GitHubSignupButton initiates command ksoTemplateAppDomain.ksoTemplateApp.CreateUserUsingGitHub
button GmailSignupButton initiates command ksoTemplateAppDomain.ksoTemplateApp.CreateUserUsingGmail
text SigninLink takes command ksoTemplateAppDomain.ksoTemplateApp.RedirectUserToSigninPage
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ class ReportedIssuesTest extends ValidatingTest {
showWarnings = false
)

def checkOne(fileName: String): Assertion = {
checkOne(fileName){
case Left(messages) =>
fail(messages.format)
case Right(result) =>
succeed
}
}

def checkOne(fileName: String)(checkResult: Either[Messages.Messages, PassesResult] => Assertion): Assertion = {
val file = Path.of(dir, fileName).toFile
val either = Riddl.parseAndValidate(file, options)
Expand Down Expand Up @@ -75,28 +84,16 @@ class ReportedIssuesTest extends ValidatingTest {
}
}
"406" in {
checkOne("406.riddl") {
case Left(messages) =>
fail(messages.format)
case Right(result) =>
succeed
}
checkOne("406.riddl")
}
"445" in {
checkOne("445.riddl") {
case Left(messages) =>
fail(messages.format)
case Right(result) =>
succeed
}
checkOne("445.riddl")
}
"447" in {
checkOne("447.riddl") {
case Left(messages) =>
fail(messages.format)
case Right(result) =>
succeed
}
checkOne("447.riddl")
}
"480" in {
checkOne("480.riddl")
}
}
}