diff options
Diffstat (limited to 'layout/style/test/TestCSSPropertyLookup.cpp')
-rw-r--r-- | layout/style/test/TestCSSPropertyLookup.cpp | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/layout/style/test/TestCSSPropertyLookup.cpp b/layout/style/test/TestCSSPropertyLookup.cpp new file mode 100644 index 000000000..60a15311c --- /dev/null +++ b/layout/style/test/TestCSSPropertyLookup.cpp @@ -0,0 +1,172 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <stdio.h> +#include "plstr.h" +#include "nsCSSProps.h" +#include "nsCSSKeywords.h" +#include "nsString.h" +#include "nsXPCOM.h" + +using namespace mozilla; + +static const char* const kJunkNames[] = { + nullptr, + "", + "123", + "backgroundz", + "zzzzzz", + "#@$&@#*@*$@$#" +}; + +static bool +TestProps() +{ + bool success = true; + nsCSSPropertyID id; + nsCSSPropertyID index; + + // Everything appears to assert if we don't do this first... + nsCSSProps::AddRefTable(); + + // First make sure we can find all of the tags that are supposed to + // be in the table. Futz with the case to make sure any case will + // work + extern const char* const kCSSRawProperties[]; + const char*const* et = &kCSSRawProperties[0]; + const char*const* end = &kCSSRawProperties[eCSSProperty_COUNT]; + index = eCSSProperty_UNKNOWN; + while (et < end) { + char tagName[100]; + PL_strcpy(tagName, *et); + index = nsCSSPropertyID(int32_t(index) + 1); + + id = nsCSSProps::LookupProperty(nsCString(tagName), + CSSEnabledState::eIgnoreEnabledState); + if (id == eCSSProperty_UNKNOWN) { + printf("bug: can't find '%s'\n", tagName); + success = false; + } + if (id != index) { + printf("bug: name='%s' id=%d index=%d\n", tagName, id, index); + success = false; + } + + // fiddle with the case to make sure we can still find it + if (('a' <= tagName[0]) && (tagName[0] <= 'z')) { + tagName[0] = tagName[0] - 32; + } + id = nsCSSProps::LookupProperty(NS_ConvertASCIItoUTF16(tagName), + CSSEnabledState::eIgnoreEnabledState); + if (id < 0) { + printf("bug: can't find '%s'\n", tagName); + success = false; + } + if (index != id) { + printf("bug: name='%s' id=%d index=%d\n", tagName, id, index); + success = false; + } + et++; + } + + // Now make sure we don't find some garbage + for (int i = 0; i < (int) (sizeof(kJunkNames) / sizeof(const char*)); i++) { + const char* const tag = kJunkNames[i]; + id = nsCSSProps::LookupProperty(nsAutoCString(tag), + CSSEnabledState::eIgnoreEnabledState); + if (id >= 0) { + printf("bug: found '%s'\n", tag ? tag : "(null)"); + success = false; + } + } + + nsCSSProps::ReleaseTable(); + return success; +} + +bool +TestKeywords() +{ + nsCSSKeywords::AddRefTable(); + + bool success = true; + nsCSSKeyword id; + nsCSSKeyword index; + + extern const char* const kCSSRawKeywords[]; + + // First make sure we can find all of the tags that are supposed to + // be in the table. Futz with the case to make sure any case will + // work + const char*const* et = &kCSSRawKeywords[0]; + const char*const* end = &kCSSRawKeywords[eCSSKeyword_COUNT - 1]; + index = eCSSKeyword_UNKNOWN; + while (et < end) { + char tagName[512]; + char* underscore = &(tagName[0]); + + PL_strcpy(tagName, *et); + while (*underscore) { + if (*underscore == '_') { + *underscore = '-'; + } + underscore++; + } + index = nsCSSKeyword(int32_t(index) + 1); + + id = nsCSSKeywords::LookupKeyword(nsCString(tagName)); + if (id <= eCSSKeyword_UNKNOWN) { + printf("bug: can't find '%s'\n", tagName); + success = false; + } + if (id != index) { + printf("bug: name='%s' id=%d index=%d\n", tagName, id, index); + success = false; + } + + // fiddle with the case to make sure we can still find it + if (('a' <= tagName[0]) && (tagName[0] <= 'z')) { + tagName[0] = tagName[0] - 32; + } + id = nsCSSKeywords::LookupKeyword(nsCString(tagName)); + if (id <= eCSSKeyword_UNKNOWN) { + printf("bug: can't find '%s'\n", tagName); + success = false; + } + if (id != index) { + printf("bug: name='%s' id=%d index=%d\n", tagName, id, index); + success = false; + } + et++; + } + + // Now make sure we don't find some garbage + for (int i = 0; i < (int) (sizeof(kJunkNames) / sizeof(const char*)); i++) { + const char* const tag = kJunkNames[i]; + id = nsCSSKeywords::LookupKeyword(nsAutoCString(tag)); + if (eCSSKeyword_UNKNOWN < id) { + printf("bug: found '%s'\n", tag ? tag : "(null)"); + success = false; + } + } + + nsCSSKeywords::ReleaseTable(); + return success; +} + +int +main(void) +{ + nsresult rv = NS_InitXPCOM2(nullptr, nullptr, nullptr); + NS_ENSURE_SUCCESS(rv, 2); + + bool testOK = true; + testOK &= TestProps(); + testOK &= TestKeywords(); + + rv = NS_ShutdownXPCOM(nullptr); + NS_ENSURE_SUCCESS(rv, 2); + + return testOK ? 0 : 1; +} |