blob: 5f93f450cdd639152badc42beac612f9fe4046e2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.daffodil.grammar
import org.junit.Assert._
import org.apache.daffodil.Implicits._; object INoWarnG1 { ImplicitsSuppressUnusedImportWarning() }
import org.apache.daffodil.dsom._
import org.apache.daffodil.exceptions.Assert
import org.apache.daffodil.processors.parsers.Parser
import org.junit.Test
import org.apache.daffodil.util.Fakes
import org.apache.daffodil.processors.unparsers.Unparser
class TestGrammar extends GrammarMixin {
val fakeDecl =
GlobalElementDecl(
<xs:element name="foo" type="xs:int" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>,
Fakes.fakeSD)
val fakeTerm = fakeDecl.asRoot
final override protected def grammarContext = fakeTerm
case class Primitive1(e: Term, guard: Boolean = true) extends Terminal(e, guard) {
def parser: Parser = Assert.notYetImplemented()
def unparser: Unparser = Assert.notYetImplemented()
}
@Test def testBasicTripleSequential(): Unit = {
object first extends Primitive1(fakeTerm)
object mid extends Primitive1(fakeTerm)
object last extends Primitive1(fakeTerm)
lazy val triple = prod("triple") { first ~ mid ~ last }
assertFalse(triple.isEmpty)
// val str = triple.toString
// assertFalse(str.contains("triple"))
val exp = triple.gram
val n = exp.name
val s = exp.toString
assertTrue(n.contains("SeqComp"))
assertTrue(s.contains("first"))
assertTrue(s.contains("mid"))
assertTrue(s.contains("last"))
assertTrue(s.contains(" ~ "))
}
@Test def testMiddleSplicedOut(): Unit = {
object first extends Primitive1(fakeTerm)
object mid extends Primitive1(fakeTerm, false)
object last extends Primitive1(fakeTerm)
lazy val triple = prod("triple") { first ~ mid ~ last }
assertFalse(triple.isEmpty)
val exp = triple.gram
assertTrue(exp.name.contains("SeqComp"))
assertTrue(exp.toString.contains("first"))
assertFalse(exp.toString.contains("mid")) // spliced out.
assertTrue(exp.toString.contains("last"))
assertTrue(exp.toString.contains(" ~ "))
}
@Test def testTopProdSplicedOut(): Unit = {
object first extends Primitive1(fakeTerm)
object mid extends Primitive1(fakeTerm, false)
object last extends Primitive1(fakeTerm)
lazy val triple = prod("triple", false) { first ~ mid ~ last }
assertTrue(triple.isEmpty)
val exp = triple.gram
assertFalse(exp.name.contains("SeqComp"))
assertFalse(exp.toString.contains("first"))
assertFalse(exp.toString.contains("mid")) // spliced out.
assertFalse(exp.toString.contains("last"))
assertFalse(exp.toString.contains(" ~ "))
}
}