Bug 1357473 - Update Console to the latest spec - part 3 - Console.groupEnd(), r=bgrins, r=nchevobbe

This commit is contained in:
Andrea Marchesini 2017-04-18 10:04:00 +02:00
parent 5c55c3b994
commit 9a89dabb3e
11 changed files with 87 additions and 58 deletions

View File

@ -7,7 +7,7 @@ console.assert(false, "Failing mozscreenshots assertion");
console.group("Grouped Message");
console.log("group message 1");
console.groupEnd("Grouped Message");
console.groupEnd();
console.count("counter");
console.count("counter");

View File

@ -59,14 +59,14 @@ consoleApi.set("console.group('bar')", {
keys: ["console.group('bar')", "console.groupEnd('bar')"],
code: `
console.group("bar");
console.groupEnd("bar");
console.groupEnd();
`});
consoleApi.set("console.groupCollapsed('foo')", {
keys: ["console.groupCollapsed('foo')", "console.groupEnd('foo')"],
code: `
console.groupCollapsed("foo");
console.groupEnd("foo");
console.groupEnd();
`});
consoleApi.set("console.group()", {

View File

@ -546,13 +546,13 @@ stubPreparedMessages.set("console.groupEnd('bar')", new ConsoleMessage({
"id": "1",
"allowRepeating": true,
"source": "console-api",
"timeStamp": 1479159914987,
"timeStamp": 1492540770051,
"type": "endGroup",
"level": "log",
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1479159914987,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1492540770051,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
@ -594,13 +594,13 @@ stubPreparedMessages.set("console.groupEnd('foo')", new ConsoleMessage({
"id": "1",
"allowRepeating": true,
"source": "console-api",
"timeStamp": 1479159916155,
"timeStamp": 1492540770585,
"type": "endGroup",
"level": "log",
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1479159916155,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1492540770585,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
@ -642,13 +642,13 @@ stubPreparedMessages.set("console.groupEnd()", new ConsoleMessage({
"id": "1",
"allowRepeating": true,
"source": "console-api",
"timeStamp": 1479159917526,
"timeStamp": 1491902018685,
"type": "endGroup",
"level": "log",
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1479159917526,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1491902018685,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
@ -723,13 +723,13 @@ stubPreparedMessages.set("console.groupEnd(%cfoo%cbar)", new ConsoleMessage({
"id": "1",
"allowRepeating": true,
"source": "console-api",
"timeStamp": 1491902018671,
"timeStamp": 1492540772083,
"type": "endGroup",
"level": "log",
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1491902018671,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":6,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1492540772083,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":6,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
@ -775,13 +775,13 @@ stubPreparedMessages.set("console.groupEnd(%cfoo%cbaz)", new ConsoleMessage({
"id": "1",
"allowRepeating": true,
"source": "console-api",
"timeStamp": 1491902018685,
"timeStamp": 1492540772669,
"type": "endGroup",
"level": "log",
"messageText": null,
"parameters": null,
"repeat": 1,
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1491902018685,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":6,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"timeStamp\":1492540772669,\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":6,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
@ -1320,13 +1320,11 @@ stubPackets.set("console.group('bar')", {
});
stubPackets.set("console.groupEnd('bar')", {
"from": "server1.conn16.child1/consoleActor2",
"from": "server1.conn0.child1/consoleActor2",
"type": "consoleAPICall",
"message": {
"addonId": "",
"arguments": [
"bar"
],
"arguments": [],
"columnNumber": 1,
"counter": null,
"filename": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
@ -1335,10 +1333,10 @@ stubPackets.set("console.groupEnd('bar')", {
"level": "groupEnd",
"lineNumber": 3,
"private": false,
"styles": [],
"timeStamp": 1479159914987,
"timeStamp": 1492540770051,
"timer": null,
"workerType": "none",
"styles": [],
"category": "webdev"
}
});
@ -1368,13 +1366,11 @@ stubPackets.set("console.groupCollapsed('foo')", {
});
stubPackets.set("console.groupEnd('foo')", {
"from": "server1.conn17.child1/consoleActor2",
"from": "server1.conn0.child1/consoleActor2",
"type": "consoleAPICall",
"message": {
"addonId": "",
"arguments": [
"foo"
],
"arguments": [],
"columnNumber": 1,
"counter": null,
"filename": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
@ -1383,10 +1379,10 @@ stubPackets.set("console.groupEnd('foo')", {
"level": "groupEnd",
"lineNumber": 3,
"private": false,
"styles": [],
"timeStamp": 1479159916155,
"timeStamp": 1492540770585,
"timer": null,
"workerType": "none",
"styles": [],
"category": "webdev"
}
});
@ -1414,7 +1410,7 @@ stubPackets.set("console.group()", {
});
stubPackets.set("console.groupEnd()", {
"from": "server1.conn18.child1/consoleActor2",
"from": "server1.conn0.child1/consoleActor2",
"type": "consoleAPICall",
"message": {
"addonId": "",
@ -1427,10 +1423,10 @@ stubPackets.set("console.groupEnd()", {
"level": "groupEnd",
"lineNumber": 3,
"private": false,
"styles": [],
"timeStamp": 1479159917526,
"timeStamp": 1491902018685,
"timer": null,
"workerType": "none",
"styles": [],
"category": "webdev"
}
});
@ -1501,14 +1497,14 @@ stubPackets.set("console.groupEnd(%cfoo%cbar)", {
"counter": null,
"filename": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
"functionName": "triggerPacket",
"groupName": "",
"groupName": "foo bar",
"level": "groupEnd",
"lineNumber": 6,
"private": false,
"styles": [],
"timeStamp": 1491902018671,
"timeStamp": 1492540772083,
"timer": null,
"workerType": "none",
"styles": [],
"category": "webdev"
}
});
@ -1551,14 +1547,14 @@ stubPackets.set("console.groupEnd(%cfoo%cbaz)", {
"counter": null,
"filename": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
"functionName": "triggerPacket",
"groupName": "",
"groupName": "foo baz",
"level": "groupEnd",
"lineNumber": 6,
"private": false,
"styles": [],
"timeStamp": 1491902018685,
"timeStamp": 1492540772669,
"timer": null,
"workerType": "none",
"styles": [],
"category": "webdev"
}
});

View File

@ -15,13 +15,13 @@
console.log("log-1");
console.group("group-2");
console.log("log-2");
console.groupEnd("group-2");
console.groupEnd();
console.log("log-3");
console.groupEnd("group-1");
console.groupEnd();
console.log("log-4");
console.groupCollapsed("group-3");
console.log("log-5");
console.groupEnd("group-3");
console.groupEnd();
console.log("log-6");
}
</script>

View File

@ -294,7 +294,7 @@ describe("Message reducer:", () => {
currentGroup = getCurrentGroup(getState());
expect(currentGroup).toBe(messages.first().id);
const endBarPacket = stubPackets.get("console.groupEnd('foo')");
const endBarPacket = stubPackets.get("console.groupEnd('bar')");
dispatch(actions.messageAdd(endBarPacket));
messages = getAllMessages(getState());
currentGroup = getCurrentGroup(getState());

View File

@ -40,7 +40,7 @@ add_task(function* () {
}],
});
yield jsterm.execute('console.groupEnd("bug664131a")');
yield jsterm.execute('console.groupEnd()');
yield jsterm.execute('console.log("bug664131-outside")');
yield waitForMessages({

View File

@ -984,7 +984,13 @@ METHOD(Dirxml, "dirxml");
METHOD(Group, "group")
METHOD(GroupCollapsed, "groupCollapsed")
METHOD(GroupEnd, "groupEnd")
/* static */ void
Console::GroupEnd(const GlobalObject& aGlobal)
{
const Sequence<JS::Value> data;
Method(aGlobal, MethodGroupEnd, NS_LITERAL_STRING("groupEnd"), data);
}
/* static */ void
Console::Time(const GlobalObject& aGlobal, const JS::Handle<JS::Value> aTime)
@ -1504,7 +1510,7 @@ Console::PopulateConsoleNotificationInTheTargetScope(JSContext* aCx,
const Sequence<JS::Value>& aArguments,
JSObject* aTargetScope,
JS::MutableHandle<JS::Value> aEventValue,
ConsoleCallData* aData) const
ConsoleCallData* aData)
{
MOZ_ASSERT(aCx);
MOZ_ASSERT(aData);
@ -1577,7 +1583,6 @@ Console::PopulateConsoleNotificationInTheTargetScope(JSContext* aCx,
case MethodAssert:
case MethodGroup:
case MethodGroupCollapsed:
case MethodGroupEnd:
event.mArguments.Construct();
event.mStyles.Construct();
if (NS_WARN_IF(!ProcessArguments(aCx, aArguments,
@ -1597,9 +1602,14 @@ Console::PopulateConsoleNotificationInTheTargetScope(JSContext* aCx,
}
if (aData->mMethodName == MethodGroup ||
aData->mMethodName == MethodGroupCollapsed ||
aData->mMethodName == MethodGroupEnd) {
ComposeGroupName(aCx, event.mArguments.Value(), event.mGroupName);
aData->mMethodName == MethodGroupCollapsed) {
ComposeAndStoreGroupName(aCx, event.mArguments.Value(), event.mGroupName);
}
else if (aData->mMethodName == MethodGroupEnd) {
if (!UnstoreGroupName(event.mGroupName)) {
return false;
}
}
else if (aData->mMethodName == MethodTime && !aArguments.IsEmpty()) {
@ -1966,9 +1976,9 @@ Console::MakeFormatString(nsCString& aFormat, int32_t aInteger,
}
void
Console::ComposeGroupName(JSContext* aCx,
const Sequence<JS::Value>& aData,
nsAString& aName) const
Console::ComposeAndStoreGroupName(JSContext* aCx,
const Sequence<JS::Value>& aData,
nsAString& aName)
{
for (uint32_t i = 0; i < aData.Length(); ++i) {
if (i != 0) {
@ -1988,6 +1998,21 @@ Console::ComposeGroupName(JSContext* aCx,
aName.Append(string);
}
mGroupStack.AppendElement(aName);
}
bool
Console::UnstoreGroupName(nsAString& aName)
{
if (mGroupStack.IsEmpty()) {
return false;
}
uint32_t pos = mGroupStack.Length() - 1;
aName = mGroupStack[pos];
mGroupStack.RemoveElementAt(pos);
return true;
}
bool
@ -2281,7 +2306,7 @@ Console::ReleaseCallData(ConsoleCallData* aCallData)
void
Console::NotifyHandler(JSContext* aCx, const Sequence<JS::Value>& aArguments,
ConsoleCallData* aCallData) const
ConsoleCallData* aCallData)
{
AssertIsOnOwningThread();
MOZ_ASSERT(!NS_IsMainThread());

View File

@ -85,7 +85,7 @@ public:
GroupCollapsed(const GlobalObject& aGlobal, const Sequence<JS::Value>& aData);
static void
GroupEnd(const GlobalObject& aGlobal, const Sequence<JS::Value>& aData);
GroupEnd(const GlobalObject& aGlobal);
static void
Time(const GlobalObject& aGlobal, const JS::Handle<JS::Value> aTime);
@ -200,7 +200,7 @@ private:
void
NotifyHandler(JSContext* aCx,
const Sequence<JS::Value>& aArguments,
ConsoleCallData* aData) const;
ConsoleCallData* aData);
// PopulateConsoleNotificationInTheTargetScope receives aCx and aArguments in
// the same JS compartment and populates the ConsoleEvent object (aValue) in
@ -218,7 +218,7 @@ private:
const Sequence<JS::Value>& aArguments,
JSObject* aTargetScope,
JS::MutableHandle<JS::Value> aValue,
ConsoleCallData* aData) const;
ConsoleCallData* aData);
// If the first JS::Value of the array is a string, this method uses it to
// format a string. The supported sequences are:
@ -248,10 +248,15 @@ private:
char aCh) const;
// Stringify and Concat all the JS::Value in a single string using ' ' as
// separator.
// separator. The new group name will be stored in mGroupStack array.
void
ComposeGroupName(JSContext* aCx, const Sequence<JS::Value>& aData,
nsAString& aName) const;
ComposeAndStoreGroupName(JSContext* aCx, const Sequence<JS::Value>& aData,
nsAString& aName);
// Remove the last group name and return that name. It returns false if
// mGroupStack is empty.
bool
UnstoreGroupName(nsAString& aName);
// StartTimer is called on the owning thread and populates aTimerLabel and
// aTimerValue. It returns false if a JS exception is thrown or if
@ -373,6 +378,9 @@ private:
RefPtr<AnyCallback> mConsoleEventNotifier;
// This is the stack for groupping.
nsTArray<nsString> mGroupStack;
#ifdef DEBUG
PRThread* mOwningThread;
#endif

View File

@ -47,7 +47,7 @@
function testGroups() {
console.groupCollapsed("a", "group");
console.group("b", "group");
console.groupEnd("b", "group");
console.groupEnd();
}
function nativeCallback() {

View File

@ -29,7 +29,7 @@ namespace console {
// Grouping
void group(any... data);
void groupCollapsed(any... data);
void groupEnd(any... data); // TODO: fix in the following patch
void groupEnd();
// Timing
void time(optional any time); // TODO: fix in the following patch

View File

@ -58,7 +58,7 @@ onmessage = function(event) {
function testGroups() {
console.groupCollapsed("a", "group");
console.group("b", "group");
console.groupEnd("b", "group");
console.groupEnd();
}
foobar585956a('omg');