- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / api_test / tabs / connect / test.js
1 // tabs api test
2 // browser_tests.exe --gtest_filter=ExtensionApiTest.TabConnect
3
4 // We have a bunch of places where we need to remember some state from one
5 // test (or setup code) to subsequent tests.
6 var testTabId = null;
7
8 var pass = chrome.test.callbackPass;
9 var assertEq = chrome.test.assertEq;
10 var assertTrue = chrome.test.assertTrue;
11 var callbackFail = chrome.test.callbackFail;
12 var fail = chrome.test.fail;
13
14 chrome.test.getConfig(function(config) {
15
16   chrome.test.runTests([
17     function setupConnect() {
18       // The web page that our content script will be injected into.
19       var relativePath = '/extensions/api_test/tabs/basics/relative.html';
20       var testUrl =
21           ['http://localhost:PORT'.replace(/PORT/, config.testServer.port),
22            relativePath].join('');
23
24       setupWindow([testUrl], pass(function(winId, tabIds) {
25         testTabId = tabIds[0];
26         waitForAllTabs(pass());
27       }));
28     },
29
30     function connectMultipleConnects() {
31       var connectCount = 0;
32       function connect10() {
33         var port = chrome.tabs.connect(testTabId);
34         chrome.test.listenOnce(port.onMessage, function(msg) {
35           assertEq(++connectCount, msg.connections);
36           if (connectCount < 10)
37             connect10();
38         });
39         port.postMessage("GET");
40       }
41       connect10();
42     },
43
44     function connectName() {
45       var name = "akln3901n12la";
46       var port = chrome.tabs.connect(testTabId, {"name": name});
47       chrome.test.listenOnce(port.onMessage, function(msg) {
48         assertEq(name, msg.name);
49
50         var port = chrome.tabs.connect(testTabId);
51         chrome.test.listenOnce(port.onMessage, function(msg) {
52           assertEq('', msg.name);
53         });
54         port.postMessage("GET");
55       });
56       port.postMessage("GET");
57     },
58
59     function connectPostMessageTypes() {
60       var port = chrome.tabs.connect(testTabId);
61       // Test the content script echoes the message back.
62       var echoMsg = {"num": 10, "string": "hi", "array": [1,2,3,4,5],
63                      "obj":{"dec": 1.0}};
64       chrome.test.listenOnce(port.onMessage, function(msg) {
65         assertEq(echoMsg.num, msg.num);
66         assertEq(echoMsg.string, msg.string);
67         assertEq(echoMsg.array[4], msg.array[4]);
68         assertEq(echoMsg.obj.dec, msg.obj.dec);
69       });
70       port.postMessage(echoMsg);
71     },
72
73     function connectPostManyMessages() {
74       var port = chrome.tabs.connect(testTabId);
75       var count = 0;
76       var done = chrome.test.listenForever(port.onMessage, function(msg) {
77         assertEq(count++, msg);
78         if (count == 999) {
79           done();
80         }
81       });
82       for (var i = 0; i < 1000; i++) {
83         port.postMessage(i);
84       }
85     },
86
87     function connectNoTab() {
88       // Expect a disconnect event when you connect to a non-existant tab, and
89       // once disconnected, expect an error while trying to post messages.
90       var errorMsg = 
91         "Could not establish connection. Receiving end does not exist.";
92       chrome.tabs.create({}, pass(function(tab) {
93         chrome.tabs.remove(tab.id, pass(function() {
94           var p = chrome.tabs.connect(tab.id);
95           p.onDisconnect.addListener(callbackFail(errorMsg, function() {
96             try {
97               p.postMessage();
98               fail("Error should have been thrown.");
99             } catch (e) {
100               // Do nothing- an exception should be thrown.
101             }
102           }));
103         }));
104       }));
105     },
106
107     function sendRequest() {
108       var request = "test";
109       chrome.tabs.sendRequest(testTabId, request, pass(function(response) {
110         assertEq(request, response);
111       }));
112     },
113
114     function sendRequestNoTab() {
115       var errorMsg = 
116         "Could not establish connection. Receiving end does not exist.";
117       chrome.tabs.create({}, pass(function(tab) {
118         chrome.tabs.remove(tab.id, pass(function() {
119           chrome.tabs.sendRequest(tab.id, "test", callbackFail(errorMsg));
120         }));
121       }));
122     }
123   ]);
124 });