⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 176535 in webkit


Ignore:
Timestamp:
Nov 24, 2014, 9:26:27 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Fix the parsing and re-serialization of :lang pseudo class selector when it has multiple arguments with same value
https://bugs.webkit.org/show_bug.cgi?id=139013

Patch by Dhi Aurrahman <diorahman@rockybars.com> on 2014-11-24
Reviewed by Benjamin Poulain.

Source/WebCore:

Fix the parsing and re-serialization of :lang pseudo class selector when
it has multiple arguments with same value e.g. :lang(en, en, en). Previously,
given :lang(en, en, en) selector, it was parsed and reserialized
as :lang(enenen) instead of :lang(en, en, en)

Related test on parsing and re-serialization of css selectors is updated.

  • css/CSSSelector.cpp:

(WebCore::appendArgumentList):

LayoutTests:

Updated tests to verify the parsing and serialization of :lang pseudo class
selector when it has multiple arguments with same value.

  • fast/css/css-selector-text-expected.txt: Updated to cover fix.
  • fast/css/css-selector-text.html: Updated to cover fix.
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r176528 r176535  
     12014-11-24  Dhi Aurrahman  <diorahman@rockybars.com>
     2
     3        Fix the parsing and re-serialization of :lang pseudo class selector when it has multiple arguments with same value
     4        https://bugs.webkit.org/show_bug.cgi?id=139013
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Updated tests to verify the parsing and serialization of :lang pseudo class
     9        selector when it has multiple arguments with same value.
     10
     11        * fast/css/css-selector-text-expected.txt: Updated to cover fix.
     12        * fast/css/css-selector-text.html: Updated to cover fix.
     13
    1142014-11-24  Antti Koivisto  <antti@apple.com>
    215
  • trunk/LayoutTests/fast/css/css-selector-text-expected.txt

    r176241 r176535  
    5555PASS parseThenSerializeRule(':lang(de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang(de-CH, it-CH, fr-CH, rm-CH) { }'
    5656PASS parseThenSerializeRule(':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH) { }') is ':lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH) { }'
     57
     58PASS parseThenSerializeRule(':lang(a, a, a) { }') is ':lang(a, a, a) { }'
     59PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(en, en, en) { }'
     60PASS parseThenSerializeRule(':lang(en-us, en-us, en-us) { }') is ':lang(en-us, en-us, en-us) { }'
     61PASS parseThenSerializeRule(':lang(de-DE-1996, de-DE-1996, de-DE-1996) { }') is ':lang(de-DE-1996, de-DE-1996, de-DE-1996) { }'
     62PASS parseThenSerializeRule(':lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996) { }') is ':lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996) { }'
     63PASS parseThenSerializeRule(':lang(java, java, java) { }') is ':lang(java, java, java) { }'
    5764
    5865PASS parseThenSerializeRule(':not(a) { }') is ':not(a) { }'
     
    276283PASS parseThenSerializeRule(':lang(a,b,    c    ) { }') is ':lang(a, b, c) { }'
    277284
     285PASS parseThenSerializeRule(':lang(en, en, en) { }') is ':lang(en, en, en) { }'
     286PASS parseThenSerializeRule(':lang(en,en,en) { }') is ':lang(en, en, en) { }'
     287PASS parseThenSerializeRule(':lang(en,en,    en) { }') is ':lang(en, en, en) { }'
     288PASS parseThenSerializeRule(':lang(en,    en,en) { }') is ':lang(en, en, en) { }'
     289PASS parseThenSerializeRule(':lang(en,    en,en    ) { }') is ':lang(en, en, en) { }'
     290PASS parseThenSerializeRule(':lang(    en,    en,en    ) { }') is ':lang(en, en, en) { }'
     291PASS parseThenSerializeRule(':lang(en,   en,   en) { }') is ':lang(en, en, en) { }'
     292PASS parseThenSerializeRule(':lang(    en,    en,    en) { }') is ':lang(en, en, en) { }'
     293PASS parseThenSerializeRule(':lang(    en,    en,    en    ) { }') is ':lang(en, en, en) { }'
     294PASS parseThenSerializeRule(':lang(    en    ,    en    ,   en    ) { }') is ':lang(en, en, en) { }'
     295PASS parseThenSerializeRule(':lang(    en,en,en    ) { }') is ':lang(en, en, en) { }'
     296
    278297PASS parseThenSerializeRule(':lang() { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText').
    279298PASS parseThenSerializeRule(':lang(12, b, c) { }') threw exception TypeError: undefined is not an object (evaluating 'styleElement.sheet.cssRules[0].cssText').
  • trunk/LayoutTests/fast/css/css-selector-text.html

    r176241 r176535  
    8888testSelectorRoundTrip(":lang(de-CH, it-CH, fr-CH, rm-CH)");
    8989testSelectorRoundTrip(":lang(de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996, de-CH, it-CH, fr-CH, rm-CH)");
     90
     91debug('')
     92
     93testSelectorRoundTrip(":lang(a, a, a)");
     94testSelectorRoundTrip(":lang(en, en, en)");
     95testSelectorRoundTrip(":lang(en-us, en-us, en-us)");
     96testSelectorRoundTrip(":lang(de-DE-1996, de-DE-1996, de-DE-1996)");
     97testSelectorRoundTrip(":lang(de-Latn-DE-1996, de-Latn-DE-1996, de-Latn-DE-1996)");
     98testSelectorRoundTrip(":lang(java, java, java)");
    9099
    91100debug('');
     
    353362debug('');
    354363
     364shouldBe("parseThenSerializeRule(':lang(en, en, en) { }')", "':lang(en, en, en) { }'");
     365shouldBe("parseThenSerializeRule(':lang(en,en,en) { }')", "':lang(en, en, en) { }'");
     366shouldBe("parseThenSerializeRule(':lang(en,en,    en) { }')", "':lang(en, en, en) { }'");
     367shouldBe("parseThenSerializeRule(':lang(en,    en,en) { }')", "':lang(en, en, en) { }'");
     368shouldBe("parseThenSerializeRule(':lang(en,    en,en    ) { }')", "':lang(en, en, en) { }'");
     369shouldBe("parseThenSerializeRule(':lang(    en,    en,en    ) { }')", "':lang(en, en, en) { }'");
     370shouldBe("parseThenSerializeRule(':lang(en,   en,   en) { }')", "':lang(en, en, en) { }'");
     371shouldBe("parseThenSerializeRule(':lang(    en,    en,    en) { }')", "':lang(en, en, en) { }'");
     372shouldBe("parseThenSerializeRule(':lang(    en,    en,    en    ) { }')", "':lang(en, en, en) { }'");
     373shouldBe("parseThenSerializeRule(':lang(    en    ,    en    ,   en    ) { }')", "':lang(en, en, en) { }'");
     374shouldBe("parseThenSerializeRule(':lang(    en,en,en    ) { }')", "':lang(en, en, en) { }'");
     375
     376debug('');
     377
    355378shouldThrow("parseThenSerializeRule(':lang() { }')");
    356379shouldThrow("parseThenSerializeRule(':lang(12, b, c) { }')");
  • trunk/Source/WebCore/ChangeLog

    r176534 r176535  
     12014-11-24  Dhi Aurrahman  <diorahman@rockybars.com>
     2
     3        Fix the parsing and re-serialization of :lang pseudo class selector when it has multiple arguments with same value
     4        https://bugs.webkit.org/show_bug.cgi?id=139013
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Fix the parsing and re-serialization of :lang pseudo class selector when
     9        it has multiple arguments with same value e.g. :lang(en, en, en). Previously,
     10        given :lang(en, en, en) selector, it was parsed and reserialized
     11        as :lang(enenen) instead of :lang(en, en, en)
     12
     13        Related test on parsing and re-serialization of css selectors is updated.
     14
     15        * css/CSSSelector.cpp:
     16        (WebCore::appendArgumentList):
     17
    1182014-11-24  Zalan Bujtas  <zalan@apple.com>
    219
  • trunk/Source/WebCore/css/CSSSelector.cpp

    r176529 r176535  
    340340static void appendArgumentList(StringBuilder& str, const Vector<AtomicString>& argumentList)
    341341{
    342     const AtomicString& lastArgument = argumentList.last();
    343     for (const AtomicString argument : argumentList) {
    344         str.append(argument);
    345         if (argument != lastArgument)
     342    unsigned argumentListSize = argumentList.size();
     343    for (unsigned i = 0; i < argumentListSize; ++i) {
     344        str.append(argumentList[i]);
     345        if (i != argumentListSize - 1)
    346346            str.appendLiteral(", ");
    347347    }
Note: See TracChangeset for help on using the changeset viewer.