Search in sources :

Example 1 with CustomErrorException

use of php.runtime.exceptions.CustomErrorException in project jphp by jphp-compiler.

the class JvmCompilerCase method check.

public void check(String name, boolean withErrors, int errorFlags) {
    File file;
    ByteArrayOutputStream outputR = new ByteArrayOutputStream();
    Environment environment;
    if (isConcurrent()) {
        environment = new ConcurrentEnvironment(newScope(), outputR);
    } else {
        environment = new Environment(newScope(), outputR);
    }
    //environment.setErrorFlags(ErrorType.E_ALL.value);
    Test test = new Test(file = new File(Thread.currentThread().getContextClassLoader().getResource("resources/" + name).getFile()));
    Context context = new Context(test.getFile(), file);
    try {
        JvmCompiler compiler = new JvmCompiler(environment, context, getSyntax(context));
        environment.setErrorFlags(0);
        if (errorFlags != -1)
            environment.setErrorFlags(errorFlags);
        if (!isCompiled()) {
            environment.setErrorFlags(ErrorType.E_ALL.value);
        }
        ModuleEntity module = compiler.compile(false);
        if (isCompiled()) {
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            ModuleDumper dumper = new ModuleDumper(context, environment, true);
            dumper.save(module, output);
            environment.setErrorFlags(ErrorType.E_ALL.value);
            module = dumper.load(new ByteArrayInputStream(output.toByteArray()));
        }
        environment.getScope().loadModule(module);
        environment.getScope().addUserModule(module);
        environment.registerModule(module);
        Memory memory = module.includeNoThrow(environment, environment.getGlobals());
    } catch (ErrorException e) {
        if (withErrors) {
            environment.getErrorReportHandler().onFatal(e);
        } else {
            throw new CustomErrorException(e.getType(), e.getMessage() + " line: " + (e.getTraceInfo().getStartLine() + test.getSectionLine("FILE") + 2) + ", pos: " + (e.getTraceInfo().getStartPosition() + 1), e.getTraceInfo());
        }
    } catch (UncaughtException | BaseBaseException e) {
        environment.catchUncaught(e);
    } catch (Throwable throwable) {
        throw new RuntimeException(throwable);
    }
    try {
        environment.doFinal();
    } catch (ErrorException e) {
        if (withErrors) {
            environment.getErrorReportHandler().onFatal(e);
            try {
                environment.getDefaultBuffer().flush();
            } catch (Throwable throwable) {
                throw new RuntimeException(throwable);
            }
        } else
            throw e;
    } catch (RuntimeException e) {
        throw e;
    } catch (Throwable throwable) {
        throw new RuntimeException(throwable);
    }
    lastOutput = outputR.toString();
    if (test.getExpect() != null)
        Assert.assertEquals(test.getTest() + " (" + name + ")", test.getExpect(), rtrim(lastOutput));
    if (test.getExpectF() != null) {
        Memory result = StringFunctions.sscanf(environment, TraceInfo.valueOf(file.getName(), 0, 0), rtrim(lastOutput), test.getExpectF());
        if (result.isNull())
            result = new ArrayMemory();
        PrintF printF = new PrintF(environment.getLocale(), test.getExpectF(), ((ArrayMemory) result).values());
        String out = printF.toString();
        Assert.assertEquals(out, rtrim(lastOutput));
    }
}
Also used : PrintF(php.runtime.util.PrintF) ArrayMemory(php.runtime.memory.ArrayMemory) Memory(php.runtime.Memory) ModuleEntity(php.runtime.reflection.ModuleEntity) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ArrayMemory(php.runtime.memory.ArrayMemory) Test(org.develnext.jphp.core.tester.Test) ByteArrayInputStream(java.io.ByteArrayInputStream) CustomErrorException(php.runtime.exceptions.CustomErrorException) ErrorException(php.runtime.exceptions.support.ErrorException) CustomErrorException(php.runtime.exceptions.CustomErrorException) File(java.io.File) ModuleDumper(php.runtime.loader.dump.ModuleDumper) BaseBaseException(php.runtime.lang.exception.BaseBaseException) UncaughtException(php.runtime.lang.UncaughtException)

Aggregations

ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 File (java.io.File)1 Test (org.develnext.jphp.core.tester.Test)1 Memory (php.runtime.Memory)1 CustomErrorException (php.runtime.exceptions.CustomErrorException)1 ErrorException (php.runtime.exceptions.support.ErrorException)1 UncaughtException (php.runtime.lang.UncaughtException)1 BaseBaseException (php.runtime.lang.exception.BaseBaseException)1 ModuleDumper (php.runtime.loader.dump.ModuleDumper)1 ArrayMemory (php.runtime.memory.ArrayMemory)1 ModuleEntity (php.runtime.reflection.ModuleEntity)1 PrintF (php.runtime.util.PrintF)1