summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Hatch <tim@timhatch.com>2014-10-06 19:09:35 -0700
committerTim Hatch <tim@timhatch.com>2014-10-06 19:09:35 -0700
commit5bbc0d44482b05c9467b737c4e217d5501203fc7 (patch)
tree063257d42ae2d289f7efb03b2ca022e5c9b1c3b3
parent8182f8ecafd849532737331f5b71ed099521f729 (diff)
downloadpygments-5bbc0d44482b05c9467b737c4e217d5501203fc7.tar.gz
Correct accidental punctuation range in RubyLexer.
Fixes #1006
-rw-r--r--pygments/lexers/ruby.py2
-rw-r--r--tests/test_ruby.py52
2 files changed, 53 insertions, 1 deletions
diff --git a/pygments/lexers/ruby.py b/pygments/lexers/ruby.py
index eadb670d..e9973eea 100644
--- a/pygments/lexers/ruby.py
+++ b/pygments/lexers/ruby.py
@@ -306,7 +306,7 @@ class RubyLexer(ExtendedRegexLexer):
(r'[A-Z]\w+', Name.Constant),
# this is needed because ruby attributes can look
# like keywords (class) or like this: ` ?!?
- (r'(\.|::)([a-zA-Z_]\w*[\!\?]?|[*%&^`~+-/\[<>=])',
+ (r'(\.|::)([a-zA-Z_]\w*[\!\?]?|[*%&^`~+\-/\[<>=])',
bygroups(Operator, Name)),
(r'[a-zA-Z_]\w*[\!\?]?', Name),
(r'(\[|\]|\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|'
diff --git a/tests/test_ruby.py b/tests/test_ruby.py
new file mode 100644
index 00000000..8f719d10
--- /dev/null
+++ b/tests/test_ruby.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+"""
+ Basic RubyLexer Test
+ ~~~~~~~~~~~~~~~~~~~~
+
+ :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import unittest
+
+from pygments.token import Operator, Number, Text
+from pygments.lexers import RubyLexer
+
+
+class RubyTest(unittest.TestCase):
+
+ def setUp(self):
+ self.lexer = RubyLexer()
+
+ def testRangeSyntax1(self):
+ fragment = u'1..3\n'
+ tokens = [
+ (Number.Integer, u'1'),
+ (Operator, u'..'),
+ (Number.Integer, u'3'),
+ (Text, u'\n'),
+ ]
+ self.assertEqual(tokens, list(self.lexer.get_tokens(fragment)))
+
+ def testRangeSyntax2(self):
+ fragment = u'1...3\n'
+ tokens = [
+ (Number.Integer, u'1'),
+ (Operator, u'...'),
+ (Number.Integer, u'3'),
+ (Text, u'\n'),
+ ]
+ self.assertEqual(tokens, list(self.lexer.get_tokens(fragment)))
+
+ def testRangeSyntax3(self):
+ fragment = u'1 .. 3\n'
+ tokens = [
+ (Number.Integer, u'1'),
+ (Text, u' '),
+ (Operator, u'..'),
+ (Text, u' '),
+ (Number.Integer, u'3'),
+ (Text, u'\n'),
+ ]
+ self.assertEqual(tokens, list(self.lexer.get_tokens(fragment)))
+