/** * Copyright 2012 Tobias Gierke <tobias.gierke@code-sourcery.de> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.codesourcery.jasm16.compiler; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Collections; import de.codesourcery.jasm16.compiler.io.AbstractObjectCodeWriter; import de.codesourcery.jasm16.compiler.io.AbstractObjectCodeWriterFactory; import de.codesourcery.jasm16.compiler.io.ClassPathResource; import de.codesourcery.jasm16.compiler.io.IObjectCodeWriter; import de.codesourcery.jasm16.compiler.io.IResource; import de.codesourcery.jasm16.compiler.io.IResource.ResourceType; import de.codesourcery.jasm16.parser.TestHelper; import de.codesourcery.jasm16.utils.DebugCompilationListener; import de.codesourcery.jasm16.utils.Misc; public class CompilerTest extends TestHelper { public void testCompileOneUnit() throws IOException { final Compiler compiler = new Compiler(); compiler.setObjectCodeWriterFactory( NOP_WRITER ); final IResource resource = new ClassPathResource("specsample.dasm16",ResourceType.SOURCE_CODE); final ICompilationUnit unit = CompilationUnit.createInstance("classpath input" , resource ); final ByteArrayOutputStream[] out = new ByteArrayOutputStream[]{null}; compiler.setObjectCodeWriterFactory( new AbstractObjectCodeWriterFactory() { @Override protected IObjectCodeWriter createObjectCodeWriter( ICompilationContext context) { return new AbstractObjectCodeWriter() { @Override protected void closeHook() throws IOException { out[0].close(); } @Override protected OutputStream createOutputStream() throws IOException { out[0] = new ByteArrayOutputStream(); return out[0]; } @Override protected void deleteOutputHook() throws IOException { out[0] = null; } }; } @Override protected void deleteOutputHook() throws IOException { } }); compiler.compile( Collections.singletonList( unit ) , new DebugCompilationListener(true) ); final String source = Misc.readSource( resource.createInputStream() ); Misc.printCompilationErrors( unit , source , false ); assertFalse( unit.hasErrors() ); assertNotNull( unit.getAST() ); assertFalse( unit.getAST().hasErrors() ); assertNotNull( out[0] ); } }