Index: chrome/test/data/extensions/api_test/README.txt |
diff --git a/chrome/test/data/extensions/api_test/README.txt b/chrome/test/data/extensions/api_test/README.txt |
new file mode 100755 |
index 0000000000000000000000000000000000000000..7e1bc05e47185d68af577b816b6cd9c6ae104809 |
--- /dev/null |
+++ b/chrome/test/data/extensions/api_test/README.txt |
@@ -0,0 +1,88 @@ |
+This directory contains extensions which are unit tests for the extension API. |
+These tests are written using the extension API test framework, which allows |
+us to do end-to-end testing of extension API in a browser_test. The general way |
+these tests work is to run code in an extension when they're loaded and to post |
+a pass or fail notification back up to the C++ unit test which then reports the |
+success or failure. In the common case, the extension runs many subtests and |
+then reports up a single pass or fail. This case is made easy by the test |
+framework. |
+ |
+To write a new test: |
+ |
+(1) Add a new browser_test which is a subclass of ExtensionApiTest. This test |
+should call RunExtensionTest("extension_name") to kick off the test. See |
+extension_bookmarks_apitest.cc for an example. |
+ |
+(2) Create an extension of in this directory of the same name as the extension |
+that your test referred to ("extension_name" above). This test should load |
+either a background page or a toolstrip which immediately starts its test. |
+ |
+(3) In your extension page, call chrome.test.runTests with an array of |
+functions which represent your subtests. Each of these functions will most |
+likely call one or more async extension APIs. Wrap the callback for each of |
+these API calls with chrome.test.callbackPass or chrome.test.callbackFail |
+depending on whether or not you're expecting the callback to generate an error |
+or not. That's it. The test framework notices when each of these callbacks |
+is registered and keeps a count of what's expected. When the right number of |
+callbacks has fired, that test function will be marked as passed or failed and |
+the next one will be called. Some other useful helper functions you'll use are |
+chrome.test.assertTrue(expr, message), chrome.test.assertEq(left, right) and |
+chrome.test.log(message). |
+ |
+Here's an example: |
+ |
+chrome.test.runTests([ |
+ function getTree() { |
+ chrome.bookmarks.getTree(chrome.test.callbackPass(function(results) { |
+ chrome.test.assertTrue(compareTrees(results, expected), |
+ "getTree() result != expected"); |
+ })); |
+ }, |
+ |
+ function get() { |
+ chrome.bookmarks.get("1", chrome.test.callbackPass(function(results) { |
+ chrome.test.assertTrue(compareNode(results[0], expected[0].children[0])); |
+ })); |
+ chrome.bookmarks.get("42", chrome.test.callbackFail(function(){}, "Can't find bookmark for id.")); |
+ }, |
+ |
+ function getArray() { |
+ chrome.bookmarks.get(["1", "2"], chrome.test.callbackPass(function(results) { |
+ chrome.test.assertTrue(compareNode(results[0], expected[0].children[0]), |
+ "get() result != expected"); |
+ chrome.test.assertTrue(compareNode(results[1], expected[0].children[1]), |
+ "get() result != expected"); |
+ })); |
+ } |
+]); |
+ |
+// compareNode and compareTrees are helper functions that the bookmarks test |
+// uses for convenience. They're not really relevant to the framework itself. |
+ |
+Note that chrome.test.callbackFail takes a second argument which is the error |
+message that it expects to get when the callback fails (chrome.extension.lastError.message). |
+ |
+Here's what the output of this test might look like: |
+[==========] Running 1 test from 1 test case. |
+[----------] Global test environment set-up. |
+[----------] 1 test from ExtensionApiTest |
+[ RUN ] ExtensionApiTest.Bookmarks |
+( RUN ) getTree |
+( SUCCESS ) |
+( RUN ) get |
+( SUCCESS ) |
+( RUN ) getArray |
+( SUCCESS ) |
+Got EXTENSION_TEST_PASSED notification. |
+[ OK ] ExtensionApiTest.DISABLED_Bookmarks (2472 ms) |
+[----------] 1 test from ExtensionApiTest (2475 ms total) |
+ |
+[----------] Global test environment tear-down |
+[==========] 1 test from 1 test case ran. (2482 ms total) |
+[ PASSED ] 1 test. |
+1 test run |
+0 test failed |
+ |
+Note the RUN/SUCCESS messages in () - these are the subtests that are run in |
+the extension itself. Anything printed with chrome.test.log() will also display |
+in stdout of the browser test (and hence in the buildbot output for that test). |