blob: 2a8bca1d0741a7d25d67cfbeef5aff319bf5e5b9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2016 xored software, Inc. 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
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Vladimir Belov)
*******************************************************************************/
package org.eclipse.dltk.javascript.internal.parser.tests;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.Token;
import org.eclipse.dltk.compiler.env.ModuleSource;
import org.eclipse.dltk.javascript.ast.ISourceable;
import org.eclipse.dltk.javascript.ast.Script;
import org.eclipse.dltk.javascript.formatter.tests.JavaScriptFormatterTestsPlugin;
import org.eclipse.dltk.javascript.parser.JSParser.program_return;
import org.eclipse.dltk.javascript.parser.JSTokenStream;
import org.eclipse.dltk.javascript.parser.JSTransformer;
import org.eclipse.dltk.javascript.parser.JavaScriptParser;
import org.eclipse.dltk.javascript.parser.tests.ASTVerifier;
import org.junit.Assert;
@SuppressWarnings("nls")
public class ANTLRParserTester {
public static void parsePreview(String resourceName) throws Exception {
String fullResourceName = "org/eclipse/dltk/javascript/formatter/preferences/"
+ resourceName;
parseResource(fullResourceName, null);
}
public static void parse(String resourceName) throws Exception {
parse(resourceName, null);
}
public static void parse(String resourceName, String enconding)
throws Exception {
String fullResourceName = "scripts.parser/" + resourceName;
parseResource(fullResourceName, enconding);
}
/**
* @param fullResourceName
* @param encoding
* encoding of the resource or <code>null</code> if default
* system encoding should be used.
*/
private static void parseResource(String fullResourceName, String encoding)
throws IOException, RecognitionException {
InputStream resource = JavaScriptFormatterTestsPlugin.getDefault()
.getBundle().getResource(fullResourceName).openStream();
final JavaScriptParser parser = new JavaScriptParser();
JSTokenStream stream = parser.createTokenStream(resource, encoding);
program_return root = parser.createTreeParser(stream, null).program();
final StringBuilder source = new StringBuilder();
List<Token> tokens = stream.getTokens();
for (Token token : tokens) {
source.append(token.getText());
}
Script result = new JSTransformer(tokens).transformScript(root);
Assert.assertNotNull(result);
String formatted = ((ISourceable) result).toSourceString("");
Assert.assertTrue(formatted.length() > 0);
ANTLRTokenStreamComparer.compare(source.toString(), formatted, false);
new ASTVerifier(result, source.toString()).verify();
// System.out.println("-------------------------------------------");
// System.out.println(formatted);
// System.out.println("-------------------------------------------");
Script script = parser.parse(new ModuleSource(formatted), null);
Assert.assertNotNull(script);
Assert.assertTrue(script.toSourceString("").length() != 0);
}
}