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

org.objectfabric.SerializationTestGenerator Maven / Gradle / Ivy

There is a newer version: 0.9.1
Show newest version
/**
 * This file is part of ObjectFabric (http://objectfabric.org).
 *
 * ObjectFabric is licensed under the Apache License, Version 2.0, the terms
 * of which may be found at http://www.apache.org/licenses/LICENSE-2.0.html.
 * 
 * Copyright ObjectFabric Inc.
 * 
 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

package org.objectfabric;

import java.util.ArrayList;

public class SerializationTestGenerator extends FileGenerator {

    private final boolean _reader, _unknown;

    public SerializationTestGenerator(Generator generator, String packg, boolean reader, boolean unknown) {
        super(generator, packg, getName(reader, unknown));

        _reader = reader;
        _unknown = unknown;
    }

    private static String getName(boolean reader, boolean unknown) {
        return (reader ? "SerializationTestReader" : "SerializationTestWriter") + (unknown ? "Unknown" : "");
    }

    protected ArrayList getValues(Immutable c) {
        ArrayList values = new ArrayList();
        values.add(c.defaultString());

        if (c == Immutable.BOOLEAN)
            values.add("true");
        else if (c == Immutable.BOOLEAN_BOXED) {
            if (g().isJava()) {
                values.add("Boolean.TRUE");
                values.add("Boolean.FALSE");
            } else {
                values.add("true");
                values.add("false");
            }
        } else if (c.isPrimitive() && !c.isBoxed()) {
            if (g().isJava()) {
                values.add(c.boxed().java() + ".MAX_VALUE");
                values.add(c.boxed().java() + ".MIN_VALUE");
            } else {
                values.add(c.csharp() + ".MaxValue");
                values.add(c.csharp() + ".MaxValue");
            }
        } else if (c.isPrimitive() && !c.isBoxed()) {
            if (g().isJava()) {
                values.add(c.boxed().java() + ".MAX_VALUE");
                values.add(c.boxed().java() + ".MIN_VALUE");
            } else {
                values.add(c.nonBoxed().csharp() + ".MaxValue");
                values.add(c.nonBoxed().csharp() + ".MaxValue");
            }
        } else if (c == Immutable.STRING) {
            values.add("\"\"");
            values.add("\"\\u0000\"");
            values.add("\"\\u00FF\"");
            values.add("\"\\u0AFF\"");
            values.add("\"\\u7FFF\"");
            values.add("\"\\uFFFF\"");
            values.add("\"ffqsdfqfezghrtghrgrfgzefzeqfzeqfqzefqzefqzefqzeefqzefqzefsdqfsdghfgzegqzefqsdfqzefqezfqzefqze'\"");
        } else if (c == Immutable.BIG_INTEGER) {
            String type = g().isJava() ? "new java.math.BigInteger" : "System.Numerics.BigInteger.Parse";
            values.add(type + "(\"0\")");
            values.add(type + "(\"-0\")");
            values.add(type + "(\"45\")");
            values.add(type + "(\"-45\")");
            values.add(type + "(\"1237987\")");
            values.add(type + "(\"-1237987\")");
            values.add(type + "(\"1237987898798797464864181688684513518313131813113513\")");
            values.add(type + "(\"-1237987898798797464864181688684513518313131813113513\")");
        } else if (c == Immutable.DECIMAL) {
            String start = g().isJava() ? "new java.math.BigDecimal( \"" : "";
            String end = g().isJava() ? "\")" : "m";
            values.add(start + "0" + end);
            values.add(start + "-0" + end);
            values.add(start + "45" + end);
            values.add(start + "-45" + end);
            values.add(start + "123798789879879.456464" + end);
            values.add(start + "-123798789879879.456464" + end);
            values.add(start + "0.000000000000078" + end);
            values.add(start + "-0.000000000000078" + end);
            values.add(start + "2.0e5" + end);
            values.add(start + "-2.0e5" + end);
            values.add(start + "789.046544654846468789486e13" + end);
            values.add(start + "-789.046544654846468789486e13" + end);
            values.add(start + "789.046544654846468789486e-13" + end);
            values.add(start + "-789.046544654846468789486e-13" + end);
        } else if (c == Immutable.DATE) {
            if (g().isJava()) {
                values.add("new java.util.Date(4558621531843L)");
                values.add("new java.util.Date(0)");
            } else {
                values.add("new System.DateTime( 4558621531843L * 10000L + 621355968000000000L, System.DateTimeKind.Utc )");
                values.add("System.DateTime.Parse( \"1/1/1970 00:00:00\", null, System.Globalization.DateTimeStyles.AssumeUniversal )");
            }
        } else if (c == Immutable.BINARY) {
            values.add("new byte[] { 45, 88 }");
        }

        return values;
    }

    @Override
    protected void header() {
        if (g().isJava()) {
            copyright();

            wl();
            wl("package org.objectfabric;");
            wl();

            warning();
        } else {
            warning();

            wl("namespace org.objectfabric {");
            wl();
        }
    }

    @Override
    protected void body() {
        final String name = getName(_reader, _unknown);

        wl("public class " + name + " " + g().target().extendsString() + " org.objectfabric.SerializationTest." + (_reader ? "TestReader" : "TestWriter") + " {");
        wl();
        wl("    private int _index;");
        wl();

        if (g().isJava())
            wl("    @Override");

        wl("    public" + g().target().overrideString() + "void run() {");
        wl("        for (;;) {");
        wl("            switch (_index) {");

        int index = 0;

        for (Immutable c : Immutable.ALL) {
            for (String value : getValues(c)) {
                String type = g().isJava() ? c.java() : c.csharp();

                wl("                case " + index++ + ": {");

                if (!_unknown) {
                    if (_reader) {
                        String equals = value.equals("null") || (c.isPrimitive() && !c.isBoxed()) ? " == (" : "." + (g().isJava() ? "e" : "E") + "quals(";

                        if (c.fixedLength()) {
                            wl("                    if (!canRead" + c + "())");
                            wl("                        return;");
                            wl();
                            String cast = g().isCSharp() ? "(" + c.csharp() + ")" : "";
                            String read = "read" + c + "()";
                            wl("                    org.objectfabric.Debug.assertAlways((" + cast + read + ")" + equals + value + "));");
                        } else {
                            if (c != Immutable.BINARY)
                                wl("                    " + type + " value = read" + c + "();");
                            else
                                wl("                    byte[] value = readBinary();");

                            wl();
                            wl("                    if (interrupted())");
                            wl("                        return;");
                            wl();

                            if (c != Immutable.BINARY)
                                wl("                    org.objectfabric.Debug.assertAlways(value" + equals + value + "));");
                            else
                                wl("                    org.objectfabric.Debug.assertAlways(java.util.Arrays.equals(value, " + value + "));");
                        }
                    } else {
                        if (c.fixedLength()) {
                            wl("                    if (!canWrite" + c + "())");
                            wl("                        return;");
                            wl();
                            wl("                    write" + c + "(" + value + ");");
                        } else {
                            wl("                    write" + c + "(" + value + ");");
                            wl();
                            wl("                    if (interrupted())");
                            wl("                        return;");
                            wl();
                        }
                    }
                } else if (!c.isPrimitive() || c.isBoxed()) {
                    if (_reader) {
                        if (c != Immutable.BINARY)
                            wl("                    " + type + " value = (" + type + ") org.objectfabric.UnknownObjectSerializer.read(this);");
                        else
                            wl("                    byte[] value = (byte[]) org.objectfabric.UnknownObjectSerializer.read(this);");

                        wl();
                        wl("                    if (interrupted())");
                        wl("                        return;");
                        wl();

                        if (c != Immutable.BINARY) {
                            String equals = value.equals("null") ? " == (" : "." + (g().isJava() ? "e" : "E") + "quals(";
                            wl("                    org.objectfabric.Debug.assertAlways(value" + equals + value + "));");
                        } else
                            wl("                    org.objectfabric.Debug.assertAlways(java.util.Arrays.equals(value, " + value + "));");
                    } else {
                        wl("                    org.objectfabric.UnknownObjectSerializer.write(this, " + value + ");");
                        wl();
                        wl("                    if (interrupted())");
                        wl("                        return;");
                    }
                }

                wl("                    break;");
                wl("                }");
            }
        }

        wl("                default:");
        wl("                    return;");
        wl("            }");
        wl();
        wl("            _index++;");
        wl("        }");
        wl("    }");
        wl();

        if (_reader) {
            if (g().isJava())
                wl("    @Override");

            wl("    public" + g().target().overrideString() + g().target().booleanString() + " isDone() {");
            wl("        return _index == " + index + ";");
            wl("    }");
        }

        wl("}");

        if (g().isCSharp())
            wl("}");
    }

    public static void main(String[] args) {
        Generator generator = new Generator(null);
        String packg = "org.objectfabric";
        generator.copyright(PlatformGenerator.readCopyright());

        generator.folder("../jvm/src/test/serialization");
        generator.target(Target.JAVA);
        generator.write(new SerializationTestGenerator(generator, packg, true, false));
        generator.write(new SerializationTestGenerator(generator, packg, false, false));
        generator.write(new SerializationTestGenerator(generator, packg, true, true));
        generator.write(new SerializationTestGenerator(generator, packg, false, true));

        generator.folder("../clr/JUnit/Generated");
        generator.target(Target.CSHARP);
        generator.write(new SerializationTestGenerator(generator, packg, true, false));
        generator.write(new SerializationTestGenerator(generator, packg, false, false));
        generator.write(new SerializationTestGenerator(generator, packg, true, true));
        generator.write(new SerializationTestGenerator(generator, packg, false, true));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy