python 3 port: automated changes by a slightly modified python-modernize

(replacing unicode with six.text_type, but not replacing u"" by six.u(""))
diff --git a/jinja2/testsuite/__init__.py b/jinja2/testsuite/__init__.py
index 1f10ef6..e39e877 100644
--- a/jinja2/testsuite/__init__.py
+++ b/jinja2/testsuite/__init__.py
@@ -59,7 +59,7 @@
     def assert_traceback_matches(self, callback, expected_tb):
         try:
             callback()
-        except Exception, e:
+        except Exception as e:
             tb = format_exception(*sys.exc_info())
             if re.search(expected_tb.strip(), ''.join(tb)) is None:
                 raise self.fail('Traceback did not match:\n\n%s\nexpected:\n%s'
diff --git a/jinja2/testsuite/api.py b/jinja2/testsuite/api.py
index c8f9634..5385437 100644
--- a/jinja2/testsuite/api.py
+++ b/jinja2/testsuite/api.py
@@ -16,6 +16,7 @@
      StrictUndefined, UndefinedError, meta, \
      is_undefined, Template, DictLoader
 from jinja2.utils import Cycler
+import six
 
 env = Environment()
 
@@ -50,8 +51,8 @@
         c = Cycler(*items)
         for item in items + items:
             assert c.current == item
-            assert c.next() == item
-        c.next()
+            assert six.advance_iterator(c) == item
+        six.advance_iterator(c)
         assert c.current == 2
         c.reset()
         assert c.current == 1
@@ -107,8 +108,8 @@
     def test_find_refererenced_templates(self):
         ast = env.parse('{% extends "layout.html" %}{% include helper %}')
         i = meta.find_referenced_templates(ast)
-        assert i.next() == 'layout.html'
-        assert i.next() is None
+        assert six.advance_iterator(i) == 'layout.html'
+        assert six.advance_iterator(i) is None
         assert list(i) == []
 
         ast = env.parse('{% extends "layout.html" %}'
@@ -141,21 +142,21 @@
     def test_basic_streaming(self):
         tmpl = env.from_string("<ul>{% for item in seq %}<li>{{ loop.index "
                                "}} - {{ item }}</li>{%- endfor %}</ul>")
-        stream = tmpl.stream(seq=range(4))
-        self.assert_equal(stream.next(), '<ul>')
-        self.assert_equal(stream.next(), '<li>1 - 0</li>')
-        self.assert_equal(stream.next(), '<li>2 - 1</li>')
-        self.assert_equal(stream.next(), '<li>3 - 2</li>')
-        self.assert_equal(stream.next(), '<li>4 - 3</li>')
-        self.assert_equal(stream.next(), '</ul>')
+        stream = tmpl.stream(seq=list(range(4)))
+        self.assert_equal(six.advance_iterator(stream), '<ul>')
+        self.assert_equal(six.advance_iterator(stream), '<li>1 - 0</li>')
+        self.assert_equal(six.advance_iterator(stream), '<li>2 - 1</li>')
+        self.assert_equal(six.advance_iterator(stream), '<li>3 - 2</li>')
+        self.assert_equal(six.advance_iterator(stream), '<li>4 - 3</li>')
+        self.assert_equal(six.advance_iterator(stream), '</ul>')
 
     def test_buffered_streaming(self):
         tmpl = env.from_string("<ul>{% for item in seq %}<li>{{ loop.index "
                                "}} - {{ item }}</li>{%- endfor %}</ul>")
-        stream = tmpl.stream(seq=range(4))
+        stream = tmpl.stream(seq=list(range(4)))
         stream.enable_buffering(size=3)
-        self.assert_equal(stream.next(), u'<ul><li>1 - 0</li><li>2 - 1</li>')
-        self.assert_equal(stream.next(), u'<li>3 - 2</li><li>4 - 3</li></ul>')
+        self.assert_equal(six.advance_iterator(stream), u'<ul><li>1 - 0</li><li>2 - 1</li>')
+        self.assert_equal(six.advance_iterator(stream), u'<li>3 - 2</li><li>4 - 3</li></ul>')
 
     def test_streaming_behavior(self):
         tmpl = env.from_string("")
@@ -222,7 +223,7 @@
     def test_none_gives_proper_error(self):
         try:
             Environment().getattr(None, 'split')()
-        except UndefinedError, e:
+        except UndefinedError as e:
             assert e.message == "'None' has no attribute 'split'"
         else:
             assert False, 'expected exception'
@@ -230,7 +231,7 @@
     def test_object_repr(self):
         try:
             Undefined(obj=42, name='upper')()
-        except UndefinedError, e:
+        except UndefinedError as e:
             assert e.message == "'int object' has no attribute 'upper'"
         else:
             assert False, 'expected exception'
diff --git a/jinja2/testsuite/core_tags.py b/jinja2/testsuite/core_tags.py
index 2b5f580..409a579 100644
--- a/jinja2/testsuite/core_tags.py
+++ b/jinja2/testsuite/core_tags.py
@@ -22,7 +22,7 @@
 
     def test_simple(self):
         tmpl = env.from_string('{% for item in seq %}{{ item }}{% endfor %}')
-        assert tmpl.render(seq=range(10)) == '0123456789'
+        assert tmpl.render(seq=list(range(10))) == '0123456789'
 
     def test_else(self):
         tmpl = env.from_string('{% for item in seq %}XXX{% else %}...{% endfor %}')
@@ -55,12 +55,12 @@
         tmpl = env.from_string('''{% for item in seq %}{{
             loop.cycle('<1>', '<2>') }}{% endfor %}{%
             for item in seq %}{{ loop.cycle(*through) }}{% endfor %}''')
-        output = tmpl.render(seq=range(4), through=('<1>', '<2>'))
+        output = tmpl.render(seq=list(range(4)), through=('<1>', '<2>'))
         assert output == '<1><2>' * 4
 
     def test_scope(self):
         tmpl = env.from_string('{% for item in seq %}{% endfor %}{{ item }}')
-        output = tmpl.render(seq=range(10))
+        output = tmpl.render(seq=list(range(10)))
         assert not output
 
     def test_varlen(self):
diff --git a/jinja2/testsuite/ext.py b/jinja2/testsuite/ext.py
index 6ca6c22..65251a5 100644
--- a/jinja2/testsuite/ext.py
+++ b/jinja2/testsuite/ext.py
@@ -18,6 +18,7 @@
 from jinja2.ext import Extension
 from jinja2.lexer import Token, count_newlines
 from jinja2.utils import next
+import six
 
 # 2.x / 3.x
 try:
@@ -222,7 +223,7 @@
         original = Environment(extensions=[TestExtension])
         overlay = original.overlay()
         for env in original, overlay:
-            for ext in env.extensions.itervalues():
+            for ext in six.itervalues(env.extensions):
                 assert ext.environment is env
 
     def test_preprocessor_extension(self):
diff --git a/jinja2/testsuite/filters.py b/jinja2/testsuite/filters.py
index b037e24..cd95463 100644
--- a/jinja2/testsuite/filters.py
+++ b/jinja2/testsuite/filters.py
@@ -12,6 +12,9 @@
 from jinja2.testsuite import JinjaTestCase
 
 from jinja2 import Markup, Environment
+import six
+from six.moves import map
+from six.moves import zip
 
 env = Environment()
 
@@ -47,14 +50,14 @@
     def test_batch(self):
         tmpl = env.from_string("{{ foo|batch(3)|list }}|"
                                "{{ foo|batch(3, 'X')|list }}")
-        out = tmpl.render(foo=range(10))
+        out = tmpl.render(foo=list(range(10)))
         assert out == ("[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]|"
                        "[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 'X', 'X']]")
 
     def test_slice(self):
         tmpl = env.from_string('{{ foo|slice(3)|list }}|'
                                '{{ foo|slice(3, "X")|list }}')
-        out = tmpl.render(foo=range(10))
+        out = tmpl.render(foo=list(range(10)))
         assert out == ("[[0, 1, 2, 3], [4, 5, 6], [7, 8, 9]]|"
                        "[[0, 1, 2, 3], [4, 5, 6, 'X'], [7, 8, 9, 'X']]")
 
@@ -109,7 +112,7 @@
 
     def test_first(self):
         tmpl = env.from_string('{{ foo|first }}')
-        out = tmpl.render(foo=range(10))
+        out = tmpl.render(foo=list(range(10)))
         assert out == '0'
 
     def test_float(self):
@@ -155,7 +158,7 @@
 
     def test_last(self):
         tmpl = env.from_string('''{{ foo|last }}''')
-        out = tmpl.render(foo=range(10))
+        out = tmpl.render(foo=list(range(10)))
         assert out == '9'
 
     def test_length(self):
@@ -171,12 +174,12 @@
     def test_pprint(self):
         from pprint import pformat
         tmpl = env.from_string('''{{ data|pprint }}''')
-        data = range(1000)
+        data = list(range(1000))
         assert tmpl.render(data=data) == pformat(data)
 
     def test_random(self):
         tmpl = env.from_string('''{{ seq|random }}''')
-        seq = range(100)
+        seq = list(range(100))
         for _ in range(10):
             assert int(tmpl.render(seq=seq)) in seq
 
@@ -188,7 +191,7 @@
     def test_string(self):
         x = [1, 2, 3, 4, 5]
         tmpl = env.from_string('''{{ obj|string }}''')
-        assert tmpl.render(obj=x) == unicode(x)
+        assert tmpl.render(obj=x) == six.text_type(x)
 
     def test_title(self):
         tmpl = env.from_string('''{{ "foo bar"|title }}''')
@@ -297,7 +300,7 @@
             def __init__(self, value):
                 self.value = value
             def __unicode__(self):
-                return unicode(self.value)
+                return six.text_type(self.value)
         tmpl = env.from_string('''{{ items|sort(attribute='value')|join }}''')
         assert tmpl.render(items=map(Magic, [3, 2, 4, 1])) == '1234'
 
diff --git a/jinja2/testsuite/imports.py b/jinja2/testsuite/imports.py
index 1cb12cb..3db9008 100644
--- a/jinja2/testsuite/imports.py
+++ b/jinja2/testsuite/imports.py
@@ -83,7 +83,7 @@
         self.assert_raises(TemplateNotFound, t.render)
         try:
             t.render()
-        except TemplatesNotFound, e:
+        except TemplatesNotFound as e:
             assert e.templates == ['missing', 'missing2']
             assert e.name == 'missing2'
         else:
diff --git a/jinja2/testsuite/inheritance.py b/jinja2/testsuite/inheritance.py
index 355aa0c..7909b03 100644
--- a/jinja2/testsuite/inheritance.py
+++ b/jinja2/testsuite/inheritance.py
@@ -148,7 +148,7 @@
         }))
         t = env.from_string('{% extends "master.html" %}{% block item %}'
                             '{{ item }}{% endblock %}')
-        assert t.render(seq=range(5)) == '[0][1][2][3][4]'
+        assert t.render(seq=list(range(5))) == '[0][1][2][3][4]'
 
     def test_super_in_scoped_block(self):
         env = Environment(loader=DictLoader({
@@ -157,7 +157,7 @@
         }))
         t = env.from_string('{% extends "master.html" %}{% block item %}'
                             '{{ super() }}|{{ item * 2 }}{% endblock %}')
-        assert t.render(seq=range(5)) == '[0|0][1|2][2|4][3|6][4|8]'
+        assert t.render(seq=list(range(5))) == '[0|0][1|2][2|4][3|6][4|8]'
 
     def test_scoped_block_after_inheritance(self):
         env = Environment(loader=DictLoader({
diff --git a/jinja2/testsuite/lexnparse.py b/jinja2/testsuite/lexnparse.py
index 77b76ec..e162463 100644
--- a/jinja2/testsuite/lexnparse.py
+++ b/jinja2/testsuite/lexnparse.py
@@ -15,6 +15,7 @@
 
 from jinja2 import Environment, Template, TemplateSyntaxError, \
      UndefinedError, nodes
+import six
 
 env = Environment()
 
@@ -42,7 +43,7 @@
         env = Environment('{%', '%}', '${', '}')
         tmpl = env.from_string('''{% for item in seq
             %}${{'foo': item}|upper}{% endfor %}''')
-        assert tmpl.render(seq=range(3)) == "{'FOO': 0}{'FOO': 1}{'FOO': 2}"
+        assert tmpl.render(seq=list(range(3))) == "{'FOO': 0}{'FOO': 1}{'FOO': 2}"
 
     def test_comments(self):
         env = Environment('<!--', '-->', '{', '}')
@@ -52,7 +53,7 @@
   <li>{item}</li>
 <!--- endfor -->
 </ul>''')
-        assert tmpl.render(seq=range(3)) == ("<ul>\n  <li>0</li>\n  "
+        assert tmpl.render(seq=list(range(3))) == ("<ul>\n  <li>0</li>\n  "
                                              "<li>1</li>\n  <li>2</li>\n</ul>")
 
     def test_string_escapes(self):
@@ -68,11 +69,11 @@
 
     def test_operators(self):
         from jinja2.lexer import operators
-        for test, expect in operators.iteritems():
+        for test, expect in six.iteritems(operators):
             if test in '([{}])':
                 continue
             stream = env.lexer.tokenize('{{ %s }}' % test)
-            stream.next()
+            six.advance_iterator(stream)
             assert stream.current.type == expect
 
     def test_normalizing(self):
@@ -92,7 +93,7 @@
 <? for item in seq -?>
     <?= item ?>
 <?- endfor ?>''')
-        assert tmpl.render(seq=range(5)) == '01234'
+        assert tmpl.render(seq=list(range(5))) == '01234'
 
     def test_erb_syntax(self):
         env = Environment('<%', '%>', '<%=', '%>', '<%#', '%>')
@@ -101,7 +102,7 @@
 <% for item in seq -%>
     <%= item %>
 <%- endfor %>''')
-        assert tmpl.render(seq=range(5)) == '01234'
+        assert tmpl.render(seq=list(range(5))) == '01234'
 
     def test_comment_syntax(self):
         env = Environment('<!--', '-->', '${', '}', '<!--#', '-->')
@@ -110,7 +111,7 @@
 <!-- for item in seq --->
     ${item}
 <!--- endfor -->''')
-        assert tmpl.render(seq=range(5)) == '01234'
+        assert tmpl.render(seq=list(range(5))) == '01234'
 
     def test_balancing(self):
         tmpl = env.from_string('''{{{'foo':'bar'}.foo}}''')
@@ -130,8 +131,8 @@
 % for item in seq:
     ${item}
 % endfor''')
-        assert [int(x.strip()) for x in tmpl.render(seq=range(5)).split()] == \
-               range(5)
+        assert [int(x.strip()) for x in tmpl.render(seq=list(range(5))).split()] == \
+               list(range(5))
 
         env = Environment('<%', '%>', '${', '}', '<%#', '%>', '%', '##')
         tmpl = env.from_string('''\
@@ -139,8 +140,8 @@
 % for item in seq:
     ${item} ## the rest of the stuff
 % endfor''')
-        assert [int(x.strip()) for x in tmpl.render(seq=range(5)).split()] == \
-                range(5)
+        assert [int(x.strip()) for x in tmpl.render(seq=list(range(5))).split()] == \
+                list(range(5))
 
     def test_line_syntax_priority(self):
         # XXX: why is the whitespace there in front of the newline?
@@ -166,7 +167,7 @@
         def assert_error(code, expected):
             try:
                 Template(code)
-            except TemplateSyntaxError, e:
+            except TemplateSyntaxError as e:
                 assert str(e) == expected, 'unexpected error message'
             else:
                 assert False, 'that was supposed to be an error'
@@ -335,9 +336,9 @@
         assert tmpl.render() == 'foobarbaz'
 
     def test_notin(self):
-        bar = xrange(100)
+        bar = range(100)
         tmpl = env.from_string('''{{ not 42 in bar }}''')
-        assert tmpl.render(bar=bar) == unicode(not 42 in bar)
+        assert tmpl.render(bar=bar) == six.text_type(not 42 in bar)
 
     def test_implicit_subscribed_tuple(self):
         class Foo(object):
diff --git a/jinja2/testsuite/regression.py b/jinja2/testsuite/regression.py
index 4db9076..5c3633f 100644
--- a/jinja2/testsuite/regression.py
+++ b/jinja2/testsuite/regression.py
@@ -14,6 +14,8 @@
 
 from jinja2 import Template, Environment, DictLoader, TemplateSyntaxError, \
      TemplateNotFound, PrefixLoader
+from six.moves import map
+from six.moves import zip
 
 env = Environment()
 
@@ -118,7 +120,7 @@
 
         ''')
 
-        assert tmpl.render().split() == map(unicode, range(1, 11)) * 5
+        assert tmpl.render().split() == map(unicode, list(range(1, 11))) * 5
 
     def test_weird_inline_comment(self):
         env = Environment(line_statement_prefix='%')
@@ -242,7 +244,7 @@
         }))
         try:
             env.get_template('foo/bar.html')
-        except TemplateNotFound, e:
+        except TemplateNotFound as e:
             assert e.name == 'foo/bar.html'
         else:
             assert False, 'expected error here'
diff --git a/jinja2/testsuite/security.py b/jinja2/testsuite/security.py
index 4518eac..c892fed 100644
--- a/jinja2/testsuite/security.py
+++ b/jinja2/testsuite/security.py
@@ -18,6 +18,7 @@
 from jinja2 import Markup, escape
 from jinja2.exceptions import SecurityError, TemplateSyntaxError, \
      TemplateRuntimeError
+import six
 
 
 class PrivateStuff(object):
@@ -76,7 +77,7 @@
         # adding two strings should escape the unsafe one
         unsafe = '<script type="application/x-some-script">alert("foo");</script>'
         safe = Markup('<em>username</em>')
-        assert unsafe + safe == unicode(escape(unsafe)) + unicode(safe)
+        assert unsafe + safe == six.text_type(escape(unsafe)) + six.text_type(safe)
 
         # string interpolations are safe to use too
         assert Markup('<em>%s</em>') % '<bad user>' == \
@@ -114,7 +115,7 @@
                             '{{ say_hello("<blink>foo</blink>") }}')
         escaped_out = '<p>Hello &lt;blink&gt;foo&lt;/blink&gt;!</p>'
         assert t.render() == escaped_out
-        assert unicode(t.module) == escaped_out
+        assert six.text_type(t.module) == escaped_out
         assert escape(t.module) == escaped_out
         assert t.module.say_hello('<blink>foo</blink>') == escaped_out
         assert escape(t.module.say_hello('<blink>foo</blink>')) == escaped_out
@@ -136,7 +137,7 @@
             t = env.from_string('{{ %s }}' % expr)
             try:
                 t.render(ctx)
-            except TemplateRuntimeError, e:
+            except TemplateRuntimeError as e:
                 pass
             else:
                 self.fail('expected runtime error')
@@ -153,7 +154,7 @@
             t = env.from_string('{{ %s }}' % expr)
             try:
                 t.render(ctx)
-            except TemplateRuntimeError, e:
+            except TemplateRuntimeError as e:
                 pass
             else:
                 self.fail('expected runtime error')
diff --git a/jinja2/testsuite/utils.py b/jinja2/testsuite/utils.py
index be2e902..cab9b09 100644
--- a/jinja2/testsuite/utils.py
+++ b/jinja2/testsuite/utils.py
@@ -60,8 +60,8 @@
 
     def test_markup_leaks(self):
         counts = set()
-        for count in xrange(20):
-            for item in xrange(1000):
+        for count in range(20):
+            for item in range(1000):
                 escape("foo")
                 escape("<foo>")
                 escape(u"foo")