package bytecode;

import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;

import junit.framework.TestCase;

import org.junit.Test;

import plugindevelopment.TypeInsertTester;
import de.dhbwstuttgart.core.MyCompiler;
import de.dhbwstuttgart.core.MyCompilerAPI;
import de.dhbwstuttgart.logger.LoggerConfiguration;
import de.dhbwstuttgart.logger.Section;
import de.dhbwstuttgart.parser.JavaParser.yyException;
import de.dhbwstuttgart.typeinference.ByteCodeResult;
import de.dhbwstuttgart.typeinference.Menge;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet;

public class NewClassTest extends SourceFileBytecodeTest{
	@Override
	protected void init() {
		testName = "NewClass";
	}

	@Test
	public void testInit() throws Exception {
		ClassLoader cl = getClassLoader();
		
		cl.loadClass(testName).newInstance();
	}
	
	@Test
	public void testMethod() throws Exception {
		try{
		    ClassLoader classLoader = getClassLoader();

		    Class cls =  classLoader.loadClass(testName);
		    
			Object obj = cls.newInstance();
			
			File file = new File(rootDirectory);
		    URL url = file.toURL();
		    URL[] urls = new URL[]{url};

			
			Class[] params = new Class[0];
				
			Method method = cls.getDeclaredMethod("method", params);
			Object returnValue = method.invoke(obj);
			assertTrue(returnValue instanceof String);
		}catch(Exception e){
			throw new RuntimeException(e);
		}
	}
}