|  | @@ -0,0 +1,80 @@
 | 
		
	
		
			
			|  | 1 | +package org.openzen.zenscript.scriptingexample.tests.helpers;
 | 
		
	
		
			
			|  | 2 | +
 | 
		
	
		
			
			|  | 3 | +import org.junit.jupiter.api.*;
 | 
		
	
		
			
			|  | 4 | +import org.openzen.zencode.java.*;
 | 
		
	
		
			
			|  | 5 | +import org.openzen.zencode.shared.*;
 | 
		
	
		
			
			|  | 6 | +import org.openzen.zenscript.codemodel.*;
 | 
		
	
		
			
			|  | 7 | +import org.openzen.zenscript.codemodel.type.*;
 | 
		
	
		
			
			|  | 8 | +import org.openzen.zenscript.lexer.*;
 | 
		
	
		
			
			|  | 9 | +import org.openzen.zenscript.parser.*;
 | 
		
	
		
			
			|  | 10 | +import org.openzen.zenscript.scriptingexample.tests.*;
 | 
		
	
		
			
			|  | 11 | +import org.openzen.zenscript.scriptingexample.tests.helpers.*;
 | 
		
	
		
			
			|  | 12 | +
 | 
		
	
		
			
			|  | 13 | +import java.util.*;
 | 
		
	
		
			
			|  | 14 | +
 | 
		
	
		
			
			|  | 15 | +
 | 
		
	
		
			
			|  | 16 | +public abstract class ZenCodeTest {
 | 
		
	
		
			
			|  | 17 | +    
 | 
		
	
		
			
			|  | 18 | +    private final List<SourceFile> sourceFiles;
 | 
		
	
		
			
			|  | 19 | +    protected ScriptingEngine engine;
 | 
		
	
		
			
			|  | 20 | +    protected JavaNativeModule testModule;
 | 
		
	
		
			
			|  | 21 | +    protected ZenCodeTestLogger logger;
 | 
		
	
		
			
			|  | 22 | +    
 | 
		
	
		
			
			|  | 23 | +    protected ZenCodeTest() {
 | 
		
	
		
			
			|  | 24 | +        sourceFiles = new ArrayList<>();
 | 
		
	
		
			
			|  | 25 | +    }
 | 
		
	
		
			
			|  | 26 | +    
 | 
		
	
		
			
			|  | 27 | +    
 | 
		
	
		
			
			|  | 28 | +    @BeforeEach
 | 
		
	
		
			
			|  | 29 | +    public void beforeEach() throws CompileException {
 | 
		
	
		
			
			|  | 30 | +        this.logger = new ZenCodeTestLogger();
 | 
		
	
		
			
			|  | 31 | +        this.engine = new ScriptingEngine(logger);
 | 
		
	
		
			
			|  | 32 | +        this.testModule = engine.createNativeModule("test_module", "org.openzen.zenscript.scripting_tests");
 | 
		
	
		
			
			|  | 33 | +        SharedGlobals.currentlyActiveLogger = logger;
 | 
		
	
		
			
			|  | 34 | +        
 | 
		
	
		
			
			|  | 35 | +        getRequiredClasses().stream().distinct().forEach(requiredClass -> {
 | 
		
	
		
			
			|  | 36 | +            testModule.addGlobals(requiredClass);
 | 
		
	
		
			
			|  | 37 | +            testModule.addClass(requiredClass);
 | 
		
	
		
			
			|  | 38 | +        });
 | 
		
	
		
			
			|  | 39 | +        engine.registerNativeProvided(testModule);
 | 
		
	
		
			
			|  | 40 | +    }
 | 
		
	
		
			
			|  | 41 | +    
 | 
		
	
		
			
			|  | 42 | +    public void executeEngine() {
 | 
		
	
		
			
			|  | 43 | +        try {
 | 
		
	
		
			
			|  | 44 | +            final FunctionParameterList parameters = getParameters();
 | 
		
	
		
			
			|  | 45 | +            final SemanticModule script_tests = engine.createScriptedModule("script_tests", sourceFiles
 | 
		
	
		
			
			|  | 46 | +                    .toArray(new SourceFile[0]), getBEP(), parameters.getParameters());
 | 
		
	
		
			
			|  | 47 | +            
 | 
		
	
		
			
			|  | 48 | +            Assertions.assertTrue(script_tests.isValid(), "Scripts are not valid!");
 | 
		
	
		
			
			|  | 49 | +            engine.registerCompiled(script_tests);
 | 
		
	
		
			
			|  | 50 | +            engine.run(parameters.getParameterMap());
 | 
		
	
		
			
			|  | 51 | +        } catch(ParseException e) {
 | 
		
	
		
			
			|  | 52 | +            e.printStackTrace();
 | 
		
	
		
			
			|  | 53 | +            Assertions.fail("Error in Engine execution", e);
 | 
		
	
		
			
			|  | 54 | +        }
 | 
		
	
		
			
			|  | 55 | +        logger.setEngineComplete();
 | 
		
	
		
			
			|  | 56 | +    }
 | 
		
	
		
			
			|  | 57 | +    
 | 
		
	
		
			
			|  | 58 | +    public void addScript(String context) {
 | 
		
	
		
			
			|  | 59 | +        sourceFiles.add(new LiteralSourceFile("test_script_" + sourceFiles.size() + ".zs", context));
 | 
		
	
		
			
			|  | 60 | +    }
 | 
		
	
		
			
			|  | 61 | +    
 | 
		
	
		
			
			|  | 62 | +    
 | 
		
	
		
			
			|  | 63 | +    public BracketExpressionParser getBEP() {
 | 
		
	
		
			
			|  | 64 | +        return null;
 | 
		
	
		
			
			|  | 65 | +    }
 | 
		
	
		
			
			|  | 66 | +    
 | 
		
	
		
			
			|  | 67 | +    public FunctionParameterList getParameters() {
 | 
		
	
		
			
			|  | 68 | +        final FunctionParameterList functionParameterList = new FunctionParameterList();
 | 
		
	
		
			
			|  | 69 | +        final StoredType stringArrayType = engine.registry.getArray(StringTypeID.AUTO, 1).stored();
 | 
		
	
		
			
			|  | 70 | +        FunctionParameter args = new FunctionParameter(stringArrayType, "args");
 | 
		
	
		
			
			|  | 71 | +        functionParameterList.addParameter(args, new String[]{"a", "b", "c"});
 | 
		
	
		
			
			|  | 72 | +        return functionParameterList;
 | 
		
	
		
			
			|  | 73 | +    }
 | 
		
	
		
			
			|  | 74 | +    
 | 
		
	
		
			
			|  | 75 | +    public List<Class<?>> getRequiredClasses() {
 | 
		
	
		
			
			|  | 76 | +        final ArrayList<Class<?>> result = new ArrayList<>();
 | 
		
	
		
			
			|  | 77 | +        result.add(SharedGlobals.class);
 | 
		
	
		
			
			|  | 78 | +        return result;
 | 
		
	
		
			
			|  | 79 | +    }
 | 
		
	
		
			
			|  | 80 | +}
 |