1998-04-13 20:24:54 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Netscape Public License
|
|
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
|
|
* http://www.mozilla.org/NPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* NPL.
|
|
|
|
*
|
|
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
|
|
* Communications Corporation. Portions created by Netscape are
|
|
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
|
|
* Reserved.
|
|
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "nscore.h"
|
|
|
|
#include "nsIAtom.h"
|
|
|
|
#include "nsCRT.h"
|
|
|
|
#include "nsHTMLParts.h"
|
|
|
|
#include "nsIHTMLContent.h"
|
|
|
|
#include "nsIHTMLAttributes.h"
|
|
|
|
#include "nsITextContent.h"
|
|
|
|
#include "nsIUnicharInputStream.h"
|
|
|
|
#include "nsString.h"
|
|
|
|
#include "nsIDocument.h"
|
|
|
|
#include "nsISupportsArray.h"
|
|
|
|
#include "nsDocument.h"
|
|
|
|
#include "nsIURL.h"
|
1998-09-06 00:21:40 +00:00
|
|
|
#include "nsIDOMText.h"
|
1998-04-13 20:24:54 +00:00
|
|
|
|
|
|
|
void testAttributes(nsIHTMLContent* content) {
|
|
|
|
nsIAtom* sBORDER = NS_NewAtom("BORDER");
|
|
|
|
nsIAtom* sWIDTH = NS_NewAtom("WIDTH");
|
|
|
|
nsIAtom* sHEIGHT = NS_NewAtom("HEIGHT");
|
|
|
|
nsIAtom* sSRC = NS_NewAtom("SRC");
|
|
|
|
nsIAtom* sBAD = NS_NewAtom("BADATTRIBUTE");
|
|
|
|
nsString sempty("");
|
|
|
|
nsString sfoo_gif("foo.gif");
|
|
|
|
|
1998-08-29 20:20:38 +00:00
|
|
|
content->SetAttribute(sBORDER, nsHTMLValue::kNull, PR_FALSE);
|
|
|
|
content->SetAttribute(sWIDTH, nsHTMLValue(5, eHTMLUnit_Pixel), PR_FALSE);
|
|
|
|
content->SetAttribute(sHEIGHT, sempty, PR_FALSE);
|
|
|
|
content->SetAttribute(sSRC, sfoo_gif, PR_FALSE);
|
1998-04-13 20:24:54 +00:00
|
|
|
|
|
|
|
nsHTMLValue ret;
|
1998-08-29 20:20:38 +00:00
|
|
|
nsresult rv;
|
1998-04-13 20:24:54 +00:00
|
|
|
rv = content->GetAttribute(sBORDER, ret);
|
1998-08-29 20:20:38 +00:00
|
|
|
if ((rv != NS_CONTENT_ATTR_NO_VALUE) || (ret.GetUnit() != eHTMLUnit_Null)) {
|
1998-04-13 20:24:54 +00:00
|
|
|
printf("test 0 failed\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = content->GetAttribute(sWIDTH, ret);
|
1998-08-29 20:20:38 +00:00
|
|
|
if ((rv != NS_CONTENT_ATTR_HAS_VALUE) || (! (ret == nsHTMLValue(5, eHTMLUnit_Pixel)))) {
|
1998-04-13 20:24:54 +00:00
|
|
|
printf("test 1 failed\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = content->GetAttribute(sBAD, ret);
|
1998-08-29 20:20:38 +00:00
|
|
|
if (rv != NS_CONTENT_ATTR_NOT_THERE) {
|
1998-04-13 20:24:54 +00:00
|
|
|
printf("test 2 failed\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
// Same, except different case strings
|
|
|
|
|
|
|
|
nsString sborder("border");
|
|
|
|
nsString strRet;
|
|
|
|
rv = ((nsIContent*)content)->GetAttribute(sborder, strRet);
|
1998-08-29 20:20:38 +00:00
|
|
|
if (rv != NS_CONTENT_ATTR_NO_VALUE) {
|
1998-04-13 20:24:54 +00:00
|
|
|
printf("test 3 (case comparison) failed\n");
|
|
|
|
}
|
|
|
|
|
1998-09-25 17:55:03 +00:00
|
|
|
content->UnsetAttribute(sWIDTH, PR_FALSE);
|
1998-04-13 20:24:54 +00:00
|
|
|
|
|
|
|
nsISupportsArray* allNames;
|
|
|
|
NS_NewISupportsArray(&allNames);
|
|
|
|
|
1998-08-29 20:20:38 +00:00
|
|
|
PRInt32 na;
|
|
|
|
content->GetAllAttributeNames(allNames, na);
|
|
|
|
if (na != 3) {
|
1998-04-13 20:24:54 +00:00
|
|
|
printf("test 5 (unset attriubte) failed\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
PRBool borderFound = PR_FALSE,heightFound = PR_FALSE,srcFound = PR_FALSE;
|
|
|
|
for (int n = 0; n < 3; n++) {
|
|
|
|
const nsIAtom* ident = (const nsIAtom*)allNames->ElementAt(n);
|
|
|
|
if (sBORDER == ident) {
|
|
|
|
borderFound = PR_TRUE;
|
|
|
|
}
|
|
|
|
if (sHEIGHT == ident) {
|
|
|
|
heightFound = PR_TRUE;
|
|
|
|
}
|
|
|
|
if (sSRC == ident) {
|
|
|
|
srcFound = PR_TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!(borderFound && heightFound && srcFound)) {
|
|
|
|
printf("test 6 failed\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_RELEASE(allNames);
|
|
|
|
|
|
|
|
NS_RELEASE(sBORDER);
|
|
|
|
NS_RELEASE(sWIDTH);
|
|
|
|
NS_RELEASE(sHEIGHT);
|
|
|
|
NS_RELEASE(sSRC);
|
|
|
|
}
|
|
|
|
|
|
|
|
void testStrings(nsIDocument* aDoc) {
|
|
|
|
printf("begin string tests\n");
|
|
|
|
|
|
|
|
PRBool val;
|
|
|
|
// regular Equals
|
|
|
|
val = (nsString("mrString")).Equals(nsString("mrString"));
|
|
|
|
if (PR_TRUE != val) {
|
|
|
|
printf("test 0 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrString")).Equals(nsString("MRString"));
|
|
|
|
if (PR_FALSE != val) {
|
|
|
|
printf("test 1 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrString")).Equals(nsString("mrStri"));
|
|
|
|
if (PR_FALSE != val) {
|
|
|
|
printf("test 2 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrStri")).Equals(nsString("mrString"));
|
|
|
|
if (PR_FALSE != val) {
|
|
|
|
printf("test 3 failed\n");
|
|
|
|
}
|
|
|
|
// EqualsIgnoreCase
|
|
|
|
val = (nsString("mrString")).EqualsIgnoreCase("mrString");
|
|
|
|
if (PR_TRUE != val) {
|
|
|
|
printf("test 4 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrString")).EqualsIgnoreCase("mrStrinG");
|
|
|
|
if (PR_TRUE != val) {
|
|
|
|
printf("test 5 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrString")).EqualsIgnoreCase("mrStri");
|
|
|
|
if (PR_FALSE != val) {
|
|
|
|
printf("test 6 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrStri")).EqualsIgnoreCase("mrString");
|
|
|
|
if (PR_FALSE != val) {
|
|
|
|
printf("test 7 failed\n");
|
|
|
|
}
|
|
|
|
// String vs. Ident
|
|
|
|
val = (nsString("mrString")).EqualsIgnoreCase(NS_NewAtom("mrString"));
|
|
|
|
if (PR_TRUE != val) {
|
|
|
|
printf("test 8 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrString")).EqualsIgnoreCase(NS_NewAtom("MRStrINg"));
|
|
|
|
if (PR_TRUE != val) {
|
|
|
|
printf("test 9 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrString")).EqualsIgnoreCase(NS_NewAtom("mrStri"));
|
|
|
|
if (PR_FALSE != val) {
|
|
|
|
printf("test 10 failed\n");
|
|
|
|
}
|
|
|
|
val = (nsString("mrStri")).EqualsIgnoreCase(NS_NewAtom("mrString"));
|
|
|
|
if (PR_FALSE != val) {
|
|
|
|
printf("test 11 failed\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("string tests complete\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
class MyDocument : public nsDocument {
|
|
|
|
public:
|
|
|
|
MyDocument();
|
1998-07-01 11:21:41 +00:00
|
|
|
NS_IMETHOD StartDocumentLoad(nsIURL *aUrl,
|
1998-07-18 21:47:56 +00:00
|
|
|
nsIContentViewerContainer* aContainer,
|
1998-07-01 11:21:41 +00:00
|
|
|
nsIStreamListener **aDocListener)
|
1998-06-01 19:53:38 +00:00
|
|
|
{
|
|
|
|
return NS_OK;
|
|
|
|
}
|
1998-04-13 20:24:54 +00:00
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual ~MyDocument();
|
|
|
|
};
|
|
|
|
|
|
|
|
MyDocument::MyDocument()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
MyDocument::~MyDocument()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
int main(int argc, char** argv)
|
|
|
|
{
|
|
|
|
// Create Byte2Unicode converter
|
|
|
|
nsresult rv;
|
|
|
|
nsIB2UConverter *converter;
|
|
|
|
rv = NS_NewB2UConverter(&converter,NULL);
|
|
|
|
if (NS_OK != rv) {
|
|
|
|
printf("Could not create converter.\n");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create a unicode string
|
|
|
|
static const char* srcStr = "This is some meaningless text about nothing at all";
|
|
|
|
PRInt32 rv2;
|
|
|
|
PRInt32 origSrcLen = nsCRT::strlen((char *)srcStr);
|
|
|
|
const int BUFFER_LENGTH = 100;
|
|
|
|
PRUnichar destStr[BUFFER_LENGTH];
|
|
|
|
PRInt32 srcLen = origSrcLen;
|
|
|
|
PRInt32 destLen = BUFFER_LENGTH;
|
|
|
|
rv2 = converter->Convert(destStr,0,destLen,srcStr,0,srcLen);
|
|
|
|
if ((NS_OK != rv2) || (srcLen < origSrcLen)) {
|
|
|
|
printf("Failed to convert all characters to unicode.\n");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
delete converter;
|
|
|
|
|
|
|
|
// Create test document.
|
|
|
|
MyDocument *myDoc = new MyDocument();
|
|
|
|
|
|
|
|
testStrings(myDoc);
|
|
|
|
|
|
|
|
// Create a new text content object.
|
|
|
|
nsIHTMLContent *text;
|
1998-09-06 00:21:40 +00:00
|
|
|
rv = NS_NewTextNode(&text);
|
1998-04-13 20:24:54 +00:00
|
|
|
if (NS_OK != rv) {
|
|
|
|
printf("Could not create text content.\n");
|
|
|
|
return -1;
|
|
|
|
}
|
1998-09-06 00:21:40 +00:00
|
|
|
|
|
|
|
nsIDOMText* txt = nsnull;
|
|
|
|
static NS_DEFINE_IID(kIDOMTextIID, NS_IDOMTEXT_IID);
|
|
|
|
text->QueryInterface(kIDOMTextIID, (void**) &txt);
|
|
|
|
nsAutoString tmp(destStr, destLen);
|
|
|
|
txt->Append(tmp);
|
|
|
|
NS_RELEASE(txt);
|
|
|
|
|
1998-08-29 20:20:38 +00:00
|
|
|
PRBool canHaveKids;
|
|
|
|
text->CanContainChildren(canHaveKids);
|
|
|
|
NS_ASSERTION(!canHaveKids,"");
|
1998-04-13 20:24:54 +00:00
|
|
|
text->SetDocument(myDoc);
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
// Query ITextContent interface
|
|
|
|
static NS_DEFINE_IID(kITextContentIID, NS_ITEXTCONTENT_IID);
|
|
|
|
nsITextContent* textContent;
|
|
|
|
rv = text->QueryInterface(kITextContentIID,(void **)&textContent);
|
|
|
|
if (NS_OK != rv) {
|
|
|
|
printf("Created text content does not have the ITextContent interface.\n");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Print the contents.
|
|
|
|
nsAutoString stringBuf;
|
|
|
|
textContent->GetText(stringBuf,0,textContent->GetLength());
|
|
|
|
if (!stringBuf.Equals(nsString(destStr,destLen))) {
|
|
|
|
printf("something wrong with the text in a text content\n");
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// Create a simple container.
|
|
|
|
nsIHTMLContent* container;
|
|
|
|
nsIAtom* li = NS_NewAtom("LI");
|
|
|
|
|
1998-09-06 00:21:40 +00:00
|
|
|
rv = NS_NewHTMLLIElement(&container,li);
|
1998-04-13 20:24:54 +00:00
|
|
|
if (NS_OK != rv) {
|
|
|
|
printf("Could not create container.\n");
|
|
|
|
return -1;
|
|
|
|
}
|
1998-08-29 20:20:38 +00:00
|
|
|
container->CanContainChildren(canHaveKids);
|
|
|
|
NS_ASSERTION(canHaveKids,"");
|
1998-04-13 20:24:54 +00:00
|
|
|
container->SetDocument(myDoc);
|
|
|
|
|
1998-08-21 21:38:26 +00:00
|
|
|
container->AppendChildTo(text, PR_FALSE);
|
1998-08-29 20:20:38 +00:00
|
|
|
PRInt32 nk;
|
|
|
|
container->ChildCount(nk);
|
|
|
|
if (nk != 1) {
|
1998-04-13 20:24:54 +00:00
|
|
|
printf("Container has wrong number of children.");
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("begin attribute tests\n");
|
|
|
|
testAttributes(container);
|
|
|
|
printf("attribute tests complete\n");
|
|
|
|
|
|
|
|
|
|
|
|
// Clean up memory.
|
|
|
|
text->Release(); // The textContent interface.
|
|
|
|
delete container;
|
|
|
|
delete text;
|
|
|
|
myDoc->Release();
|
|
|
|
return 0;
|
|
|
|
}
|