def test_one_or_more_children_deriv(): schema = After( Choice( EMPTY, OneOrMore( Element( Name({'ns': ''}, 'bar'), EMPTY))), EMPTY) doc = ('x', ElementNode(QName('', 'bar'), tuple(), ())) deriv = strip_children_deriv(schema, doc) assert str(children_deriv(schema, doc)) == str(deriv) x = child_deriv(schema, 'x') y = child_deriv(x, doc[1]) assert str(strip_children_deriv(schema, doc)) == str(y) deriv = text_deriv(schema, 'x') assert str(child_deriv(schema, 'x')) == str(deriv) p1 = Choice( EMPTY, OneOrMore( Element( Name({'ns': ''}, 'bar'), EMPTY))) p2 = EMPTY deriv = after(text_deriv(p1, 'x'), p2) assert str(text_deriv(schema, 'x')) == str(deriv) p11 = EMPTY p12 = OneOrMore( Element( Name({'ns': ''}, 'bar'), EMPTY)) deriv = choice(text_deriv(p11, 'x'), text_deriv(p12, 'x')) assert str(text_deriv(p1, 'x')) == str(deriv) assert str(text_deriv(p11, 'x')) == str(NotAllowed()) p121 = Element( Name({'ns': ''}, 'bar'), EMPTY) deriv = group(text_deriv(p121, 'x'), choice(OneOrMore(p121), EMPTY)) assert str(text_deriv(p12, 'x')) == str(deriv) assert str(text_deriv(p121, 'x')) == str(NotAllowed())
def test_children_deriv_interleave(): schema = After( Interleave( Element( Name({'ns': ''}, 'bar'), EMPTY), TEXT), EMPTY) doc = tuple() deriv = children_deriv(schema, ('',)) assert str(children_deriv(schema, doc)) == str(deriv) x = child_deriv(schema, '') print("x is", x) deriv = choice(schema, x) if whitespace('') else x assert str(children_deriv(schema, '')) == str(deriv) deriv = text_deriv(schema, '') assert str(child_deriv(schema, '')) == str(deriv) p1 = Interleave( Element( Name({'ns': ''}, 'bar'), EMPTY), TEXT) p2 = EMPTY deriv = After(text_deriv(p1, ''), p2) assert str(text_deriv(schema, '')) == str(deriv) p11 = Element( Name({'ns': ''}, 'bar'), EMPTY) p12 = TEXT deriv = choice( interleave(text_deriv(p11, ''), p12), interleave(p11, text_deriv(p12, ''))) assert str(text_deriv(p1, '')) == str(deriv) deriv = NotAllowed() assert str(text_deriv(p11, '')) == str(deriv) deriv = NotAllowed() assert str(interleave(NotAllowed(), p12)) == str(deriv) deriv = TEXT assert str(text_deriv(p12, '')) == str(deriv) assert whitespace('') is True schema = After( Interleave( Element( Name({'ns': ''}, 'bar'), EMPTY), TEXT), EMPTY) deriv = Choice( After( Interleave( Element( Name({'ns': ''}, 'bar'), EMPTY), TEXT), EMPTY), After( Interleave( Element( Name({'ns': ''}, 'bar'), EMPTY), TEXT), EMPTY)) print('is', children_deriv(schema, doc)) print('should be', deriv) assert str(children_deriv(schema, doc)) == str(deriv)