blob: ab705f5fc2d58780891e0654bcff4994bae63562 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2017 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package org.eclipse.dltk.tcl.parser.tests;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.eclipse.dltk.ast.declarations.ModuleDeclaration;
import org.eclipse.dltk.ast.parser.ISourceParser;
import org.eclipse.dltk.compiler.env.ModuleSource;
import org.eclipse.dltk.compiler.problem.ProblemCollector;
import org.eclipse.dltk.compiler.util.Util;
import org.eclipse.dltk.core.DLTKLanguageManager;
import org.eclipse.dltk.tcl.ast.TclModule;
import org.eclipse.dltk.tcl.core.TclNature;
import org.eclipse.dltk.tcl.core.tests.model.Activator;
import org.eclipse.dltk.tcl.internal.parser.NewTclSourceParser;
import org.eclipse.dltk.tcl.parser.TclParser;
import org.eclipse.dltk.tcl.parser.definitions.DefinitionManager;
import org.eclipse.dltk.tcl.parser.definitions.NamespaceScopeProcessor;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class AllParseTests extends TestCase {
static final String CHARSET = "ISO-8859-1"; //$NON-NLS-1$
private static final String SCRIPTS_ZIP = "scripts/scripts.zip"; //$NON-NLS-1$
public static TestSuite suite() {
final TestSuite suite = new TestSuite(AllParseTests.class.getName());
final URL scripts = Activator.getDefault().getBundle()
.getEntry(SCRIPTS_ZIP);
if (scripts == null) {
suite.addTest(new TestCase("error") { //$NON-NLS-1$
@Override
protected void runTest() throws Throwable {
fail(SCRIPTS_ZIP + " is not found"); //$NON-NLS-1$
}
});
} else {
try {
final ZipInputStream zipInputStream = new ZipInputStream(
scripts.openStream());
try {
int count = 0;
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null) {
final InputStream entryStream = new FilterInputStream(
zipInputStream) {
@Override
public void close() throws IOException {
// empty
}
};
final char[] content = Util.getInputStreamAsCharArray(
entryStream, (int) entry.getSize(), CHARSET);
final String testName = ++count + "-" + entry.getName(); //$NON-NLS-1$
suite.addTest(new AllParseTests(testName, content));
zipInputStream.closeEntry();
}
} finally {
try {
zipInputStream.close();
} catch (IOException e) {
//
}
}
} catch (final IOException e) {
suite.addTest(new TestCase("IOException") { //$NON-NLS-1$
@Override
protected void runTest() throws Throwable {
throw e;
}
});
}
}
return suite;
}
private final char[] content;
public AllParseTests(String name, char[] content) {
super(name);
this.content = content;
}
@Override
protected void runTest() throws Throwable {
System.out.print("Test " + getName()); //$NON-NLS-1$
final ProblemCollector collector = new ProblemCollector();
final ISourceParser parser = DLTKLanguageManager
.getSourceParser(TclNature.NATURE_ID);
long s1 = System.currentTimeMillis();
ModuleDeclaration module1 = (ModuleDeclaration) parser
.parse(new ModuleSource(content), collector);
long e1 = System.currentTimeMillis();
// if (collector.hasErrors()) {
// fail(collector.getErrors().toString());
// }
// Parse with new parser and compare results.
TclParser newParser = new TclParser();
NamespaceScopeProcessor processor = DefinitionManager.getInstance()
.createProcessor();
NewTclSourceParser newSourceParser = new NewTclSourceParser();
long s2 = System.currentTimeMillis();
TclModule module = newParser.parseModule(new String(content), null,
processor);
ModuleDeclaration module2 = newSourceParser.parse(null, module,
collector);
long e2 = System.currentTimeMillis();
// String str1 = module1.toString();
// String str2 = module2.toString();
// TestCase.assertEquals(str1, str2);
System.out.println("Time comparison:" + (e1 - s1) + "%%" + (e2 - s2));
}
}