package com.minres.coredsl.json.tests import com.google.inject.Inject import com.minres.coredsl.coreDsl.CoreDef import com.minres.coredsl.coreDsl.DescriptionContent import org.eclipse.emf.ecore.util.EcoreUtil import org.eclipse.xtext.generator.GeneratorContext import org.eclipse.xtext.generator.IGenerator2 import org.eclipse.xtext.generator.InMemoryFileSystemAccess import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.XtextRunner import org.eclipse.xtext.testing.util.ParseHelper import org.eclipse.xtext.util.CancelIndicator import org.junit.Test import org.junit.runner.RunWith import static org.junit.Assert.* import static extension com.google.common.io.CharStreams.* import com.minres.coredsl.coreDsl.InstructionSet import java.io.FileReader import org.eclipse.xtext.testing.validation.ValidationTestHelper @RunWith(XtextRunner) @InjectWith(CoreDslInjectorProvider) class CoreDslGenerationTest{ @Inject IGenerator2 generator @Inject extension ParseHelper parseHelper @Inject ValidationTestHelper validator val isa_rv32i = ''' Core RV32I { constants { unsigned int XLEN, FLEN; unsigned CSR_SIZE = 4096; unsigned REG_FILE_SIZE=32; } registers { [[is_pc]] int PC ; int X[REG_FILE_SIZE]; } address_spaces { char MEM[1< [ cancelIndicator = CancelIndicator.NullImpl ]) println(fsa.textFiles) assertEquals(1,fsa.textFiles.size) assertTrue(fsa.textFiles.containsKey("DEFAULT_OUTPUTRV32I.txt")) // assertEquals( // ''' // public class Alice { // // } // '''.toString, fsa.textFiles.get(IFileSystemAccess::DEFAULT_OUTPUT+"Alice.java").toString // ) } @Test def void expandCppFile() { val content = parseHelper.parse(isa_rv32i) assertNotNull(content) val resource = content.eResource EcoreUtil.resolveAll(resource); assertEquals(0, resource.errors.size) assertEquals(0, resource.warnings.size) val CoreDef model = content.definitions.get(0) as CoreDef assertNotNull(model) val fsa = new InMemoryFileSystemAccess() val quote1 = '��' val quote2 = '��' fsa.generateFile("vm_" + model.name.toLowerCase + ".in.cpp", "vm-out", ''' /* ��quote1��start generated code��quote2�� */ InstructionDesriptor instr_descr[0] = {}; /* ��quote1��end generated code��quote2�� */ ''') generator.doGenerate(model.eResource, fsa, new GeneratorContext => [ cancelIndicator = CancelIndicator.NullImpl ]) println(fsa.textFiles) assertEquals(2,fsa.textFiles.size) assertTrue(fsa.textFiles.containsKey("DEFAULT_OUTPUTRV32I.txt")) // assertEquals( // ''' // public class Bob { // // } // '''.toString, fsa.textFiles.get(IFileSystemAccess::DEFAULT_OUTPUT+"Bob.java").toString) } }