8073357: schema1.xsd has wrong content. Sequence of the enum values has been changed
Reviewed-by: joehw, lancea
This commit is contained in:
parent
ce8a17d530
commit
603b214413
@ -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) {
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user