diff --git modules/path/path.test modules/path/path.test
index 538ce5d..77cf631 100644
--- modules/path/path.test
+++ modules/path/path.test
@@ -503,3 +503,62 @@ class PathMonolingualTestCase extends DrupalWebTestCase {
     $this->assertText(t('Add language'), 'Page contains the add language text');
   }
 }
+
+/**
+ * Tests that path hooks are invoked.
+ */
+class PathHooksTestCase extends DrupalWebTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Path hooks',
+      'description' => 'Test the hooks invoked when a path is inserted, updated, or deleted.',
+      'group' => 'Path'
+    );
+  }
+
+  function setUp() {
+    parent::setUp('path_test');
+    $web_user = $this->drupalCreateUser(array('create page content', 'delete own page content', 'administer url aliases', 'create url aliases'));
+    $this->drupalLogin($web_user);
+  }
+
+  function testPathHooks() {
+    // Create test node.
+    $node1 = $this->drupalCreateNode();
+
+    // Generate two test aliases.
+    $alias1 = $this->randomName(8);
+    $alias2 = $this->randomName(8);
+
+    // Insert aliases and test that hook_path_insert() is called.
+    $edit = array();
+    $edit['source'] = 'node/' . $node1->nid;
+    $edit['alias'] = $alias1;
+    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
+    $this->assertRaw('path_test_path_insert(): ' . $edit['alias'] . ' => ' . $edit['source'], t('hook_path_insert() was called.'));
+
+    $edit['alias'] = $alias2;
+    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
+
+    // Extact the path ID from the second path alias.
+    $inserted_path = variable_get('path_test_inserted_path', array());
+    $pid2 = $inserted_path['pid'];
+
+    // Update the second path alias and test that hook_path_update() is called.
+    $edit['alias'] = $alias2 = $this->randomName(8);
+    $this->drupalPost('admin/config/search/path/edit/' . $pid2, $edit, t('Save'));
+    $this->assertRaw('path_test_path_update(): ' . $edit['alias'] . ' => ' . $edit['source'], t('hook_path_update() was called.'));
+
+    // Delete the node and test that hook_path_delete() is called once for each
+    // path alias.
+    $this->drupalPost('node/' . $node1->nid . '/delete', array(), t('Delete'));
+    $this->assertRaw('path_test_path_delete(): ' . $alias1 . ' => node/' . $node1->nid, t('hook_path_delete() was called for the first path alias.'));
+    $this->assertRaw('path_test_path_delete(): ' . $alias2 . ' => node/' . $node1->nid, t('hook_path_delete() was called for the second path alias.'));
+
+    // Test that hook_path_delete() is not called if the node has no path
+    // aliases.
+    $node2 = $this->drupalCreateNode();
+    $this->drupalPost('node/' . $node2->nid . '/delete', array(), t('Delete'));
+    $this->assertNoRaw('path_test_path_delete()', t('hook_path_delete() was not called.'));
+  }
+}
diff --git modules/path/tests/path_test.info modules/path/tests/path_test.info
new file mode 100644
index 0000000..d5b3346
--- /dev/null
+++ modules/path/tests/path_test.info
@@ -0,0 +1,7 @@
+; $Id$
+name = "Path module tests"
+description = "Support module for path testing."
+package = Testing
+version = VERSION
+core = 7.x
+hidden = TRUE
diff --git modules/path/tests/path_test.module modules/path/tests/path_test.module
new file mode 100644
index 0000000..32fa7b4
--- /dev/null
+++ modules/path/tests/path_test.module
@@ -0,0 +1,32 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Dummy module implementing path related hooks to test API interaction with
+ * the path module.
+ */
+
+/**
+ * Implements hook_path_delete().
+ */
+function path_test_path_delete($path) {
+  drupal_set_message('path_test_path_delete(): ' . $path['alias'] . ' => ' . $path['source']);
+}
+
+/**
+ * Implements hook_path_insert().
+ */
+function path_test_path_insert($path) {
+  drupal_set_message('path_test_path_insert(): ' . $path['alias'] . ' => ' . $path['source']);
+
+  // Save the path to a variable so the test routine can use the path ID.
+  variable_set('path_test_inserted_path', $path);
+}
+
+/**
+ * Implements hook_path_update().
+ */
+function path_test_path_update($path) {
+  drupal_set_message('path_test_path_update(): ' . $path['alias'] . ' => ' . $path['source']);
+}
