[
https://issues.apache.org/jira/browse/AVRO-1667?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14616501#comment-14616501
]
Tom White commented on AVRO-1667:
---------------------------------
[~zolyfarkas] thanks for the patch. I think that thethe test would belong
better in TestResolvingGrammarGenerator2, where the schema could be constructed
using SchemaBuilder so it's easier to read.
Also, there are some spurious whitespace changes, as well as a change in
{{flattenedSize}} which doesn't look like it's needed. The indentation level
should be two spaces.
> Parser symbol tree flattening is broken for recursive schemas
> -------------------------------------------------------------
>
> Key: AVRO-1667
> URL: https://issues.apache.org/jira/browse/AVRO-1667
> Project: Avro
> Issue Type: Bug
> Affects Versions: 1.7.7
> Reporter: Zoltan Farkas
>
> Here is a unit test to reproduce:
> {noformat}
> package org.apache.avro.io.parsing;
> import java.io.IOException;
> import java.util.HashMap;
> import java.util.HashSet;
> import java.util.Set;
> import junit.framework.Assert;
> import org.apache.avro.Schema;
> import org.junit.Test;
> public class SymbolTest {
> private static final String SCHEMA =
> "{\"type\":\"record\",\"name\":\"SampleNode\","
> + "\"namespace\":\"org.spf4j.ssdump2.avro\",\n" +
> " \"fields\":[\n" +
> " {\"name\":\"count\",\"type\":\"int\",\"default\":0},\n" +
> " {\"name\":\"subNodes\",\"type\":\n" +
> " {\"type\":\"array\",\"items\":{\n" +
> " \"type\":\"record\",\"name\":\"SamplePair\",\n" +
> " \"fields\":[\n" +
> " {\"name\":\"method\",\"type\":\n" +
> " {\"type\":\"record\",\"name\":\"Method\",\n" +
> " \"fields\":[\n" +
> "
> {\"name\":\"declaringClass\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}},\n"
> +
> "
> {\"name\":\"methodName\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}\n"
> +
> " ]}},\n" +
> " {\"name\":\"node\",\"type\":\"SampleNode\"}]}}}]}";
> @Test
> public void testSomeMethod() throws IOException {
> Schema schema = new Schema.Parser().parse(SCHEMA);
> Symbol root = Symbol.root(new ResolvingGrammarGenerator()
> .generate(schema, schema, new
> HashMap<ValidatingGrammarGenerator.LitS, Symbol>()));
> validateNonNull(root, new HashSet<Symbol>());
> }
> private static void validateNonNull(final Symbol symb, Set<Symbol> seen) {
> if (seen.contains(symb)) {
> return;
> } else {
> seen.add(symb);
> }
> if (symb.production != null) {
> for (Symbol s : symb.production) {
> if (s == null) {
> Assert.fail("invalid parsing tree should not contain
> nulls");
> }
> if (s.kind != Symbol.Kind.ROOT) {
> validateNonNull(s, seen);;
> }
> }
> }
> }
> }
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)