1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef TESTAPP_HXX
#define TESTAPP_HXX
#include <basic/sbmod.hxx>
#include <basic/testtool.hxx>
#include <vcl/smartid.hxx>
class CommunicationLink;
class CommunicationManagerClientViaSocketTT;
class CNames;
class ControlItemUId;
class CRevNames;
//class SbxTransportVariableRef;
class ControlsRef;
class CmdStream;
class FloatingLoadConf;
class TestToolObj;
class ControlDef;
class SbxTransportMethod;
class Application;
class SotStorage;
class ImplTestToolObj;
class MyBasic;
class ErrorEntry
{
public:
ErrorEntry(ULONG nNr, String aStr = String()) : nError(nNr),aText(aStr),nLine(0),nCol1(0),nCol2(0) {}
ErrorEntry(ULONG nNr, String aStr, xub_StrLen l, xub_StrLen c1, xub_StrLen c2 )
: nError(nNr),aText(aStr),nLine(l),nCol1(c1),nCol2(c2) {}
ULONG nError;
String aText;
xub_StrLen nLine;
xub_StrLen nCol1;
xub_StrLen nCol2;
};
SV_DECL_PTRARR_DEL(CErrors, ErrorEntry*, 1, 1)
struct ControlDefLoad {
const char* Kurzname;
ULONG nUId;
};
class TestToolObj: public SbxObject
{
friend class TTBasic;
friend class Controls;
public:
TestToolObj( String aName, String aFilePath ); // Alle Dateien in FilePath, Kein IPC
TestToolObj( String aName, MyBasic* pBas ); // Pfade aus INI, IPC benutzen
~TestToolObj();
void LoadIniFile(); // Laden der IniEinstellungen, die durch den ConfigDialog gendert werden knnen
void DebugFindNoErrors( BOOL bDebugFindNoErrors );
private:
BOOL bWasPrecompilerError; // True wenn beim letzten Precompile ein Fehler auftrat
BOOL CError( ULONG, const String&, xub_StrLen, xub_StrLen, xub_StrLen );
void CalcPosition( String const &aSource, xub_StrLen nPos, xub_StrLen &l, xub_StrLen &c );
xub_StrLen ImplSearch( const String &aSource, const xub_StrLen nStart, const xub_StrLen nEnd, const String &aSearch, const xub_StrLen nSearchStart = 0 );
xub_StrLen PreCompilePart( String &aSource, xub_StrLen nStart, xub_StrLen nEnd, String aFinalErrorLabel, USHORT &nLabelCount );
void PreCompileDispatchParts( String &aSource, String aStart, String aEnd, String aFinalLable );
public:
String GetRevision(String const &aSourceIn); // find Revision in the sourcecode
String PreCompile(String const &aSourceIn); // try catch; testcase endcase ..
BOOL WasPrecompilerError(); // True wenn beim letzten Precompile ein Fehler auftrat
void SFX_NOTIFY( SfxBroadcaster&, const TypeId&, const SfxHint& rHint, const TypeId& );
virtual SbxVariable* Find( const String&, SbxClassType );
// String aKeyPlusClasses; // Pfad fr keycodes & classes & res_type (Aus Configdatei)
DECL_LINK( ReturnResultsLink, CommunicationLink* );
BOOL ReturnResults( SvStream *pIn ); // Rcklieferung des Antwortstreams ber IPC oder TCP/IP oder direkt
void SetLogHdl( const Link& rLink ) { aLogHdl = rLink; }
const Link& GetLogHdl() const { return aLogHdl; }
void SetWinInfoHdl( const Link& rLink ) { aWinInfoHdl = rLink; }
const Link& GetWinInfoHdl() const { return aWinInfoHdl; }
void SetModuleWinExistsHdl( const Link& rLink ) { aModuleWinExistsHdl = rLink; }
const Link& GetModuleWinExistsHdl() const { return aModuleWinExistsHdl; }
void SetCErrorHdl( const Link& rLink ) { aCErrorHdl = rLink; }
const Link& GetCErrorHdl() const { return aCErrorHdl; }
void SetWriteStringHdl( const Link& rLink ) { aWriteStringHdl = rLink; }
const Link& GetWriteStringHdl() const { return aWriteStringHdl; }
SfxBroadcaster& GetTTBroadcaster();
private:
ImplTestToolObj *pImpl; // Alles was von der Implementation abhngt
static const CErrors* GetFehlerListe() { return pFehlerListe; }
BOOL bUseIPC;
Link aLogHdl; // Zum Logen der Fehlermeldungen im Testtool
Link aWinInfoHdl; // Anzeigen der Windows/Controls der zu testenden App
Link aModuleWinExistsHdl; // Prft ob das Modul schon im Editor geladen ist
Link aCErrorHdl; // Melden von Compilererror
Link aWriteStringHdl; // Schreiben von text (e.g. MakroRecorder)
BOOL bReturnOK; // Bricht WaitForAnswer ab
CRevNames *pShortNames; // Aktuell verwendete Controls, zur gewinnung des Namens aus Fehlermeldung
ULONG nSequence; // Sequence um Antwort und Anfrage zu syncronisieren
SmartId aNextReturnId; // Id des Returnwertes i.e. UId
void ReplaceNumbers(String &aText); // Zahlen im String mit speziellem Format in Namen umwandeln
String aLastRecordedKontext;// Keeps the last kontext recorded by the Macro Recorder
#define FLAT TRUE
String ProgPath; // Dateiname der zu Testenden APP; Gesetzt ber Start
String aLogFileName; // Momentaner Logfilename (Wie Programmdatei aber mit .res)
BOOL IsBlock; // Innerhalb Begin/EndBlock
BOOL SingleCommandBlock; // Implizit um jedes kommando ein Begin/EndBlock
CmdStream *In;
void AddName(String &aBisher, String &aNeu ); // Name eventuell mit / anhngen
void AddToListByNr( CNames *&pControls, ControlItemUId *&pNewItem ); //
CNames *m_pControls;
CNames *m_pNameKontext; // Zeigt auf den aktuellen Namenskontext, der ber 'Kontext' gesetzt wurde
CNames *m_pSIds;
CNames *m_pReverseSlots; // Slots mit Kurznamen nach Nummer
CNames *m_pReverseControls; // Controls mit Kurznamen nach Nummer
CNames *m_pReverseControlsSon;// Controls mit Kurznamen nach Nummer nach Fenstern (Son)
CNames *m_pReverseUIds; // Langnamen nach Nummer
USHORT nMyVar; // Wievielte Var aus Pool ist dran
void InitTestToolObj();
CommunicationManagerClientViaSocketTT *pCommunicationManager;
void SendViaSocket();
BOOL Load( String aFileName, SbModule *pMod );
void ReadNames( String Filename, CNames *&pNames, CNames *&pUIds, BOOL bIsFlat = FALSE );
void ReadFlat( String Filename, CNames *&pNames, BOOL bSortByName );
BOOL ReadNamesBin( String Filename, CNames *&pSIds, CNames *&pControls );
BOOL WriteNamesBin( String Filename, CNames *pSIds, CNames *pControls );
void ReadHidLstByNumber();
void SortControlsByNumber( BOOL bIncludeActive = FALSE );
String GetMethodName( ULONG nMethodId );
String GetKeyName( USHORT nKeyCode );
void WaitForAnswer ();
DECL_LINK( IdleHdl, Application* );
DECL_LINK( CallDialogHandler, Application* );
String aDialogHandlerName;
USHORT nWindowHandlerCallLevel;
USHORT nIdleCount;
// wenn DialogHandler gesetzt wird er im IdleHandler inkrementiert und
// in WaitForAnswer rckgesetzt. bersteigt er einen gewissen wert, gehe ich davon aus,
// da WaitForAnswer still ligt und rufe die DialogHander Sub im BASIC auf.
void BeginBlock();
void EndBlock();
SbTextType GetSymbolType( const String &rSymbol, BOOL bWasControl );
static ControlDefLoad const arR_Cmds[];
static CNames *pRCommands;
static CErrors *pFehlerListe; // Hier werden die Fehler des Testtools gespeichert
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|