blob: 6823215785a55bc1b4648a99df445d3f28f62bcc [file] [log] [blame]
/*
* Copyright (c) 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import java.util.Collection;
import java.util.stream.Collectors;
public enum ClassType {
CLASS("class"),
INTERFACE("interface") {
@Override
public String methodToString(TestCase.TestMethodInfo method) {
String modifiers = method.mods.stream()
.collect(Collectors.joining(" "));
boolean hasBody = modifiers.contains("static") || modifiers.contains("default");
String parameters = method.parameters.stream()
.map(TestCase.TestMemberInfo::generateSource)
.collect(Collectors.joining(", "));
return String.format("%s %s %s(%s) %s",
method.indention() + modifiers,
"int",
method.getName(),
parameters,
hasBody ? "{return 0;}" : ";");
}
},
ANNOTATION("@interface") {
@Override
public String methodToString(TestCase.TestMethodInfo method) {
String modifiers = method.mods.stream()
.collect(Collectors.joining(" "));
return String.format("%s %s %s() %s",
method.indention() + modifiers,
"int",
method.getName(),
";");
}
},
ENUM("enum") {
@Override
public String fieldToString(TestCase.TestFieldInfo field) {
return field.indention() + field.name;
}
@Override
public String collectFields(Collection<TestCase.TestFieldInfo> fields) {
return fields.stream()
.map(TestCase.TestMemberInfo::generateSource)
.collect(Collectors.joining(",\n")) + ";\n";
}
};
private final String classType;
ClassType(String classType) {
this.classType = classType;
}
private String collectSrc(Collection<? extends TestCase.TestMemberInfo> members) {
String src = members.stream()
.map(TestCase.TestMemberInfo::generateSource)
.collect(Collectors.joining("\n"));
return src.trim().isEmpty() ? "" : src + "\n\n";
}
public String collectInnerClasses(Collection<TestCase.TestClassInfo> innerClasses) {
return collectSrc(innerClasses);
}
public String collectFields(Collection<TestCase.TestFieldInfo> fields) {
return collectSrc(fields);
}
public String collectMethods(Collection<TestCase.TestMethodInfo> methods) {
return collectSrc(methods);
}
public String methodToString(TestCase.TestMethodInfo method) {
String modifiers = method.mods.stream()
.collect(Collectors.joining(" "));
String parameters = method.parameters.stream()
.map(TestCase.TestMemberInfo::generateSource)
.collect(Collectors.joining(", "));
String localClasses = collectInnerClasses(method.localClasses.values());
String methodBody = modifiers.contains("abstract") ? ";" :
String.format("{%n%s%s%n%s}",
localClasses,
method.isConstructor
? ""
: method.indention() + "return false;",
method.indention());
return String.format("%s %s %s(%s) %s",
method.indention() + modifiers,
method.isConstructor ? "" : "boolean",
method.getName(),
parameters,
methodBody);
}
public String fieldToString(TestCase.TestFieldInfo field) {
String modifiers = field.mods.stream()
.collect(Collectors.joining(" "));
return String.format("%s int %s = 0;",
field.indention() + modifiers,
field.name);
}
public String getDescription() {
return classType;
}
}