8073357: schema1.xsd has wrong content. Sequence of the enum values has been changed

Reviewed-by: joehw, lancea
This commit is contained in:
Aleksei Efimov 2015-04-22 02:23:06 +03:00
parent ce8a17d530
commit 603b214413
2 changed files with 46 additions and 20 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -23,57 +23,83 @@
/*
* @test
* @bug 8046817
* @summary schemagen fails to generate xsd for enum types
* @bug 8046817 8073357
* @summary schemagen fails to generate xsd for enum types.
* Check that order of Enum values is preserved.
* @run main/othervm GenerateEnumSchema
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.stream.Collectors;
public class GenerateEnumSchema {
private static final String SCHEMA_OUTPUT_FILENAME = "schema1.xsd";
private static final File schemaOutputFile = new File(SCHEMA_OUTPUT_FILENAME);
private static final String[] expectedEnums = {
"\"FIRST\"", "\"ONE\"", "\"TWO\"", "\"THREE\"",
"\"FOUR\"", "\"FIVE\"", "\"SIX\"", "\"LAST\""};
private static String schemaContent = "";
public static void main(String[] args) throws Exception {
public static void main(String[] args) throws Exception, IOException {
//Check schema generation for class type
runSchemaGen("TestClassType.java");
checkIfSchemaGenerated();
readSchemaContent();
checkSchemaContent("<xs:complexType name=\"testClassType\">");
checkSchemaContent("<xs:element name=\"a\" type=\"xs:int\"/>");
schemaOutputFile.delete();
//Check schema generation for enum type
runSchemaGen("TestEnumType.java");
checkIfSchemaGenerated();
readSchemaContent();
//Check if Enum type schema is generated
checkSchemaContent("<xs:simpleType name=\"testEnumType\">");
checkSchemaContent("<xs:enumeration value=\"ONE\"/>");
checkSchemaContent("<xs:enumeration value=\"TWO\"/>");
checkSchemaContent("<xs:enumeration value=\"THREE\"/>");
//Check the sequence of enum values order
checkEnumOrder();
schemaOutputFile.delete();
}
// Check if schema file successfully generated by schemagen
private static void checkIfSchemaGenerated() {
if (!schemaOutputFile.exists()) {
throw new RuntimeException("FAIL:" + SCHEMA_OUTPUT_FILENAME + " was not generated by schemagen tool");
}
}
private static void checkSchemaContent(String exp_token) throws FileNotFoundException {
System.out.print("Check if generated schema contains '" + exp_token + "' string: ");
try (Scanner scanner = new Scanner(schemaOutputFile)) {
if (scanner.findWithinHorizon(exp_token, 0) != null) {
System.out.println("OK");
return;
}
//Read schema content from file
private static void readSchemaContent() throws Exception {
schemaContent = Files.lines(schemaOutputFile.toPath()).collect(Collectors.joining(""));
}
// Check if schema file contains specific string
private static void checkSchemaContent(String expContent) {
System.out.print("Check if generated schema contains '" + expContent + "' string: ");
if (schemaContent.contains(expContent)) {
System.out.println("OK");
return;
}
System.out.println("FAIL");
throw new RuntimeException("The '" + exp_token + "' is not found in generated schema");
throw new RuntimeException("The '" + expContent + "' is not found in generated schema");
}
// Check if the generated schema contains all enum constants
// and their order is preserved
private static void checkEnumOrder() throws Exception {
int prevElem = -1;
for (String elem : expectedEnums) {
int curElem = schemaContent.indexOf(elem);
System.out.println(elem + " position = " + curElem);
if (curElem < prevElem) {
throw new RuntimeException("FAIL: Enum values order is incorrect or " + elem + " element is not found");
}
prevElem = curElem;
}
}
private static String getClassFilePath(String filename) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,5 +25,5 @@ import javax.xml.bind.annotation.XmlEnum;
@XmlEnum(String.class)
public enum TestEnumType {
ONE, TWO, THREE
FIRST, ONE, TWO, THREE, FOUR, FIVE, SIX, LAST
}