forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			121 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const TEST_JSON_URL = URL_ROOT_SSL + "chunked_json.sjs";
 | |
| 
 | |
| add_task(async function() {
 | |
|   info("Test chunked JSON started");
 | |
| 
 | |
|   await addJsonViewTab(TEST_JSON_URL, {
 | |
|     appReadyState: "interactive",
 | |
|     docReadyState: "loading",
 | |
|   });
 | |
| 
 | |
|   is(
 | |
|     await getElementCount(".rawdata.is-active"),
 | |
|     1,
 | |
|     "The Raw Data tab is selected."
 | |
|   );
 | |
| 
 | |
|   // Write some text and check that it is displayed.
 | |
|   await write("[");
 | |
|   await checkText();
 | |
| 
 | |
|   // Repeat just in case.
 | |
|   await write("1,");
 | |
|   await checkText();
 | |
| 
 | |
|   is(
 | |
|     await getElementCount("button.prettyprint"),
 | |
|     0,
 | |
|     "There is no pretty print button during load"
 | |
|   );
 | |
| 
 | |
|   await selectJsonViewContentTab("json");
 | |
|   is(
 | |
|     await getElementText(".jsonPanelBox > .panelContent"),
 | |
|     "",
 | |
|     "There is no JSON tree"
 | |
|   );
 | |
| 
 | |
|   await selectJsonViewContentTab("headers");
 | |
|   ok(
 | |
|     await getElementText(".headersPanelBox .netInfoHeadersTable"),
 | |
|     "The headers table has been filled."
 | |
|   );
 | |
| 
 | |
|   // Write some text without being in Raw Data, then switch tab and check.
 | |
|   await write("2");
 | |
|   await selectJsonViewContentTab("rawdata");
 | |
|   await checkText();
 | |
| 
 | |
|   // Add an array, when counting rows we will ensure it has been expanded automatically.
 | |
|   await write(",[3]]");
 | |
|   await checkText();
 | |
| 
 | |
|   // Close the connection.
 | |
| 
 | |
|   // When the ready state of the JSON View app changes, it triggers the
 | |
|   // custom event "AppReadyStateChange".
 | |
|   const appReady = BrowserTestUtils.waitForContentEvent(
 | |
|     gBrowser.selectedBrowser,
 | |
|     "AppReadyStateChange",
 | |
|     true,
 | |
|     null,
 | |
|     true
 | |
|   );
 | |
|   await server("close");
 | |
|   await appReady;
 | |
| 
 | |
|   is(await getElementCount(".json.is-active"), 1, "The JSON tab is selected.");
 | |
| 
 | |
|   is(
 | |
|     await getElementCount(".jsonPanelBox .treeTable .treeRow"),
 | |
|     4,
 | |
|     "There is a tree with 4 rows."
 | |
|   );
 | |
| 
 | |
|   await selectJsonViewContentTab("rawdata");
 | |
|   await checkText();
 | |
| 
 | |
|   is(
 | |
|     await getElementCount("button.prettyprint"),
 | |
|     1,
 | |
|     "There is a pretty print button."
 | |
|   );
 | |
|   await clickJsonNode("button.prettyprint");
 | |
|   await checkText(JSON.stringify(JSON.parse(data), null, 2));
 | |
| });
 | |
| 
 | |
| let data = " ";
 | |
| async function write(text) {
 | |
|   data += text;
 | |
|   const onJsonViewUpdated = SpecialPowers.spawn(
 | |
|     gBrowser.selectedBrowser,
 | |
|     [],
 | |
|     () => {
 | |
|       return new Promise(resolve => {
 | |
|         const observer = new content.MutationObserver(() => resolve());
 | |
|         observer.observe(content.wrappedJSObject.JSONView.json, {
 | |
|           characterData: true,
 | |
|         });
 | |
|       });
 | |
|     }
 | |
|   );
 | |
|   await server("write", text);
 | |
|   await onJsonViewUpdated;
 | |
| }
 | |
| async function checkText(text = data) {
 | |
|   is(await getElementText(".textPanelBox .data"), text, "Got the right text.");
 | |
| }
 | |
| 
 | |
| function server(action, value) {
 | |
|   return new Promise(resolve => {
 | |
|     const xhr = new XMLHttpRequest();
 | |
|     xhr.open("GET", TEST_JSON_URL + "?" + action + "=" + value);
 | |
|     xhr.addEventListener("load", resolve, { once: true });
 | |
|     xhr.send();
 | |
|   });
 | |
| }
 | 
