blob: 3b1fe5ca916f126bdd0dd26e1c8464e27ceed368 [file] [log] [blame]
gunit Flock;
@header{package org.eclipse.epsilon.flock.parse;}
flockModule:
// Empty, single rule, and many rules.
"" -> "FLOCKMODULE"
"migrate Person { name := nom; }" -> "(FLOCKMODULE (MIGRATE Person (BLOCK (:= name nom))))"
"migrate Person { name := nom; } migrate Animal { name := nom; }" -> "(FLOCKMODULE (MIGRATE Person (BLOCK (:= name nom))) (MIGRATE Animal (BLOCK (:= name nom))))"
// Retyping and rule
"migrate Person { name := nom; } retype Person to Employee" -> "(FLOCKMODULE (MIGRATE Person (BLOCK (:= name nom))) (RETYPE Person Employee))"
// Operations
"operation Integer inc() { self := self + 1; }" -> "(FLOCKMODULE (operation Integer inc (BLOCK (:= self (+ self 1)))))"
"@cached operation Integer inc() { self := self + 1; }" -> "(FLOCKMODULE (ANNOTATIONBLOCK @cached operation Integer inc() { self := self + 1; }))"
retyping:
// Simple, and guarded
"retype Person to Employee" -> "(RETYPE Person Employee)"
"retype Person to Employee when: original.name.isDefined()" -> "(RETYPE Person Employee (GUARD (. (. original name) (isDefined PARAMETERS))))"
// Missing parts
"retype Person Employee" FAIL
"retype to Employee" FAIL
"retype Person to" FAIL
// Packages
"retype package families to families2" -> "(RETYPEPACKAGE families families2)"
"retype package families to families2 when: original.name.isDefined()" -> "(RETYPEPACKAGE families families2 (GUARD (. (. original name) (isDefined PARAMETERS))))"
"retype package families families2" FAIL
"retype package to families2" FAIL
"retype package families to" FAIL
deletion:
// Typical
"delete Person" -> (DELETE Person)
// with guard
"delete Person when: original.name.isUndefined()" -> "(DELETE Person (GUARD (. (. original name) (isUndefined PARAMETERS))))"
// Packages
"delete package families" -> "(DELETEPACKAGE families)"
"delete package families when: original.name.isUndefined()" -> "(DELETEPACKAGE families (GUARD (. (. original name) (isUndefined PARAMETERS))))"
migrateRule:
// Empty
"migrate Person { }" -> "(MIGRATE Person BLOCK)"
// Missing brace
"migrate Person { name := nom; " FAIL
// Statement
"migrate Person { name := nom; }" -> "(MIGRATE Person (BLOCK (:= name nom)))"
// Ignoring
"migrate Person ignoring name" -> "(MIGRATE Person (IGNORING name))"
// Guard
"migrate Person when: original.name.isDefined() { name := nom; }" -> "(MIGRATE Person (GUARD (. (. original name) (isDefined PARAMETERS))) (BLOCK (:= name nom)))"
// Guard with no statement, no when
"migrate Person when {}" FAIL
"migrate Person original.name.isDefined(); {}" FAIL
// Guard with semicolon
"migrate Person when: original.name.isDefined(); {}" FAIL
// No body
"migrate Person" FAIL
ignoring:
"ignoring name" -> "(IGNORING name)"
"ignoring name, number, address" -> "(IGNORING name number address)"
guard:
"when: original.name.isDefined()" -> "(GUARD (. (. original name) (isDefined PARAMETERS)))"
"when { var n := original.name; return n.isDefined(); }" -> "(GUARD (BLOCK (:= (var n) (. original name)) (return (. n (isDefined PARAMETERS)))))"
// Guard with no when
"original.name.isDefined()" FAIL