2001-09-26 02:53:13 +04:00
/* -*- Mode: C++ tab-width: 2 indent-tabs-mode: nil c-basic-offset: 2 -*- */
2012-05-21 15:12:37 +04:00
/* 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/. */
1999-04-15 11:01:24 +04:00
2004-01-31 00:09:49 +03:00
# ifdef DEBUG
2004-01-30 01:04:45 +03:00
2014-12-02 08:07:42 +03:00
# include "TextEditorTest.h"
1999-04-15 11:01:24 +04:00
# include <stdio.h>
1999-08-09 05:37:50 +04:00
2012-07-13 10:33:42 +04:00
# include "nsDebug.h"
# include "nsError.h"
2014-08-29 15:43:24 +04:00
# include "nsGkAtoms.h"
2018-01-31 23:18:10 +03:00
# include "nsIDocument.h"
1999-04-15 11:01:24 +04:00
# include "nsIDOMCharacterData.h"
# include "nsIDOMDocument.h"
# include "nsIDOMNode.h"
# include "nsIDOMNodeList.h"
2012-07-13 10:33:42 +04:00
# include "nsIEditor.h"
# include "nsIHTMLEditor.h"
2018-01-31 23:18:10 +03:00
# include "nsINodeList.h"
2012-07-13 10:33:42 +04:00
# include "nsIPlaintextEditor.h"
# include "nsISelection.h"
# include "nsLiteralString.h"
2004-01-31 00:09:49 +03:00
# include "nsReadableUtils.h"
2012-07-13 10:33:42 +04:00
# include "nsString.h"
# include "nsStringFwd.h"
1999-04-15 11:01:24 +04:00
2012-10-16 01:39:46 +04:00
# define TEST_RESULT(r) { if (NS_FAILED(r)) {printf("FAILURE result=%X\n", static_cast<uint32_t>(r)); return r; } }
1999-04-15 11:01:24 +04: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 " ) ;
}
2012-08-22 19:56:38 +04:00
void TextEditorTest : : Run ( nsIEditor * aEditor , int32_t * outNumTests , int32_t * outNumTestsFailed )
1999-04-15 11:01:24 +04:00
{
if ( ! aEditor ) return ;
mTextEditor = do_QueryInterface ( aEditor ) ;
mEditor = do_QueryInterface ( aEditor ) ;
1999-05-27 08:10:04 +04:00
RunUnitTest ( outNumTests , outNumTestsFailed ) ;
1999-04-15 11:01:24 +04:00
}
2012-08-22 19:56:38 +04:00
nsresult TextEditorTest : : RunUnitTest ( int32_t * outNumTests , int32_t * outNumTestsFailed )
1999-04-15 11:01:24 +04:00
{
2010-06-18 00:40:48 +04:00
NS_ENSURE_TRUE ( outNumTests & & outNumTestsFailed , NS_ERROR_NULL_POINTER ) ;
2015-05-28 18:58:42 +03:00
1999-05-27 08:10:04 +04:00
* outNumTests = 0 ;
* outNumTestsFailed = 0 ;
2015-05-28 18:58:42 +03:00
2016-10-24 18:43:49 +03:00
nsresult rv = InitDoc ( ) ;
TEST_RESULT ( rv ) ;
1999-05-27 08:10:04 +04:00
// shouldn't we just bail on error here?
2015-05-28 18:58:42 +03:00
1999-04-15 11:01:24 +04:00
// insert some simple text
2016-10-24 18:43:49 +03:00
rv = mTextEditor - > InsertText ( NS_LITERAL_STRING ( " 1234567890abcdefghij1234567890 " ) ) ;
TEST_RESULT ( rv ) ;
1999-05-27 08:10:04 +04:00
( * outNumTests ) + + ;
2016-10-24 18:43:49 +03:00
if ( NS_FAILED ( rv ) ) {
2006-11-18 03:48:56 +03:00
+ + ( * outNumTestsFailed ) ;
2016-10-24 18:43:49 +03:00
}
2015-05-28 18:58:42 +03:00
1999-04-15 11:01:24 +04:00
// insert some more text
2016-10-24 18:43:49 +03:00
rv = 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 " ) ) ;
TEST_RESULT ( rv ) ;
1999-05-27 08:10:04 +04:00
( * outNumTests ) + + ;
2016-10-24 18:43:49 +03:00
if ( NS_FAILED ( rv ) ) {
2006-11-18 03:48:56 +03:00
+ + ( * outNumTestsFailed ) ;
2016-10-24 18:43:49 +03:00
}
1999-04-15 11:01:24 +04:00
2016-10-24 18:43:49 +03:00
rv = TestInsertBreak ( ) ;
TEST_RESULT ( rv ) ;
1999-05-27 08:10:04 +04:00
( * outNumTests ) + + ;
2016-10-24 18:43:49 +03:00
if ( NS_FAILED ( rv ) ) {
2006-11-18 03:48:56 +03:00
+ + ( * outNumTestsFailed ) ;
2016-10-24 18:43:49 +03:00
}
1999-04-15 11:01:24 +04:00
2016-10-24 18:43:49 +03:00
rv = TestTextProperties ( ) ;
TEST_RESULT ( rv ) ;
1999-05-27 08:10:04 +04:00
( * outNumTests ) + + ;
2016-10-24 18:43:49 +03:00
if ( NS_FAILED ( rv ) ) {
2006-11-18 03:48:56 +03:00
+ + ( * outNumTestsFailed ) ;
2016-10-24 18:43:49 +03:00
}
1999-04-15 11:01:24 +04:00
1999-07-15 23:08:49 +04:00
// get us back to the original document
2016-10-24 18:43:49 +03:00
rv = mEditor - > Undo ( 12 ) ;
TEST_RESULT ( rv ) ;
1999-07-15 23:08:49 +04:00
2016-10-24 18:43:49 +03:00
return rv ;
1999-04-15 11:01:24 +04:00
}
nsresult TextEditorTest : : InitDoc ( )
{
2016-10-24 18:43:49 +03:00
nsresult rv = mEditor - > SelectAll ( ) ;
TEST_RESULT ( rv ) ;
rv = mEditor - > DeleteSelection ( nsIEditor : : eNext , nsIEditor : : eStrip ) ;
TEST_RESULT ( rv ) ;
return rv ;
1999-04-15 11:01:24 +04:00
}
nsresult TextEditorTest : : TestInsertBreak ( )
{
2000-09-14 15:45:01 +04:00
nsCOMPtr < nsISelection > selection ;
2016-10-24 18:43:49 +03:00
nsresult rv = mEditor - > GetSelection ( getter_AddRefs ( selection ) ) ;
TEST_RESULT ( rv ) ;
1999-04-15 11:01:24 +04:00
TEST_POINTER ( selection . get ( ) ) ;
2017-08-25 10:12:39 +03:00
nsCOMPtr < nsINode > anchor = selection - > AsSelection ( ) - > GetAnchorNode ( ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
1999-04-15 11:01:24 +04:00
TEST_POINTER ( anchor . get ( ) ) ;
2017-08-25 10:12:39 +03:00
selection - > AsSelection ( ) - > Collapse ( anchor , 0 ) ;
1999-04-15 11:01:24 +04:00
// insert one break
printf ( " inserting a break \n " ) ;
2016-10-24 18:43:49 +03:00
rv = mTextEditor - > InsertLineBreak ( ) ;
TEST_RESULT ( rv ) ;
1999-04-15 11:01:24 +04:00
mEditor - > DebugDumpContent ( ) ;
// insert a second break adjacent to the first
printf ( " inserting a second break \n " ) ;
2016-10-24 18:43:49 +03:00
rv = mTextEditor - > InsertLineBreak ( ) ;
TEST_RESULT ( rv ) ;
1999-04-15 11:01:24 +04:00
mEditor - > DebugDumpContent ( ) ;
2015-05-28 18:58:42 +03:00
2016-10-24 18:43:49 +03:00
return rv ;
1999-04-15 11:01:24 +04:00
}
nsresult TextEditorTest : : TestTextProperties ( )
{
2018-01-31 23:18:10 +03:00
nsCOMPtr < nsIDOMDocument > domDoc ;
nsresult rv = mEditor - > GetDocument ( getter_AddRefs ( domDoc ) ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2018-01-31 23:18:10 +03:00
TEST_POINTER ( domDoc . get ( ) ) ;
nsCOMPtr < nsIDocument > doc = do_QueryInterface ( domDoc ) ;
1999-04-15 11:01:24 +04:00
TEST_POINTER ( doc . get ( ) ) ;
2005-06-16 17:10:58 +04:00
// XXX This is broken, text nodes are not elements.
nsAutoString textTag ( NS_LITERAL_STRING ( " #text " ) ) ;
2018-01-31 23:18:10 +03:00
nsCOMPtr < nsINodeList > nodeList = doc - > GetElementsByTagName ( textTag ) ;
1999-04-15 11:01:24 +04:00
TEST_POINTER ( nodeList . get ( ) ) ;
2018-01-31 23:18:10 +03:00
uint32_t count = nodeList - > Length ( ) ;
NS_ASSERTION ( 0 ! = count , " there are no text nodes in the document! " ) ;
nsCOMPtr < nsINode > textNode = nodeList - > Item ( count - 1 ) ;
TEST_POINTER ( textNode . get ( ) ) ;
1999-04-15 11:01:24 +04:00
// set the whole text node to bold
printf ( " set the whole first text node to bold \n " ) ;
2000-09-14 15:45:01 +04:00
nsCOMPtr < nsISelection > selection ;
2016-10-24 18:43:49 +03:00
rv = mEditor - > GetSelection ( getter_AddRefs ( selection ) ) ;
TEST_RESULT ( rv ) ;
1999-04-15 11:01:24 +04:00
TEST_POINTER ( selection . get ( ) ) ;
2017-08-28 11:54:34 +03:00
uint32_t length = textNode - > Length ( ) ;
selection - > AsSelection ( ) - > Collapse ( textNode , 0 ) ;
selection - > AsSelection ( ) - > Extend ( textNode , length ) ;
2000-11-17 03:25:31 +03:00
nsCOMPtr < nsIHTMLEditor > htmlEditor ( do_QueryInterface ( mTextEditor ) ) ;
2010-06-18 00:40:48 +04:00
NS_ENSURE_TRUE ( htmlEditor , NS_ERROR_FAILURE ) ;
2000-11-17 03:25:31 +03:00
2011-09-29 10:19:26 +04:00
bool any = false ;
bool all = false ;
bool first = false ;
2000-11-17 03:25:31 +03:00
2017-06-20 12:19:05 +03:00
const nsString & empty = EmptyString ( ) ;
2004-01-30 01:04:45 +03:00
2017-08-25 08:40:45 +03:00
NS_NAMED_LITERAL_STRING ( b , " b " ) ;
NS_NAMED_LITERAL_STRING ( i , " i " ) ;
NS_NAMED_LITERAL_STRING ( u , " u " ) ;
rv = htmlEditor - > GetInlineProperty ( b , empty , empty , & first , & any , & all ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2011-10-17 18:59:28 +04:00
NS_ASSERTION ( false = = first , " first should be false " ) ;
NS_ASSERTION ( false = = any , " any should be false " ) ;
NS_ASSERTION ( false = = all , " all should be false " ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > SetInlineProperty ( b , empty , empty ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > GetInlineProperty ( b , empty , empty , & first , & any , & all ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2011-10-17 18:59:28 +04:00
NS_ASSERTION ( true = = first , " first should be true " ) ;
NS_ASSERTION ( true = = any , " any should be true " ) ;
NS_ASSERTION ( true = = all , " all should be true " ) ;
1999-04-15 11:01:24 +04:00
mEditor - > DebugDumpContent ( ) ;
// remove the bold we just set
printf ( " set the whole first text node to not bold \n " ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > RemoveInlineProperty ( b , empty ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > GetInlineProperty ( b , empty , empty , & first , & any , & all ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2011-10-17 18:59:28 +04:00
NS_ASSERTION ( false = = first , " first should be false " ) ;
NS_ASSERTION ( false = = any , " any should be false " ) ;
NS_ASSERTION ( false = = all , " all should be false " ) ;
1999-04-15 11:01:24 +04:00
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 " ) ;
2017-08-28 11:54:34 +03:00
selection - > AsSelection ( ) - > Collapse ( textNode , 1 ) ;
selection - > AsSelection ( ) - > Extend ( textNode , length - 1 ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > SetInlineProperty ( b , empty , empty ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > GetInlineProperty ( b , empty , empty , & first , & any , & all ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2011-10-17 18:59:28 +04:00
NS_ASSERTION ( true = = first , " first should be true " ) ;
NS_ASSERTION ( true = = any , " any should be true " ) ;
NS_ASSERTION ( true = = all , " all should be true " ) ;
1999-04-15 11:01:24 +04:00
mEditor - > DebugDumpContent ( ) ;
// make all that same text italic
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > SetInlineProperty ( i , empty , empty ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > GetInlineProperty ( i , empty , empty , & first , & any , & all ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2011-10-17 18:59:28 +04:00
NS_ASSERTION ( true = = first , " first should be true " ) ;
NS_ASSERTION ( true = = any , " any should be true " ) ;
NS_ASSERTION ( true = = all , " all should be true " ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > GetInlineProperty ( b , empty , empty , & first , & any , & all ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2011-10-17 18:59:28 +04:00
NS_ASSERTION ( true = = first , " first should be true " ) ;
NS_ASSERTION ( true = = any , " any should be true " ) ;
NS_ASSERTION ( true = = all , " all should be true " ) ;
1999-04-15 11:01:24 +04:00
mEditor - > DebugDumpContent ( ) ;
1999-04-21 02:02:02 +04:00
1999-04-15 11:01:24 +04:00
// make all the text underlined, except for the first 2 and last 2 characters
2018-01-31 23:18:10 +03:00
nodeList = doc - > GetElementsByTagName ( textTag ) ;
1999-04-21 02:02:02 +04:00
TEST_POINTER ( nodeList . get ( ) ) ;
2018-01-31 23:18:10 +03:00
count = nodeList - > Length ( ) ;
1999-04-21 02:02:02 +04:00
NS_ASSERTION ( 0 ! = count , " there are no text nodes in the document! " ) ;
2018-01-31 23:18:10 +03:00
textNode = nodeList - > Item ( count - 2 ) ;
1999-04-21 02:02:02 +04:00
TEST_POINTER ( textNode . get ( ) ) ;
2017-08-28 11:54:34 +03:00
length = textNode - > Length ( ) ;
1999-09-09 23:39:36 +04:00
NS_ASSERTION ( length = = 915 , " wrong text node " ) ;
2017-08-28 11:54:34 +03:00
selection - > AsSelection ( ) - > Collapse ( textNode , 1 ) ;
selection - > AsSelection ( ) - > Extend ( textNode , length - 2 ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > SetInlineProperty ( u , empty , empty ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2017-08-25 08:40:45 +03:00
rv = htmlEditor - > GetInlineProperty ( u , empty , empty , & first , & any , & all ) ;
2016-10-24 18:43:49 +03:00
TEST_RESULT ( rv ) ;
2011-10-17 18:59:28 +04:00
NS_ASSERTION ( true = = first , " first should be true " ) ;
NS_ASSERTION ( true = = any , " any should be true " ) ;
NS_ASSERTION ( true = = all , " all should be true " ) ;
1999-04-15 11:01:24 +04:00
mEditor - > DebugDumpContent ( ) ;
2016-10-24 18:43:49 +03:00
return rv ;
1999-04-15 11:01:24 +04:00
}
# endif