/*
* Created on Feb 19, 2005
*
*/
package org.rubypeople.rdt.internal.ui.text;
import junit.framework.TestCase;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.rules.FastPartitioner;
import org.eclipse.jface.text.rules.IToken;
import org.rubypeople.rdt.internal.ui.text.RubyPartitionScanner.EndBraceFinder;
/**
* @author Chris
*/
public class TC_RubyPartitionScanner extends TestCase
{
private void assertContentType(String contentType, String code, int offset)
{
assertEquals("Content type doesn't match expectations for: " + code.charAt(offset), contentType,
getContentType(code, offset));
}
private String getContentType(String content, int offset)
{
IDocument doc = new Document(content);
FastPartitioner partitioner = new FastPartitioner(new MergingPartitionScanner(),
RubyPartitionScanner.LEGAL_CONTENT_TYPES);
partitioner.connect(doc);
return partitioner.getContentType(offset);
}
public void testUnclosedInterpolationDoesntInfinitelyLoop()
{
getContentType("%[\"#{\"]", 0);
assert (true);
}
/**
* http://www.aptana.com/trac/ticket/5730
*/
public void testBug5730()
{
getContentType("# Comment\n" + "=begin\n" + "puts 'hi'\n" + "=ne", 0);
assert (true);
}
/**
* http://www.aptana.com/trac/ticket/6052
*/
public void testBug6052()
{
getContentType("# Use this class to maintain the decision process\n" + "# To choose a next aprt of text etc.\n"
+ "class Logic\n" + "=begin\n" + " def initialize\n" + " end\n"
+ "############################################################################################\n"
+ " private\n"
+ "############################################################################################ \n"
+ "end", 0);
assert (true);
}
public void testPartitioningOfSingleLineComment()
{
String source = "# This is a comment\n";
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, source, 1);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, source, 18);
}
public void testRecognizeSpecialCase()
{
String source = "a,b=?#,'This is not a comment!'\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 5);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 6);
}
public void testMultilineComment()
{
String source = "=begin\nComment\n=end";
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, source, 10);
source = "=begin\n" + " for multiline comments, the =begin and =end must\n" + " appear in the first column\n"
+ "=end";
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, source, source.length() / 2);
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, source, source.length() - 2);
}
public void testMultilineCommentNotOnFirstColumn()
{
String source = " =begin\nComment\n=end";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 1);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 2);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 10);
}
public void testRecognizeDivision()
{
String source = "1/3 #This is a comment\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 3);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, source, 5);
}
public void testRecognizeOddballCharacters()
{
String source = "?\" #comment\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 2);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, source, 5);
source = "?' #comment\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 2);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, source, 5);
source = "?/ #comment\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 2);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, source, 5);
}
public void testPoundCharacterIsntAComment()
{
String source = "?#";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, source, 1);
}
public void testSinglelineCommentJustAfterMultilineComment()
{
String source = "=begin\nComment\n=end\n# this is a singleline comment\n";
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, source, 0);
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, source, 10);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, source, source.length() - 5);
}
public void testMultipleCommentsInARow()
{
String code = "# comment 1\n# comment 2\nclass Chris\nend\n";
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 6);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 17);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 26);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 29);
}
public void testCommentAfterEnd()
{
String code = "class Chris\nend # comment\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 12);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 17);
}
public void testCommentAfterEndWhileEditing()
{
String code = "=begin\r\n" + "c\r\n" + "=end\r\n" + "#hmm\r\n" + "#comment here why is ths\r\n"
+ "class Chris\r\n" + " def thing\r\n" + " end #ocmm \r\n" + "end";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 76);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 83);
}
public void testCommentAtEndOfLineWithStringAtBeginning()
{
String code = "hash = {\n" + " \"string\" => { # comment\n" + " 123\n" + " }\n" + "}";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 0);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 4);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 6);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 8);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 12);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 18);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 19);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 22);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 25);
}
public void testLinesWithJustSpaceBeforeComment()
{
String code = " \n" + " # comment\n" + " def method\n" + " \n" + " end";
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 5);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 14);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 20);
}
public void testCommentsWithAlotOfPrecedingSpaces()
{
String code = " # We \n" + " # caller-requested until.\n" + "return self\n";
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 16);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 63);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 70);
}
public void testCodeWithinString()
{
String code = "string = \"here's some code: #{1} there\"";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 2); // st'r'...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 10); // "'h'er...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 28); // '#'{1...
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 30); // '1'} t...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 31); // '}' th...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 35); // th'e're..
}
public void testCodeWithinSingleQuoteString()
{
String code = "string = 'here s some code: #{1} there'";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 2); // st'r'...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 10); // "'h'er...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 28); // '#'{1...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 30); // '1'} t...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 31); // '}' th...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 35); // th'e're..
}
public void testVariableSubstitutionWithinString()
{
String code = "string = \"here's some code: #$global there\"";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 2); // st'r'...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 10); // "'h'er...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 28); // '#'$glo...
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 29); // '$'global
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 36);// ' 'there...
}
public void testStringWithinCodeWithinString()
{
String code = "string = \"here's some code: #{var = 'string'} there\"";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 2); // st'r'...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 10); // "'h'er...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 28); // '#'{var
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 30); // 'v'ar =
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 36); // '''string
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 46); // 't'here
}
public void testStringWithEndBraceWithinCodeWithinString()
{
String code = "string = \"here's some code: #{var = '}'; 1} there\"";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 2); // st'r'...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 10); // "'h'er...
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 28); // '#'{var
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 30); // 'v'ar =
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 37); // '}';
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 39); // ';' 1}
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 41); // ; '1'}
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 42); // 1'}' t
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 44); // 't'here
}
public void testRegex()
{
String code = "regex = /hi there/";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 2); // re'g'ex
assertContentType(RubyPartitionScanner.RUBY_REGULAR_EXPRESSION, code, 9); // '/'hi the
assertContentType(RubyPartitionScanner.RUBY_REGULAR_EXPRESSION, code, 11); // /h'i' the
}
public void testRegexWithDynamicCode()
{
String code = "/\\.#{Regexp.escape(extension.to_s)}$/ # comment";
assertContentType(RubyPartitionScanner.RUBY_REGULAR_EXPRESSION, code, 3);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 38); // '#' co
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 40); // # 'c'ommen
}
public void testEscapedCharactersAndSingleQuoteInsideDoubleQuote()
{
String code = "quoted_value = \"'#{quoted_value[1..-2].gsub(/\\'/, \"\\\\\\\\'\")}'\" if quoted_value.include?(\"\\\\\\'\") # (for ruby mode) \"\n"
+ "quoted_value";
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 16); //
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 19); // #{'q'uoted
assertContentType(RubyPartitionScanner.RUBY_REGULAR_EXPRESSION, code, 44); // /
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 51); // "\
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 59); // '" if
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 62); // 'i'f quoted_
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 87); // include?('"'
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 95); // '#' (for ruby mode)
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, code.length() - 3);
}
public void testSingleQuotedString()
{
String code = "require 'commands/server'";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 1);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 8);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 9);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 17);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 18);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 24);
}
public void testCommands()
{
String code = "if OPTIONS[:detach]\n" + " `mongrel_rails #{parameters.join(\" \")} -d`\n" + "else\n"
+ " ENV[\"RAILS_ENV\"] = OPTIONS[:environment]";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 1);
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 22);
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 23);
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 38);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 50);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 55);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 58);
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 59);
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 63);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 65);
}
public void testPercentXCommand()
{
String code = "if (@options.do_it)\n" + " %x{#{cmd}}\n" + "end\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 1); // i'f'
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 22); // '%'x
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 24); // %x'{'
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 27); // 'c'md
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 30); // cmd'}'
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 31); // cmd}'}'
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 33); // 'e'nd
}
public void testHeredocInArgumentList()
{
String code = "connection.delete <<-end_sql, \"#{self.class.name} Destroy\"\n"
+ " DELETE FROM #{self.class.table_name}\n"
+ " WHERE #{connection.quote_column_name(self.class.primary_key)} = #{quoted_id}\n" + "end_sql\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 1); // c'o'nnection
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 18); // '<'<-end_sql
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 33); // 's'elf.class
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 48); // '}' Destroy
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 75); // 's'elf.class
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 96); // name'}'\n
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 108); // {'c'onnection
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 160); // '}' =
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 166); // {'q'uoted
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 175); // _id'}'\n
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 177); // 'e'nd_sql
}
public void testScaryString()
{
String code = "puts \"match|#{$`}<<#{$&}>>#{$'}|\"\n" + "pp $~";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 1); // p'u'ts
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 5); // '"'match
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 13); // #'{'$`
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 14); // $
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 15); // `
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 16); // }
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 20); // {
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 21); // $
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 22); // &
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 23); // }
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 27); // {
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 28); // $
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 29); // '
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 30); // }
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 34); // 'p'p $~
}
// TODO Handle yet even wackier heredoc syntax:
// http://blog.jayfields.com/2006/12/ruby-multiline-strings-here-doc-or.html
public void testBraceFinderHandlesWeirdGlobal()
{
EndBraceFinder finder = new EndBraceFinder("$'}|\"\npp $~");
assertEquals(2, finder.find());
}
public void testNestedHeredocs()
{
String code = "methods += <<-BEGIN + nn_element_def(element) + <<-END\n" +
" def #{element.downcase}(attributes = {})\n" +
"BEGIN\n" +
" end\n" +
"END\n" +
"\n" +
"puts :symbol\n";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 1);
// _<_<-BEGIN
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 11);
// <<-BEGI_N_
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 18);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 20);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 46);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 48);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 62); // #'{'
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 63); // #{'e'lem
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 79); // case'}'
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 112); // EN'D'
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 115); // 'p'uts
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 120); // ':'sym
}
public void testBug5448()
{
String code = "m.class_collisions controller_class_path, \"#{controller_class_name}Controller\", # Sessions Controller\r\n"
+ " \"#{controller_class_name}Helper\"";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 1);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 40);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 48);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 50);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 51);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 71);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 72);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 83);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 84);
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, code, 86);
}
public void testBug5208()
{
String code = "=begin\r\n" + " This is a comment\r\n" + "=end\r\n" + "require 'gosu'";
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, code, 0);
assertContentType(RubyPartitionScanner.RUBY_MULTI_LINE_COMMENT, code, 32); // =en'd'
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 36); // 'r'equire
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 44);
}
public void testROR255()
{
String code = "\"all_of(#{@matchers.map { |matcher| matcher.mocha_inspect }.join(\", \") })\"";
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 1); // "'a'll_of
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 10); // #{'@'match
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 60); // }.'j'oin
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 70);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 71); // ) '}')"
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 72); // ) }')'"
}
public void testROR950()
{
String code = "config.load_paths += [\"#{RAILS_ROOT}/vendor/plugins/sql_session_store/lib\"]";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 0); // 'c'onfig
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 22); // ['"'#{
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 25); // #{'R'
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 34);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 36); // '/'vendor
code = "config.load_paths += %W(#{RAILS_ROOT}/vendor/plugins/sql_session_store/lib)";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 0); // 'c'onfig
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 26); // #{'R'
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 35); // OO'T'}
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 37); // '/'vendor
}
public void testROR975()
{
String code = "exist_sym = :\"#{row['PROVVPI']}.#{row['vpi']}.#{row['vci']}.#{row['seq_num']}\"";
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 0); // 'e'xist
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 12); // ':'
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 13); // '"'#
}
public void testROR1278()
{
String code = "hash = {:user=>{:emailaddr=>'4mydemo@4mypasswords.com', :login=>'4MyDemo',\n" +
":password=>'password', :password_confirmation=>'password'},\n" +
":userpin => {:pin =>'test', :pin_confirmation=>'test'}\n" +
"}";
RubyPartitionScanner scanner = new RubyPartitionScanner();
IDocument document = new Document(code);
scanner.setPartialRange(document, 136, 19, RubyPartitionScanner.RUBY_DEFAULT, 132);
IToken token = scanner.nextToken();
assertEquals(RubyPartitionScanner.RUBY_DEFAULT, token.getData());
}
public void testCGILib()
{
String code = "warn \"Warning:#{caller[0].sub(/'/, '')}: cgi-lib is deprecated after Ruby 1.8.1; use cgi instead\"";
// warn
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 0);
// "Warning
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 5);
// caller
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 16);
// /'/
assertContentType(RubyPartitionScanner.RUBY_REGULAR_EXPRESSION, code, 30);
assertContentType(RubyPartitionScanner.RUBY_REGULAR_EXPRESSION, code, 32);
// ,
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 33);
// ''
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 35);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 36);
// )
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 37);
// }: cgi-lib
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 38);
}
public void testROR1307StringSymbols()
{
String code = "class AbiBuilderTest\n" +
" def method\n" +
" assert_equal array, Abi.send(:\"to_#{type}\", number), \"#{type} failed on Ruby number -> array\"\n\n" +
" assert_equal [255], Abi.signed_to_udword(-1), 'Failed on signed_to_udword'\n" +
" end\n\n" +
" def test_packed_number_encoding\n" +
" packed = { :p => 0x123, :q => 0xABCDEF, :n => 5 }\n" +
" gold_packed = [0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x23, 0x01, 0xEF, 0xCD, 0xAB, 0x05]\n" +
" assert_equal gold_packed, Abi.to_packed(packed), 'packed'\n" +
" end\n" +
"end";
// class
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 0);
// send'('
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 66);
// send(':'
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 67);
// "to_#{
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 68);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 73);
// type
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 74);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 77);
// }"
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 78);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 79);
// , number)
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 80);
// "#{
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 91);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 93);
// type
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 94);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 97);
// } failed on Ruby number -> array"
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 98);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 130);
// assert_equal
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 137);
// 'Failed on signed_to_udword'
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 183);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 210);
}
public void testROR1248()
{
String code = "`wc -l \"#{ f.gsub('\"','\\\"') }\"`\n\n" +
"puts \"syntax hilighting broken here\"";
// `wc -l "#{
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 0); // `
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 7); // "
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 9); // {
// f.gsub(
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 11); // f
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 17); // (
// '"'
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 18); // '
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 20); // '
// ,
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 21); // ,
// '\"'
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 22); // '
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 25); // '
// )
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 26);
// }"`
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 28);
assertContentType(RubyPartitionScanner.RUBY_COMMAND, code, 30);
// puts
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 33);
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, code, 36);
// "syntax hilighting broken here"
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 38);
assertContentType(RubyPartitionScanner.RUBY_STRING, code, 68);
}
public void testCGI()
{
String src = "module TagMaker # :nodoc:\n" +
" \n" +
" # Generate code for an element with required start and end tags.\n" +
" #\n" +
" # - -\n" +
" def nn_element_def(element)\n" +
" nOE_element_def(element, <<-END)\n" +
" if block_given?\n" +
" yield.to_s\n" +
" else\n" +
" \"\"\n" +
" end +\n" +
" \"</#{element.upcase}>\"\n" +
" END\n" +
" end\n" +
" \n" +
" # Generate code for an empty element.\n" +
" #\n" +
" # - O EMPTY\n" +
" def nOE_element_def(element, append = nil)\n" +
" end\n" +
"end";
// module TagMaker # :nodoc:
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, src, 0); // m
assertContentType(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, src, 16); // #
// nOE_element_def(element, <<-END)
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, src, 177); // ,
assertContentType(RubyPartitionScanner.RUBY_STRING, src, 179); // <
assertContentType(RubyPartitionScanner.RUBY_STRING, src, 184); // D
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, src, 185); // )
// </#{element.upcase}>
assertContentType(RubyPartitionScanner.RUBY_STRING, src, 296); // {
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, src, 297); // e
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, src, 310); // e
assertContentType(RubyPartitionScanner.RUBY_STRING, src, 311); // }
// END
assertContentType(RubyPartitionScanner.RUBY_STRING, src, 321); // E
assertContentType(RubyPartitionScanner.RUBY_STRING, src, 323); // D
// end
assertContentType(RubyPartitionScanner.RUBY_DEFAULT, src, 329); // e
}
}