All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.amygdalum.testrecorder.deserializers.Templates Maven / Gradle / Ivy

package net.amygdalum.testrecorder.deserializers;

import static java.util.Arrays.asList;

import java.util.List;

import org.stringtemplate.v4.ST;

import net.amygdalum.testrecorder.util.Pair;

public final class Templates {

	private static final String GENERIC_OBJECT = "new GenericObject() {\n\n}";
	private static final String GENERIC_OBJECT_CONVERTER = "new GenericObject() {\n\n}.as()";
	private static final String ARRAY_LITERAL = "new {}";
	private static final String NEW_OBJECT = "new ()";
	private static final String NEW_ARRAY = "new []";
	private static final String FIELD_ACCESS_EXP = ".";
	private static final String CALL_METHOD_EXP = ".()";
	private static final String CALL_LOCAL_METHOD_EXP = "()";
	private static final String CALL_METHOD_CHAIN_EXP = ".";
	private static final String CAST_EXP = "() ";

	private static final String NEW_ANONYMOUS_CLASS_INSTANCE = "new () {\n\n}";
	private static final String FIELD_DECLARATION = "   = ;";
	private static final String METHOD_DECLARATION = "  () {\n\n}";
	private static final String EXPRESSION_STMT = ";";
	private static final String ASSIGN_FIELD_STMT = ". = ;";
	private static final String ASSIGN_LOCAL_VARIABLE_STMT = "  = ;";
	private static final String CALL_METHOD_STMT = ".();";
	private static final String CALL_LOCAL_METHOD_STMT = "();";
	private static final String RETURN_STMT = "return ;";

	private static final String CAPTURE_EXCEPTION = "capture(() -> {}, )";

	private static final String PARAM = " ";
    private static final String ANNOTATION = "@( = }; separator=\", \">)";

	private static final String GENERIC_OBJECT_MATCHER = "new GenericMatcher() {\n\n}.matching(}; separator=\", \">)";
	private static final String WIDENING_MATCHER = "widening()";
	private static final String ENUM_MATCHER = "matchingEnum()";
	private static final String RECURSIVE_MATCHER = "recursive()";
	private static final String LAMBDA_MATCHER = "lambda()";
	private static final String CONTAINS_IN_ORDER_MATCHER = "containsInOrder(, )";
	private static final String EMPTY_MATCHER = "empty()";
	private static final String CONTAINS_IN_ANY_ORDER_MATCHER = "contains(, )";
	private static final String EQUAL_TO_MATCHER = "equalTo()";
	private static final String SAME_INSTANCE_MATCHER = "sameInstance()";
	private static final String NULL_MATCHER = "nullValue()";
	private static final String NO_ENTRIES_MATCHER = "noEntries(, )";
	private static final String CONTAINS_ENTRIES_MATCHER = "containsEntries(, ), )}>";
	private static final String ARRAY_CONTAINING_MATCHER = "arrayContaining(, )";
	private static final String ARRAY_EMPTY_MATCHER = "emptyArray()";
	private static final String PRIMITIVE_ARRAY_CONTAINING_MATCHER = "ArrayContaining()";
	private static final String PRIMITIVE_ARRAY_EMPTY_MATCHER = "EmptyArray()";


	private Templates() {
	}

	public static String expressionStatement(String value) {
		ST statement = new ST(EXPRESSION_STMT);
		statement.add("value", value);

		return statement.render();
	}

	public static String fieldAccess(String base, String field) {
		ST statement = new ST(FIELD_ACCESS_EXP);
		statement.add("base", base);
		statement.add("field", field);

		return statement.render();
	}

	public static String callMethod(String base, String method, String... arguments) {
		return callMethod(base, method, asList(arguments));
	}

	public static String callMethod(String base, String method, List arguments) {
		ST statement = new ST(CALL_METHOD_EXP);
		statement.add("base", base);
		statement.add("method", method);
		statement.add("arguments", arguments);

		return statement.render();
	}

	public static String callLocalMethod(String method, String... arguments) {
		return callLocalMethod(method, asList(arguments));
	}

	public static String callLocalMethod(String method, List arguments) {
		ST statement = new ST(CALL_LOCAL_METHOD_EXP);
		statement.add("method", method);
		statement.add("arguments", arguments);

		return statement.render();
	}

	public static String newObject(String type, String... arguments) {
		return newObject(type, asList(arguments));
	}

	public static String newObject(String type, List arguments) {
		ST bean = new ST(NEW_OBJECT);
		bean.add("type", type);
		bean.add("args", arguments);

		return bean.render();
	}

	public static String newArray(String type, String len) {
		ST statement = new ST(NEW_ARRAY);
		statement.add("type", type);
		statement.add("len", len);
		

		return statement.render();
	}

	public static String arrayLiteral(String type, List elements) {
		ST statement = new ST(ARRAY_LITERAL);
		statement.add("type", type);
		statement.add("elements", elements);
		
		return statement.render();
	}

	public static String newAnonymousClassInstance(String type, List arguments, String body) {
		ST object = new ST(NEW_ANONYMOUS_CLASS_INSTANCE);
		object.add("type", type);
		object.add("args", arguments);
		object.add("body", body);

		return object.render();
	}

	public static String fieldDeclaration(String modifiers, String type, String name, String value) {
		ST field = new ST(FIELD_DECLARATION);
		field.add("modifiers", modifiers);
		field.add("type", type);
		field.add("name", name);
		field.add("value", value);

		return field.render();
	}

	public static String fieldDeclaration(String modifiers, String type, String name) {
		return fieldDeclaration(modifiers, type, name, null);
	}

	public static String methodDeclaration(String modifiers, String type, String name, List args, String body) {
		ST method = new ST(METHOD_DECLARATION);
		method.add("modifiers", modifiers);
		method.add("returntype", type);
		method.add("name", name);
		method.add("args", args);
		method.add("body", body);

		return method.render();
	}

	public static String param(String type, String name) {
		ST field = new ST(PARAM);
		field.add("type", type);
		field.add("name", name);

		return field.render();
	}
	
	public static String assignLocalVariableStatement(String type, String name, String value) {
		ST assign = new ST(ASSIGN_LOCAL_VARIABLE_STMT);
		assign.add("type", type);
		assign.add("name", name);
		assign.add("value", value);
		
		return assign.render();
	}
	
	public static String assignFieldStatement(String base, String field, String value) {
		ST assign = new ST(ASSIGN_FIELD_STMT);
		assign.add("base", base);
		assign.add("field", field);
		assign.add("value", value);

		return assign.render();
	}

	public static String callMethodStatement(String base, String method, List arguments) {
		ST call = new ST(CALL_METHOD_STMT);
		call.add("base", base);
		call.add("method", method);
		call.add("arguments", arguments);

		return call.render();
	}

	public static String callMethodChainExpression(String base, List methods) {
		ST call = new ST(CALL_METHOD_CHAIN_EXP);
		call.add("base", base);
		call.add("methods", methods);

		return call.render();
	}

	public static String callLocalMethodStatement(String method, String... arguments) {
		return callLocalMethodStatement(method, asList(arguments));
	}

	public static String callLocalMethodStatement(String method, List arguments) {
		ST call = new ST(CALL_LOCAL_METHOD_STMT);
		call.add("method", method);
		call.add("arguments", arguments);

		return call.render();
	}

	public static String callMethodStatement(String base, String method, String... arguments) {
		return callMethodStatement(base, method, asList(arguments));
	}

	public static String returnStatement(String value) {
		ST assign = new ST(RETURN_STMT);
		assign.add("value", value);

		return assign.render();
	}

	public static String captureException(List statements, String type) {
		ST assign = new ST(CAPTURE_EXCEPTION);
		assign.add("statements", statements);
		assign.add("type", type);

		return assign.render();
	}

	public static String genericObject(String type, List fields) {
		ST genericObject = new ST(GENERIC_OBJECT);
		genericObject.add("type", type);
		genericObject.add("fields", fields);

		return genericObject.render();
	}

	public static String genericObjectConverter(String type, List fields) {
		ST genericObject = new ST(GENERIC_OBJECT_CONVERTER);
		genericObject.add("type", type);
		genericObject.add("fields", fields);
		
		return genericObject.render();
	}
	
	public static String genericObjectMatcher(String type, List fields) {
		ST matcher = new ST(GENERIC_OBJECT_MATCHER);
		matcher.add("type", type);
		matcher.add("fields", fields);

		return matcher.render();
	}

	public static String genericObjectMatcher(String type, String to, List fields) {
		ST matcher = new ST(GENERIC_OBJECT_MATCHER);
		matcher.add("type", asList(type, to));
		matcher.add("fields", fields);

		return matcher.render();
	}

	public static String enumMatcher(String value) {
		ST matcher = new ST(ENUM_MATCHER);
		matcher.add("value", value);

		return matcher.render();
	}

	public static String widening(String value) {
		ST matcher = new ST(WIDENING_MATCHER);
		matcher.add("value", value);

		return matcher.render();
	}

	public static String containsInOrderMatcher(String elementType, String... values) {
		ST matcher = new ST(CONTAINS_IN_ORDER_MATCHER);
		matcher.add("type", elementType);
		matcher.add("values", asList(values));

		return matcher.render();
	}

	public static String containsInAnyOrderMatcher(String elementType, String... values) {
		ST matcher = new ST(CONTAINS_IN_ANY_ORDER_MATCHER);
		matcher.add("type", elementType);
		matcher.add("values", values);

		return matcher.render();
	}

	public static String noEntriesMatcher(String keyType, String valueType) {
		ST matcher = new ST(NO_ENTRIES_MATCHER);
		matcher.add("keytype", keyType);
		matcher.add("valuetype", valueType);

		return matcher.render();
	}

	public static String containsEntriesMatcher(String keyType, String valueType, List> entryValues) {
		ST matcher = new ST(CONTAINS_ENTRIES_MATCHER);
		matcher.add("keytype", keyType);
		matcher.add("valuetype", valueType);
		matcher.add("entries", entryValues);

		return matcher.render();
	}

	public static String emptyMatcher(String type) {
		ST matcher = new ST(EMPTY_MATCHER);
		matcher.add("type", type);

		return matcher.render();
	}

	public static String recursiveMatcher(String type) {
		ST matcher = new ST(RECURSIVE_MATCHER);
		matcher.add("type", type);

		return matcher.render();
	}

	public static String lambdaMatcher(String name) {
		ST matcher = new ST(LAMBDA_MATCHER);
		matcher.add("name", name);
		
		return matcher.render();
	}
	
	public static String arrayContainingMatcher(String type, String... elementValues) {
		ST matcher = new ST(ARRAY_CONTAINING_MATCHER);
		matcher.add("type", type);
		matcher.add("values", asList(elementValues));

		return matcher.render();
	}

	public static String arrayEmptyMatcher() {
		ST matcher = new ST(ARRAY_EMPTY_MATCHER);

		return matcher.render();
	}

	public static String primitiveArrayContainingMatcher(String type, String... elementValues) {
		ST matcher = new ST(PRIMITIVE_ARRAY_CONTAINING_MATCHER);
		matcher.add("type", type);
		matcher.add("values", asList(elementValues));

		return matcher.render();
	}

	public static String primitiveArrayEmptyMatcher(String type) {
		ST matcher = new ST(PRIMITIVE_ARRAY_EMPTY_MATCHER);
		matcher.add("type", type);

		return matcher.render();
	}

	public static String equalToMatcher(String value) {
		ST matcher = new ST(EQUAL_TO_MATCHER);
		matcher.add("value", value);

		return matcher.render();
	}

	public static String sameInstanceMatcher(String value) {
		ST matcher = new ST(SAME_INSTANCE_MATCHER);
		matcher.add("value", value);

		return matcher.render();
	}

	public static String nullMatcher(String value) {
		ST matcher = new ST(NULL_MATCHER);
		matcher.add("value", value);

		return matcher.render();
	}

	public static String cast(String type, String expression) {
		ST matcher = new ST(CAST_EXP);
		matcher.add("type", type);
		matcher.add("expression", expression);

		return matcher.render();
	}

    @SafeVarargs
	public static String annotation(String annotation, Pair... values) {
    	return annotation(annotation, asList(values));
	}

    public static String annotation(String annotation, List> values) {
        ST matcher = new ST(ANNOTATION);
        matcher.add("annotation", annotation);
        matcher.add("values", values);

        return matcher.render();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy