Merged in bmispelon/six (pull request #11)

Add itertools.zip_longest to six.moves.
diff --git a/documentation/index.rst b/documentation/index.rst
index e916489..1f45d50 100644
--- a/documentation/index.rst
+++ b/documentation/index.rst
@@ -409,95 +409,97 @@
 
 Supported renames:
 
-+------------------------------+-------------------------------------+---------------------------------+
-| Name                         | Python 2 name                       | Python 3 name                   |
-+==============================+=====================================+=================================+
-| ``builtins``                 | :mod:`py2:__builtin__`              | :mod:`py3:builtins`             |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``configparser``             | :mod:`py2:ConfigParser`             | :mod:`py3:configparser`         |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``copyreg``                  | :mod:`py2:copy_reg`                 | :mod:`py3:copyreg`              |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``cPickle``                  | :mod:`py2:cPickle`                  | :mod:`py3:pickle`               |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``cStringIO``                | :func:`py2:cStringIO.StringIO`      | :class:`py3:io.StringIO`        |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``email_mime_multipart``     | :mod:`py2:email.MIMEMultipart`      | :mod:`py3:email.mime.multipart` |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``email_mime_text``          | :mod:`py2:email.MIMEText`           | :mod:`py3:email.mime.text`      |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``email_mime_base``          | :mod:`py2:email.MIMEBase`           | :mod:`py3:email.mime.base`      |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``filter``                   | :func:`py2:itertools.ifilter`       | :func:`py3:filter`              |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``http_cookiejar``           | :mod:`py2:cookielib`                | :mod:`py3:http.cookiejar`       |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``http_cookies``             | :mod:`py2:Cookie`                   | :mod:`py3:http.cookies`         |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``html_entities``            | :mod:`py2:htmlentitydefs`           | :mod:`py3:html.entities`        |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``html_parser``              | :mod:`py2:HTMLParser`               | :mod:`py3:html.parser`          |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``http_client``              | :mod:`py2:httplib`                  | :mod:`py3:http.client`          |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``BaseHTTPServer``           | :mod:`py2:BaseHTTPServer`           | :mod:`py3:http.server`          |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``CGIHTTPServer``            | :mod:`py2:CGIHTTPServer`            | :mod:`py3:http.server`          |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``SimpleHTTPServer``         | :mod:`py2:SimpleHTTPServer`         | :mod:`py3:http.server`          |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``input``                    | :func:`py2:raw_input`               | :func:`py3:input`               |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``map``                      | :func:`py2:itertools.imap`          | :func:`py3:map`                 |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``queue``                    | :mod:`py2:Queue`                    | :mod:`py3:queue`                |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``range``                    | :func:`py2:xrange`                  | :func:`py3:range`               |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``reduce``                   | :func:`py2:reduce`                  | :func:`py3:functools.reduce`    |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``reload_module``            | :func:`py2:reload`                  | :func:`py3:imp.reload`          |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``reprlib``                  | :mod:`py2:repr`                     | :mod:`py3:reprlib`              |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``socketserver``             | :mod:`py2:SocketServer`             | :mod:`py3:socketserver`         |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter``                  | :mod:`py2:Tkinter`                  | :mod:`py3:tkinter`              |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_dialog``           | :mod:`py2:Dialog`                   | :mod:`py3:tkinter.dialog`       |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_filedialog``       | :mod:`py2:FileDialog`               | :mod:`py3:tkinter.FileDialog`   |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_scrolledtext``     | :mod:`py2:ScrolledText`             | :mod:`py3:tkinter.scolledtext`  |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_simpledialog``     | :mod:`py2:SimpleDialog`             | :mod:`py2:tkinter.simpledialog` |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_tix``              | :mod:`py2:Tix`                      | :mod:`py3:tkinter.tix`          |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_constants``        | :mod:`py2:Tkconstants`              | :mod:`py3:tkinter.constants`    |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_dnd``              | :mod:`py2:Tkdnd`                    | :mod:`py3:tkinter.dnd`          |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_colorchooser``     | :mod:`py2:tkColorChooser`           | :mod:`py3:tkinter.colorchooser` |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_commondialog``     | :mod:`py2:tkCommonDialog`           | :mod:`py3:tkinter.commondialog` |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_tkfiledialog``     | :mod:`py2:tkFileDialog`             | :mod:`py3:tkinter.filedialog`   |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_font``             | :mod:`py2:tkFont`                   | :mod:`py3:tkinter.font`         |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_messagebox``       | :mod:`py2:tkMessageBox`             | :mod:`py3:tkinter.messagebox`   |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``tkinter_tksimpledialog``   | :mod:`py2:tkSimpleDialog`           | :mod:`py3:tkinter.simpledialog` |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``urllib_robotparser``       | :mod:`py2:robotparser`              | :mod:`py3:urllib.robotparser`   |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``winreg``                   | :mod:`py2:_winreg`                  | :mod:`py3:winreg`               |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``xrange``                   | :func:`py2:xrange`                  | :func:`py3:range`               |
-+------------------------------+-------------------------------------+---------------------------------+
-| ``zip``                      | :func:`py2:itertools.izip`          | :func:`py3:zip`                 |
-+------------------------------+-------------------------------------+---------------------------------+
++------------------------------+-------------------------------------+-----------------------------------+
+| Name                         | Python 2 name                       | Python 3 name                     |
++==============================+=====================================+===================================+
+| ``builtins``                 | :mod:`py2:__builtin__`              | :mod:`py3:builtins`               |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``configparser``             | :mod:`py2:ConfigParser`             | :mod:`py3:configparser`           |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``copyreg``                  | :mod:`py2:copy_reg`                 | :mod:`py3:copyreg`                |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``cPickle``                  | :mod:`py2:cPickle`                  | :mod:`py3:pickle`                 |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``cStringIO``                | :func:`py2:cStringIO.StringIO`      | :class:`py3:io.StringIO`          |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``email_mime_multipart``     | :mod:`py2:email.MIMEMultipart`      | :mod:`py3:email.mime.multipart`   |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``email_mime_text``          | :mod:`py2:email.MIMEText`           | :mod:`py3:email.mime.text`        |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``email_mime_base``          | :mod:`py2:email.MIMEBase`           | :mod:`py3:email.mime.base`        |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``filter``                   | :func:`py2:itertools.ifilter`       | :func:`py3:filter`                |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``http_cookiejar``           | :mod:`py2:cookielib`                | :mod:`py3:http.cookiejar`         |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``http_cookies``             | :mod:`py2:Cookie`                   | :mod:`py3:http.cookies`           |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``html_entities``            | :mod:`py2:htmlentitydefs`           | :mod:`py3:html.entities`          |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``html_parser``              | :mod:`py2:HTMLParser`               | :mod:`py3:html.parser`            |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``http_client``              | :mod:`py2:httplib`                  | :mod:`py3:http.client`            |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``BaseHTTPServer``           | :mod:`py2:BaseHTTPServer`           | :mod:`py3:http.server`            |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``CGIHTTPServer``            | :mod:`py2:CGIHTTPServer`            | :mod:`py3:http.server`            |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``SimpleHTTPServer``         | :mod:`py2:SimpleHTTPServer`         | :mod:`py3:http.server`            |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``input``                    | :func:`py2:raw_input`               | :func:`py3:input`                 |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``map``                      | :func:`py2:itertools.imap`          | :func:`py3:map`                   |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``queue``                    | :mod:`py2:Queue`                    | :mod:`py3:queue`                  |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``range``                    | :func:`py2:xrange`                  | :func:`py3:range`                 |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``reduce``                   | :func:`py2:reduce`                  | :func:`py3:functools.reduce`      |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``reload_module``            | :func:`py2:reload`                  | :func:`py3:imp.reload`            |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``reprlib``                  | :mod:`py2:repr`                     | :mod:`py3:reprlib`                |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``socketserver``             | :mod:`py2:SocketServer`             | :mod:`py3:socketserver`           |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter``                  | :mod:`py2:Tkinter`                  | :mod:`py3:tkinter`                |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_dialog``           | :mod:`py2:Dialog`                   | :mod:`py3:tkinter.dialog`         |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_filedialog``       | :mod:`py2:FileDialog`               | :mod:`py3:tkinter.FileDialog`     |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_scrolledtext``     | :mod:`py2:ScrolledText`             | :mod:`py3:tkinter.scolledtext`    |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_simpledialog``     | :mod:`py2:SimpleDialog`             | :mod:`py2:tkinter.simpledialog`   |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_tix``              | :mod:`py2:Tix`                      | :mod:`py3:tkinter.tix`            |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_constants``        | :mod:`py2:Tkconstants`              | :mod:`py3:tkinter.constants`      |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_dnd``              | :mod:`py2:Tkdnd`                    | :mod:`py3:tkinter.dnd`            |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_colorchooser``     | :mod:`py2:tkColorChooser`           | :mod:`py3:tkinter.colorchooser`   |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_commondialog``     | :mod:`py2:tkCommonDialog`           | :mod:`py3:tkinter.commondialog`   |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_tkfiledialog``     | :mod:`py2:tkFileDialog`             | :mod:`py3:tkinter.filedialog`     |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_font``             | :mod:`py2:tkFont`                   | :mod:`py3:tkinter.font`           |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_messagebox``       | :mod:`py2:tkMessageBox`             | :mod:`py3:tkinter.messagebox`     |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``tkinter_tksimpledialog``   | :mod:`py2:tkSimpleDialog`           | :mod:`py3:tkinter.simpledialog`   |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``urllib_robotparser``       | :mod:`py2:robotparser`              | :mod:`py3:urllib.robotparser`     |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``winreg``                   | :mod:`py2:_winreg`                  | :mod:`py3:winreg`                 |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``xrange``                   | :func:`py2:xrange`                  | :func:`py3:range`                 |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``zip``                      | :func:`py2:itertools.izip`          | :func:`py3:zip`                   |
++------------------------------+-------------------------------------+-----------------------------------+
+| ``zip_longest``              | :func:`py2:itertools.izip_longest`  | :func:`py3:itertools.zip_longest` |
++------------------------------+-------------------------------------+-----------------------------------+
 
 Advanced - Customizing renames
 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
diff --git a/six.py b/six.py
index 8a877b1..a2c690f 100644
--- a/six.py
+++ b/six.py
@@ -146,6 +146,7 @@
     MovedAttribute("StringIO", "StringIO", "io"),
     MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"),
     MovedAttribute("zip", "itertools", "builtins", "izip", "zip"),
+    MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"),
 
     MovedModule("builtins", "__builtin__"),
     MovedModule("configparser", "ConfigParser"),
diff --git a/test_six.py b/test_six.py
index 4d7a233..e2131e7 100644
--- a/test_six.py
+++ b/test_six.py
@@ -114,6 +114,14 @@
     assert six.advance_iterator(zip(range(2), range(2))) == (0, 0)
 
 
+def test_zip_longest():
+    from six.moves import zip_longest
+    it = zip_longest(range(2), range(1))
+
+    assert six.advance_iterator(it) == (0, 0)
+    assert six.advance_iterator(it) == (1, None)
+
+
 class TestCustomizedMoves:
 
     def teardown_method(self, meth):