/* * Author: David Corbin * * Copyright (c) 2005 RubyPeople. * * This file is part of the Ruby Development Tools (RDT) plugin for eclipse. * RDT is subject to the "Common Public License (CPL) v 1.0". You may not use * RDT except in compliance with the License. For further information see * org.rubypeople.rdt/rdt.license. */ package org.rubypeople.rdt.internal.core.parser; import junit.framework.TestCase; import org.jruby.ast.Node; import org.jruby.lexer.yacc.LexerSource; import org.jruby.parser.DefaultRubyParser; import org.jruby.parser.ParserConfiguration; import org.jruby.parser.RubyParserResult; import org.rubypeople.eclipse.shams.resources.ShamFile; public class TC_RubyParser extends TestCase { public void testParse() throws Exception { ShamDefaultRubyParser defaultRubyParser = new ShamDefaultRubyParser(); RubyParserResult rubyParserResult = new RubyParserResult(); Node rootNode = new ShamNode(); rubyParserResult.setAST(rootNode); defaultRubyParser.setParserResult(rubyParserResult); TestRubyParser parser = new TestRubyParser(); parser.setDefaultRubyParser(defaultRubyParser); ShamFile file = new ShamFile("testFile.rb"); file.setContents("foobar"); Node node = parser.parse(file); assertEquals(rootNode, node); file.assertContentStreamClosed(); } private static class TestRubyParser extends RubyParser { private DefaultRubyParser defaultRubyParser; protected DefaultRubyParser getDefaultRubyParser(ParserConfiguration config) { return defaultRubyParser; } public void setDefaultRubyParser(DefaultRubyParser defaultRubyParser) { this.defaultRubyParser = defaultRubyParser; } // do NOT return the ShamDefaultRubyParser to the parser pool @Override protected void returnBorrowedParser(@SuppressWarnings("unused") DefaultRubyParser parser) { } } private static class ShamDefaultRubyParser extends DefaultRubyParser { private RubyParserResult result; public RubyParserResult parse(ParserConfiguration config, LexerSource source) { return result; } public void setParserResult(RubyParserResult rubyParserResult) { result = rubyParserResult; } } }