1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
31 #include <basic/sbmod.hxx>
32 #include <basic/testtool.hxx>
34 class CommunicationLink
;
35 class CommunicationManagerClientViaSocketTT
;
39 //class SbxTransportVariableRef;
42 class FloatingLoadConf
;
46 class SbxTransportMethod
;
51 class ImplTestToolObj
;
57 ErrorEntry(sal_uLong nNr
, String aStr
= String()) : nError(nNr
),aText(aStr
),nLine(0),nCol1(0),nCol2(0) {}
58 ErrorEntry(sal_uLong nNr
, String aStr
, xub_StrLen l
, xub_StrLen c1
, xub_StrLen c2
)
59 : nError(nNr
),aText(aStr
),nLine(l
),nCol1(c1
),nCol2(c2
) {}
67 SV_DECL_PTRARR_DEL(CErrors
, ErrorEntry
*, 1, 1)
69 struct ControlDefLoad
{
74 class TestToolObj
: public SbxObject
77 friend class Controls
;
79 TestToolObj( String aName
, String aFilePath
); // Alle Dateien in FilePath, Kein IPC
80 TestToolObj( String aName
, MyBasic
* pBas
); // Pfade aus INI, IPC benutzen
82 void LoadIniFile(); // Laden der IniEinstellungen, die durch den ConfigDialog geändert werden können
83 void DebugFindNoErrors( sal_Bool bDebugFindNoErrors
);
86 sal_Bool bWasPrecompilerError
; // True wenn beim letzten Precompile ein Fehler auftrat
87 sal_Bool
CError( sal_uLong
, const String
&, xub_StrLen
, xub_StrLen
, xub_StrLen
);
88 void CalcPosition( String
const &aSource
, xub_StrLen nPos
, xub_StrLen
&l
, xub_StrLen
&c
);
89 xub_StrLen
ImplSearch( const String
&aSource
, const xub_StrLen nStart
, const xub_StrLen nEnd
, const String
&aSearch
, const xub_StrLen nSearchStart
= 0 );
90 xub_StrLen
PreCompilePart( String
&aSource
, xub_StrLen nStart
, xub_StrLen nEnd
, String aFinalErrorLabel
, sal_uInt16
&nLabelCount
);
91 void PreCompileDispatchParts( String
&aSource
, String aStart
, String aEnd
, String aFinalLable
);
93 String
GetRevision(String
const &aSourceIn
); // find Revision in the sourcecode
94 String
PreCompile(String
const &aSourceIn
); // try catch; testcase endcase ..
95 sal_Bool
WasPrecompilerError(); // True wenn beim letzten Precompile ein Fehler auftrat
96 void SFX_NOTIFY( SfxBroadcaster
&, const TypeId
&, const SfxHint
& rHint
, const TypeId
& );
97 virtual SbxVariable
* Find( const String
&, SbxClassType
);
98 // String aKeyPlusClasses; // Pfad für keycodes & classes & res_type (Aus Configdatei)
99 DECL_LINK( ReturnResultsLink
, CommunicationLink
* );
100 sal_Bool
ReturnResults( SvStream
*pIn
); // Rücklieferung des Antwortstreams über IPC oder TCP/IP oder direkt
102 void SetLogHdl( const Link
& rLink
) { aLogHdl
= rLink
; }
103 const Link
& GetLogHdl() const { return aLogHdl
; }
105 void SetWinInfoHdl( const Link
& rLink
) { aWinInfoHdl
= rLink
; }
106 const Link
& GetWinInfoHdl() const { return aWinInfoHdl
; }
108 void SetModuleWinExistsHdl( const Link
& rLink
) { aModuleWinExistsHdl
= rLink
; }
109 const Link
& GetModuleWinExistsHdl() const { return aModuleWinExistsHdl
; }
111 void SetCErrorHdl( const Link
& rLink
) { aCErrorHdl
= rLink
; }
112 const Link
& GetCErrorHdl() const { return aCErrorHdl
; }
114 void SetWriteStringHdl( const Link
& rLink
) { aWriteStringHdl
= rLink
; }
115 const Link
& GetWriteStringHdl() const { return aWriteStringHdl
; }
117 SfxBroadcaster
& GetTTBroadcaster();
120 ImplTestToolObj
*pImpl
; // Alles was von der Implementation abhängt
121 static const CErrors
* GetFehlerListe() { return pFehlerListe
; }
123 Link aLogHdl
; // Zum Logen der Fehlermeldungen im Testtool
124 Link aWinInfoHdl
; // Anzeigen der Windows/Controls der zu testenden App
125 Link aModuleWinExistsHdl
; // Prüft ob das Modul schon im Editor geladen ist
126 Link aCErrorHdl
; // Melden von Compilererror
127 Link aWriteStringHdl
; // Schreiben von text (e.g. MakroRecorder)
128 sal_Bool bReturnOK
; // Bricht WaitForAnswer ab
129 CRevNames
*pShortNames
; // Aktuell verwendete Controls, zur gewinnung des Namens aus Fehlermeldung
130 sal_uLong nSequence
; // Sequence um Antwort und Anfrage zu syncronisieren
131 rtl::OString aNextReturnId
; // Id des Returnwertes i.e. UId
132 void ReplaceNumbers(String
&aText
); // Zahlen im String mit speziellem Format in Namen umwandeln
134 String aLastRecordedKontext
;// Keeps the last kontext recorded by the Macro Recorder
136 #define FLAT sal_True
137 String ProgPath
; // Dateiname der zu Testenden APP; Gesetzt über Start
138 String aLogFileName
; // Momentaner Logfilename (Wie Programmdatei aber mit .res)
139 sal_Bool IsBlock
; // Innerhalb Begin/EndBlock
140 sal_Bool SingleCommandBlock
; // Implizit um jedes kommando ein Begin/EndBlock
143 void AddName(String
&aBisher
, String
&aNeu
); // Name eventuell mit / anhängen
144 void AddToListByNr( CNames
*&pControls
, ControlItemUId
*&pNewItem
); //
146 CNames
*m_pNameKontext
; // Zeigt auf den aktuellen Namenskontext, der über 'Kontext' gesetzt wurde
148 CNames
*m_pReverseSlots
; // Slots mit Kurznamen nach Nummer
149 CNames
*m_pReverseControls
; // Controls mit Kurznamen nach Nummer
150 CNames
*m_pReverseControlsSon
;// Controls mit Kurznamen nach Nummer nach Fenstern (Son)
151 CNames
*m_pReverseUIds
; // Langnamen nach Nummer
154 sal_uInt16 nMyVar
; // Wievielte Var aus Pool ist dran
156 void InitTestToolObj();
157 CommunicationManagerClientViaSocketTT
*pCommunicationManager
;
158 void SendViaSocket();
160 sal_Bool
Load( String aFileName
, SbModule
*pMod
);
162 void ReadNames( String Filename
, CNames
*&pNames
, CNames
*&pUIds
, sal_Bool bIsFlat
= sal_False
);
163 void ReadFlat( String Filename
, CNames
*&pNames
, sal_Bool bSortByName
);
164 sal_Bool
ReadNamesBin( String Filename
, CNames
*&pSIds
, CNames
*&pControls
);
165 sal_Bool
WriteNamesBin( String Filename
, CNames
*pSIds
, CNames
*pControls
);
166 void ReadHidLstByNumber();
167 void SortControlsByNumber( sal_Bool bIncludeActive
= sal_False
);
169 String
GetMethodName( sal_uLong nMethodId
);
170 String
GetKeyName( sal_uInt16 nKeyCode
);
172 void WaitForAnswer ();
173 DECL_LINK( IdleHdl
, Application
* );
174 DECL_LINK( CallDialogHandler
, Application
* );
175 String aDialogHandlerName
;
176 sal_uInt16 nWindowHandlerCallLevel
;
178 sal_uInt16 nIdleCount
;
179 // wenn DialogHandler gesetzt wird er im IdleHandler inkrementiert und
180 // in WaitForAnswer rückgesetzt. Übersteigt er einen gewissen wert, gehe ich davon aus,
181 // daß WaitForAnswer still ligt und rufe die DialogHander Sub im BASIC auf.
186 SbTextType
GetSymbolType( const String
&rSymbol
, sal_Bool bWasControl
);
187 static ControlDefLoad
const arR_Cmds
[];
188 static CNames
*pRCommands
;
190 static CErrors
*pFehlerListe
; // Hier werden die Fehler des Testtools gespeichert