diff --git a/setup.py b/setup.py
index 0094901..a62a301 100644
--- a/setup.py
+++ b/setup.py
@@ -47,7 +47,7 @@
       url='http://www.makotemplates.org/',
       license='MIT',
       packages=find_packages('.', exclude=['examples*', 'test*']),
-      tests_require=['nose >= 0.11', 'mock'],
+      tests_require=['nose >= 0.11', 'mock', 'Babel'],
       test_suite="nose.collector",
       zip_safe=False,
       install_requires=install_requires,
diff --git a/test/ext/__init__.py b/test/ext/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/ext/__init__.py
diff --git a/test/ext/test_babelplugin.py b/test/ext/test_babelplugin.py
new file mode 100644
index 0000000..e4b78d2
--- /dev/null
+++ b/test/ext/test_babelplugin.py
@@ -0,0 +1,48 @@
+import io
+import mock
+import unittest
+from mako.ext.babelplugin import _split_comment
+from mako.ext.babelplugin import extract
+from mako.ext.babelplugin import extract_nodes
+
+
+class Test_extract(unittest.TestCase):
+    def test_parse_and_invoke_extract_nodes(self):
+        input = io.BytesIO(b'<p>Hello world</p>')
+        with mock.patch('mako.ext.babelplugin.extract_nodes') as extract_nodes:
+            list(extract(input, [], [], {}))
+            extract_nodes.assert_called_once_with([mock.ANY], [], [], {})
+            self.assertEqual(
+                    extract_nodes.mock_calls[0][1][0][0].content,
+                    u'<p>Hello world</p>')
+
+    def test_parse_python_expression(self):
+        input = io.BytesIO(b'<p>${_("Message")}</p>')
+        messages = list(extract(input, ['_'], [], {}))
+        self.assertEqual(messages, [(1, '_', u'Message', [])])
+
+    def test_python_gettext_call(self):
+        input = io.BytesIO(b'<p>${_("Message")}</p>')
+        messages = list(extract(input, ['_'], [], {}))
+        self.assertEqual(messages, [(1, '_', u'Message', [])])
+
+    def test_translator_comment(self):
+        input = io.BytesIO(b'''
+        <p>
+          ## TRANSLATORS: This is a comment.
+          ${_("Message")}
+        </p>''')
+        messages = list(extract(input, ['_'], ['TRANSLATORS:'], {}))
+        self.assertEqual(
+                messages,
+                [(4, '_', u'Message', [u'TRANSLATORS: This is a comment.'])])
+
+
+class Test_split_comment(unittest.TestCase):
+    def test_empty_input(self):
+        self.assertEqual(_split_comment(1, ''), [])
+
+    def test_multiple_lines(self):
+        self.assertEqual(
+                _split_comment(5, 'one\ntwo\nthree'),
+                [(5, 'one'), (6, 'two'), (7, 'three')])
