]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/tests/org/simantics/scl/compiler/tests/TestBase.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / tests / org / simantics / scl / compiler / tests / TestBase.java
diff --git a/bundles/org.simantics.scl.compiler/tests/org/simantics/scl/compiler/tests/TestBase.java b/bundles/org.simantics.scl.compiler/tests/org/simantics/scl/compiler/tests/TestBase.java
deleted file mode 100644 (file)
index 466c097..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.simantics.scl.compiler.tests;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.regex.Pattern;
-
-import org.junit.Assert;
-import org.simantics.scl.compiler.errors.Failable;
-import org.simantics.scl.compiler.errors.Failure;
-import org.simantics.scl.compiler.module.ImportDeclaration;
-import org.simantics.scl.compiler.module.Module;
-import org.simantics.scl.compiler.module.repository.ModuleRepository;
-import org.simantics.scl.compiler.module.repository.UpdateListener;
-import org.simantics.scl.compiler.source.ModuleSource;
-import org.simantics.scl.compiler.source.StringModuleSource;
-import org.simantics.scl.compiler.source.repository.CompositeModuleSourceRepository;
-import org.simantics.scl.compiler.source.repository.MapModuleSourceRepository;
-import org.simantics.scl.compiler.source.repository.SourceRepositories;
-import org.simantics.scl.compiler.top.ValueNotFound;
-
-public class TestBase {
-    
-    public static final ModuleRepository PRELUDE_MODULE_REPOSITORY = new ModuleRepository(
-            new CompositeModuleSourceRepository(
-                    SourceRepositories.BUILTIN_SOURCE_REPOSITORY,
-                    SourceRepositories.PRELUDE_SOURCE_REPOSITORY
-                    ));
-    private static final Pattern TEST_SEPARATOR = Pattern.compile("^--+ *$", Pattern.MULTILINE);
-    private static final Charset UTF8 = Charset.forName("UTF-8");
-
-    String path;
-
-    public TestBase(String path) {
-        this.path = path;
-    }
-    
-    protected void test() {
-        String testModuleName = Thread.currentThread().getStackTrace()[2].getMethodName();
-        String testPath = path + "/" + testModuleName + ".scl";
-        
-        try {
-            String[] testParts = readTestParts(testPath);
-            
-            int j=0;
-            ArrayList<String> auxModuleNameList = new ArrayList<String>();
-            while(j < testParts.length) {
-                String part = testParts[j]; 
-                if(part.startsWith("// module "))
-                    auxModuleNameList.add(part.substring(10).split("\\n", 2)[0].trim());
-                else
-                    break;
-                ++j;
-            }
-            int mainId = j;
-            String[] moduleNames = new String[mainId+1];
-            String[] moduleTexts = new String[mainId+1];
-            for(int i=0;i<mainId;++i) {
-                moduleNames[i] = auxModuleNameList.get(i);
-                moduleTexts[i] = testParts[i];
-            }
-            moduleNames[mainId] = testModuleName;
-            
-            for(;j<testParts.length;j+=2) {
-                moduleTexts[mainId] = testParts[j];
-                String expectedOutput = j+1<testParts.length ? testParts[j+1] : "";
-                String actualOutput = test(moduleNames, moduleTexts);
-                Assert.assertEquals(
-                        canonicalizeOutput(expectedOutput),
-                        canonicalizeOutput(actualOutput));
-            }
-        } catch(IOException e) {
-            throw new RuntimeException(e);
-        } catch (ValueNotFound e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    private static String canonicalizeOutput(String text) {
-        return text.trim().replace("\r\n", "\n");
-    }
-
-    protected String test(String[] moduleNames, String[] moduleTexts) throws ValueNotFound {
-        if(moduleNames.length != moduleTexts.length)
-            throw new IllegalArgumentException();
-        /*for(int i=0;i<moduleNames.length;++i) {
-            System.out.println("-- " + moduleNames[i] + " --");
-            System.out.println(moduleTexts[i]);
-        }*/
-        
-        ModuleSource[] moduleSources = new ModuleSource[moduleNames.length];
-        for(int i=0;i<moduleNames.length;++i)
-            moduleSources[i] = new StringModuleSource(
-                    moduleNames[i], getClass().getClassLoader(), moduleTexts[i]) {
-                @Override
-                protected ImportDeclaration[] getBuiltinImports(UpdateListener listener) {
-                    return ImportDeclaration.ONLY_BUILTINS;
-                }
-            };
-        ModuleRepository testEnvironment = new ModuleRepository(
-                PRELUDE_MODULE_REPOSITORY,
-                new MapModuleSourceRepository(moduleSources));
-        int lastId = moduleNames.length-1;
-        Failable<Module> result = testEnvironment.getModule(moduleNames[lastId]);
-        if(!result.didSucceed())
-            return ((Failure)result).toString(moduleTexts[lastId]);
-        else {
-            Object main = testEnvironment.getRuntimeModule(moduleNames[lastId]).getResult().getValue("main");
-            return String.valueOf(main);
-        }
-    }
-
-    private String[] readTestParts(String testPath) throws IOException {
-        InputStream stream = getClass().getResourceAsStream(testPath);
-        try {
-            byte[] buffer = new byte[1024];
-            int pos = 0;
-            while(true) {
-                int c = stream.read(buffer, pos, buffer.length-pos);
-                if(c <= 0)
-                    break;
-                pos += c;
-                if(pos < buffer.length)
-                    break;
-                buffer = Arrays.copyOf(buffer, pos*2);
-            }
-            String text = new String(buffer, 0, pos, UTF8);
-            String[] result = TEST_SEPARATOR.split(text);
-            for(int i=1;i<result.length;++i) {
-                if(result[i].startsWith("\r\n"))
-                    result[i] = result[i].substring(2);
-                if(result[i].startsWith("\n") || result[i].startsWith("\r"))
-                    result[i] = result[i].substring(1);
-            }
-            return result;
-        } finally {
-            stream.close();
-        }
-    }
-}