2001-09-25 22:53:13 +00:00
/* -*- Mode: C++ tab-width: 2 indent-tabs-mode: nil c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version : NPL 1.1 / GPL 2.0 / LGPL 2.1
1999-04-15 07:01:24 +00:00
*
2001-09-25 22:53:13 +00:00
* The contents of this file are subject to the Netscape Public License
* Version 1.1 ( the " License " ) ; you may not use this file except in
* compliance with the License . You may obtain a copy of the License at
* http : //www.mozilla.org/NPL/
1999-04-15 07:01:24 +00:00
*
2001-09-25 22:53:13 +00:00
* Software distributed under the License is distributed on an " AS IS " basis ,
* WITHOUT WARRANTY OF ANY KIND , either express or implied . See the License
* for the specific language governing rights and limitations under the
* License .
1999-04-15 07:01:24 +00:00
*
1999-11-06 03:43:54 +00:00
* The Original Code is mozilla . org code .
*
2001-09-25 22:53:13 +00:00
* The Initial Developer of the Original Code is
* Netscape Communications Corporation .
* Portions created by the Initial Developer are Copyright ( C ) 1998
* the Initial Developer . All Rights Reserved .
1999-11-06 03:43:54 +00:00
*
2001-09-25 22:53:13 +00:00
* Contributor ( s ) :
*
*
* Alternatively , the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later ( the " GPL " ) , or
* the GNU Lesser General Public License Version 2.1 or later ( the " LGPL " ) ,
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above . If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL , and not to allow others to
* use your version of this file under the terms of the NPL , indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL . If you do not delete
* the provisions above , a recipient may use your version of this file under
* the terms of any one of the NPL , the GPL or the LGPL .
*
* * * * * * END LICENSE BLOCK * * * * * */
1999-04-15 07:01:24 +00:00
# include <stdio.h>
1999-08-09 01:37:50 +00:00
1999-04-15 07:01:24 +00:00
# include "nsIEditor.h"
2000-11-17 00:25:31 +00:00
# include "nsIHTMLEditor.h"
1999-04-15 07:01:24 +00:00
# include "TextEditorTest.h"
2000-09-14 11:45:01 +00:00
# include "nsISelection.h"
1999-04-15 07:01:24 +00:00
# include "nsIDOMCharacterData.h"
# include "nsIDOMDocument.h"
# include "nsIDOMNode.h"
# include "nsIDOMNodeList.h"
2003-04-17 05:42:33 +00:00
# include "nsEditProperty.h"
1999-04-15 07:01:24 +00:00
# include "nsString.h"
# ifdef NS_DEBUG
1999-05-27 04:10:04 +00:00
# define TEST_RESULT(r) { if (NS_FAILED(r)) {printf("FAILURE result=%X\n", r); return r; } }
1999-04-15 07:01:24 +00:00
# define TEST_POINTER(p) { if (!p) {printf("FAILURE null pointer\n"); return NS_ERROR_NULL_POINTER; } }
TextEditorTest : : TextEditorTest ( )
{
printf ( " constructed a TextEditorTest \n " ) ;
}
TextEditorTest : : ~ TextEditorTest ( )
{
printf ( " destroyed a TextEditorTest \n " ) ;
}
1999-08-09 01:37:50 +00:00
void TextEditorTest : : Run ( nsIEditor * aEditor , PRInt32 * outNumTests , PRInt32 * outNumTestsFailed )
1999-04-15 07:01:24 +00:00
{
if ( ! aEditor ) return ;
mTextEditor = do_QueryInterface ( aEditor ) ;
mEditor = do_QueryInterface ( aEditor ) ;
1999-05-27 04:10:04 +00:00
RunUnitTest ( outNumTests , outNumTestsFailed ) ;
1999-04-15 07:01:24 +00:00
}
1999-05-27 04:10:04 +00:00
nsresult TextEditorTest : : RunUnitTest ( PRInt32 * outNumTests , PRInt32 * outNumTestsFailed )
1999-04-15 07:01:24 +00:00
{
nsresult result ;
1999-05-27 04:10:04 +00:00
if ( ! outNumTests | | ! outNumTestsFailed )
return NS_ERROR_NULL_POINTER ;
* outNumTests = 0 ;
* outNumTestsFailed = 0 ;
1999-04-15 07:01:24 +00:00
result = InitDoc ( ) ;
TEST_RESULT ( result ) ;
1999-05-27 04:10:04 +00:00
// shouldn't we just bail on error here?
1999-04-15 07:01:24 +00:00
// insert some simple text
2001-04-07 00:45:26 +00:00
result = mTextEditor - > InsertText ( NS_LITERAL_STRING ( " 1234567890abcdefghij1234567890 " ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
1999-05-27 04:10:04 +00:00
( * outNumTests ) + + ;
( * outNumTestsFailed ) + = ( NS_FAILED ( result ) ! = NS_OK ) ;
1999-04-15 07:01:24 +00:00
// insert some more text
2001-04-07 00:45:26 +00:00
result = mTextEditor - > InsertText ( NS_LITERAL_STRING ( " Moreover, I am cognizant of the interrelatedness of all communities and states. I cannot sit idly by in Atlanta and not be concerned about what happens in Birmingham. Injustice anywhere is a threat to justice everywhere " ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
1999-05-27 04:10:04 +00:00
( * outNumTests ) + + ;
( * outNumTestsFailed ) + = ( NS_FAILED ( result ) ! = NS_OK ) ;
1999-04-15 07:01:24 +00:00
result = TestInsertBreak ( ) ;
1999-05-27 04:10:04 +00:00
TEST_RESULT ( result ) ;
( * outNumTests ) + + ;
( * outNumTestsFailed ) + = ( NS_FAILED ( result ) ! = NS_OK ) ;
1999-04-15 07:01:24 +00:00
result = TestTextProperties ( ) ;
1999-05-27 04:10:04 +00:00
TEST_RESULT ( result ) ;
( * outNumTests ) + + ;
( * outNumTestsFailed ) + = ( NS_FAILED ( result ) ! = NS_OK ) ;
1999-04-15 07:01:24 +00:00
1999-07-15 19:08:49 +00:00
// get us back to the original document
result = mEditor - > Undo ( 12 ) ;
TEST_RESULT ( result ) ;
1999-04-15 07:01:24 +00:00
return result ;
}
nsresult TextEditorTest : : InitDoc ( )
{
1999-08-09 01:37:50 +00:00
nsresult result = mEditor - > SelectAll ( ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
1999-12-07 08:30:19 +00:00
result = mEditor - > DeleteSelection ( nsIEditor : : eNext ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
return result ;
}
nsresult TextEditorTest : : TestInsertBreak ( )
{
2000-09-14 11:45:01 +00:00
nsCOMPtr < nsISelection > selection ;
1999-04-15 07:01:24 +00:00
nsresult result = mEditor - > GetSelection ( getter_AddRefs ( selection ) ) ;
TEST_RESULT ( result ) ;
TEST_POINTER ( selection . get ( ) ) ;
nsCOMPtr < nsIDOMNode > anchor ;
1999-07-18 02:27:19 +00:00
result = selection - > GetAnchorNode ( getter_AddRefs ( anchor ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
TEST_POINTER ( anchor . get ( ) ) ;
1999-07-18 02:27:19 +00:00
selection - > Collapse ( anchor , 0 ) ;
1999-04-15 07:01:24 +00:00
// insert one break
printf ( " inserting a break \n " ) ;
2000-11-17 00:25:31 +00:00
result = mTextEditor - > InsertLineBreak ( ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
mEditor - > DebugDumpContent ( ) ;
// insert a second break adjacent to the first
printf ( " inserting a second break \n " ) ;
2000-11-17 00:25:31 +00:00
result = mTextEditor - > InsertLineBreak ( ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
mEditor - > DebugDumpContent ( ) ;
return result ;
}
nsresult TextEditorTest : : TestTextProperties ( )
{
nsCOMPtr < nsIDOMDocument > doc ;
nsresult result = mEditor - > GetDocument ( getter_AddRefs ( doc ) ) ;
TEST_RESULT ( result ) ;
TEST_POINTER ( doc . get ( ) ) ;
nsCOMPtr < nsIDOMNodeList > nodeList ;
2001-12-07 15:28:47 +00:00
nsAutoString textTag ( NS_LITERAL_STRING ( " __moz_text " ) ) ;
1999-04-15 07:01:24 +00:00
result = doc - > GetElementsByTagName ( textTag , getter_AddRefs ( nodeList ) ) ;
TEST_RESULT ( result ) ;
TEST_POINTER ( nodeList . get ( ) ) ;
PRUint32 count ;
nodeList - > GetLength ( & count ) ;
NS_ASSERTION ( 0 ! = count , " there are no text nodes in the document! " ) ;
nsCOMPtr < nsIDOMNode > textNode ;
1999-07-25 18:14:44 +00:00
result = nodeList - > Item ( count - 1 , getter_AddRefs ( textNode ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
TEST_POINTER ( textNode . get ( ) ) ;
// set the whole text node to bold
printf ( " set the whole first text node to bold \n " ) ;
2000-09-14 11:45:01 +00:00
nsCOMPtr < nsISelection > selection ;
1999-04-15 07:01:24 +00:00
result = mEditor - > GetSelection ( getter_AddRefs ( selection ) ) ;
TEST_RESULT ( result ) ;
TEST_POINTER ( selection . get ( ) ) ;
nsCOMPtr < nsIDOMCharacterData > textData ;
textData = do_QueryInterface ( textNode ) ;
PRUint32 length ;
textData - > GetLength ( & length ) ;
1999-07-18 02:27:19 +00:00
selection - > Collapse ( textNode , 0 ) ;
selection - > Extend ( textNode , length ) ;
2000-11-17 00:25:31 +00:00
nsCOMPtr < nsIHTMLEditor > htmlEditor ( do_QueryInterface ( mTextEditor ) ) ;
if ( ! htmlEditor )
return NS_ERROR_FAILURE ;
1999-04-15 07:01:24 +00:00
PRBool any = PR_FALSE ;
PRBool all = PR_FALSE ;
PRBool first = PR_FALSE ;
2000-11-17 00:25:31 +00:00
2003-04-17 05:42:33 +00:00
result = htmlEditor - > GetInlineProperty ( nsEditProperty : : b , nsString ( ) , nsString ( ) , & first , & any , & all ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
NS_ASSERTION ( PR_FALSE = = first , " first should be false " ) ;
NS_ASSERTION ( PR_FALSE = = any , " any should be false " ) ;
NS_ASSERTION ( PR_FALSE = = all , " all should be false " ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > SetInlineProperty ( nsEditProperty : : b , nsString ( ) , nsString ( ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > GetInlineProperty ( nsEditProperty : : b , nsString ( ) , nsString ( ) , & first , & any , & all ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
NS_ASSERTION ( PR_TRUE = = first , " first should be true " ) ;
NS_ASSERTION ( PR_TRUE = = any , " any should be true " ) ;
NS_ASSERTION ( PR_TRUE = = all , " all should be true " ) ;
mEditor - > DebugDumpContent ( ) ;
// remove the bold we just set
printf ( " set the whole first text node to not bold \n " ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > RemoveInlineProperty ( nsEditProperty : : b , nsString ( ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > GetInlineProperty ( nsEditProperty : : b , nsString ( ) , nsString ( ) , & first , & any , & all ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
NS_ASSERTION ( PR_FALSE = = first , " first should be false " ) ;
NS_ASSERTION ( PR_FALSE = = any , " any should be false " ) ;
NS_ASSERTION ( PR_FALSE = = all , " all should be false " ) ;
mEditor - > DebugDumpContent ( ) ;
// set all but the first and last character to bold
printf ( " set the first text node (1, length-1) to bold and italic, and (2, length-1) to underline. \n " ) ;
1999-07-18 02:27:19 +00:00
selection - > Collapse ( textNode , 1 ) ;
selection - > Extend ( textNode , length - 1 ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > SetInlineProperty ( nsEditProperty : : b , nsString ( ) , nsString ( ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > GetInlineProperty ( nsEditProperty : : b , nsString ( ) , nsString ( ) , & first , & any , & all ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
NS_ASSERTION ( PR_TRUE = = first , " first should be true " ) ;
NS_ASSERTION ( PR_TRUE = = any , " any should be true " ) ;
NS_ASSERTION ( PR_TRUE = = all , " all should be true " ) ;
mEditor - > DebugDumpContent ( ) ;
// make all that same text italic
2003-04-17 05:42:33 +00:00
result = htmlEditor - > SetInlineProperty ( nsEditProperty : : i , nsString ( ) , nsString ( ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > GetInlineProperty ( nsEditProperty : : i , nsString ( ) , nsString ( ) , & first , & any , & all ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
NS_ASSERTION ( PR_TRUE = = first , " first should be true " ) ;
NS_ASSERTION ( PR_TRUE = = any , " any should be true " ) ;
NS_ASSERTION ( PR_TRUE = = all , " all should be true " ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > GetInlineProperty ( nsEditProperty : : b , nsString ( ) , nsString ( ) , & first , & any , & all ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
NS_ASSERTION ( PR_TRUE = = first , " first should be true " ) ;
NS_ASSERTION ( PR_TRUE = = any , " any should be true " ) ;
NS_ASSERTION ( PR_TRUE = = all , " all should be true " ) ;
mEditor - > DebugDumpContent ( ) ;
1999-04-20 22:02:02 +00:00
1999-04-15 07:01:24 +00:00
// make all the text underlined, except for the first 2 and last 2 characters
1999-04-20 22:02:02 +00:00
result = doc - > GetElementsByTagName ( textTag , getter_AddRefs ( nodeList ) ) ;
TEST_RESULT ( result ) ;
TEST_POINTER ( nodeList . get ( ) ) ;
nodeList - > GetLength ( & count ) ;
NS_ASSERTION ( 0 ! = count , " there are no text nodes in the document! " ) ;
1999-07-25 18:14:44 +00:00
result = nodeList - > Item ( count - 2 , getter_AddRefs ( textNode ) ) ;
1999-04-20 22:02:02 +00:00
TEST_RESULT ( result ) ;
TEST_POINTER ( textNode . get ( ) ) ;
textData = do_QueryInterface ( textNode ) ;
textData - > GetLength ( & length ) ;
1999-09-09 19:39:36 +00:00
NS_ASSERTION ( length = = 915 , " wrong text node " ) ;
1999-07-18 02:27:19 +00:00
selection - > Collapse ( textNode , 1 ) ;
selection - > Extend ( textNode , length - 2 ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > SetInlineProperty ( nsEditProperty : : u , nsString ( ) , nsString ( ) ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
2003-04-17 05:42:33 +00:00
result = htmlEditor - > GetInlineProperty ( nsEditProperty : : u , nsString ( ) , nsString ( ) , & first , & any , & all ) ;
1999-04-15 07:01:24 +00:00
TEST_RESULT ( result ) ;
NS_ASSERTION ( PR_TRUE = = first , " first should be true " ) ;
NS_ASSERTION ( PR_TRUE = = any , " any should be true " ) ;
NS_ASSERTION ( PR_TRUE = = all , " all should be true " ) ;
mEditor - > DebugDumpContent ( ) ;
return result ;
}
# endif