extern const char* kCSSRawProperties[]; const char** et = &kCSSRawProperties[0]; const char** end = &kCSSRawProperties[eCSSProperty_COUNT];
extern const char* const kCSSRawProperties[]; const char*const* et = &kCSSRawProperties[0]; const char*const* end = &kCSSRawProperties[eCSSProperty_COUNT];
int TestProps() {  int rv = 0;  nsCSSProperty id;  nsCSSProperty 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* kCSSRawProperties[];  const char** et = &kCSSRawProperties[0];  const char** end = &kCSSRawProperties[eCSSProperty_COUNT];  index = eCSSProperty_UNKNOWN;  while (et < end) {    char tagName[100];    PL_strcpy(tagName, *et);    index = nsCSSProperty(PRInt32(index) + 1);    id = nsCSSProps::LookupProperty(nsCString(tagName));    if (id == eCSSProperty_UNKNOWN) {      printf("bug: can't find '%s'\n", tagName);      rv = -1;    }    if (id != index) {      printf("bug: name='%s' id=%d index=%d\n", tagName, id, index);      rv = -1;    }    // 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_ConvertASCIItoUCS2(tagName));    if (id < 0) {      printf("bug: can't find '%s'\n", tagName);      rv = -1;    }    if (index != id) {      printf("bug: name='%s' id=%d index=%d\n", tagName, id, index);      rv = -1;    }    et++;  }  // Now make sure we don't find some garbage  for (int i = 0; i < (int) (sizeof(kJunkNames) / sizeof(const char*)); i++) {    const char* tag = kJunkNames[i];    id = nsCSSProps::LookupProperty(nsCAutoString(tag));    if (id >= 0) {      printf("bug: found '%s'\n", tag ? tag : "(null)");      rv = -1;    }  }  nsCSSProps::ReleaseTable();  return rv;}