blob: a211eff831bf21fe588af21b4f29de8b4d4b2fbd [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef TESTAPP_HXX
#define TESTAPP_HXX
#include <basic/sbmod.hxx>
#include <basic/testtool.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(sal_uLong nNr, String aStr = String()) : nError(nNr),aText(aStr),nLine(0),nCol1(0),nCol2(0) {}
ErrorEntry(sal_uLong nNr, String aStr, xub_StrLen l, xub_StrLen c1, xub_StrLen c2 )
: nError(nNr),aText(aStr),nLine(l),nCol1(c1),nCol2(c2) {}
sal_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;
sal_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 geändert werden können
void DebugFindNoErrors( sal_Bool bDebugFindNoErrors );
private:
sal_Bool bWasPrecompilerError; // True wenn beim letzten Precompile ein Fehler auftrat
sal_Bool CError( sal_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, sal_uInt16 &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 ..
sal_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 für keycodes & classes & res_type (Aus Configdatei)
DECL_LINK( ReturnResultsLink, CommunicationLink* );
sal_Bool ReturnResults( SvStream *pIn ); // Rücklieferung 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 abhängt
static const CErrors* GetFehlerListe() { return pFehlerListe; }
sal_Bool bUseIPC;
Link aLogHdl; // Zum Logen der Fehlermeldungen im Testtool
Link aWinInfoHdl; // Anzeigen der Windows/Controls der zu testenden App
Link aModuleWinExistsHdl; // Prüft ob das Modul schon im Editor geladen ist
Link aCErrorHdl; // Melden von Compilererror
Link aWriteStringHdl; // Schreiben von text (e.g. MakroRecorder)
sal_Bool bReturnOK; // Bricht WaitForAnswer ab
CRevNames *pShortNames; // Aktuell verwendete Controls, zur gewinnung des Namens aus Fehlermeldung
sal_uLong nSequence; // Sequence um Antwort und Anfrage zu syncronisieren
rtl::OString 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 sal_True
String ProgPath; // Dateiname der zu Testenden APP; Gesetzt über Start
String aLogFileName; // Momentaner Logfilename (Wie Programmdatei aber mit .res)
sal_Bool IsBlock; // Innerhalb Begin/EndBlock
sal_Bool SingleCommandBlock; // Implizit um jedes kommando ein Begin/EndBlock
CmdStream *In;
void AddName(String &aBisher, String &aNeu ); // Name eventuell mit / anhängen
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
sal_uInt16 nMyVar; // Wievielte Var aus Pool ist dran
void InitTestToolObj();
CommunicationManagerClientViaSocketTT *pCommunicationManager;
void SendViaSocket();
sal_Bool Load( String aFileName, SbModule *pMod );
void ReadNames( String Filename, CNames *&pNames, CNames *&pUIds, sal_Bool bIsFlat = sal_False );
void ReadFlat( String Filename, CNames *&pNames, sal_Bool bSortByName );
sal_Bool ReadNamesBin( String Filename, CNames *&pSIds, CNames *&pControls );
sal_Bool WriteNamesBin( String Filename, CNames *pSIds, CNames *pControls );
void ReadHidLstByNumber();
void SortControlsByNumber( sal_Bool bIncludeActive = sal_False );
String GetMethodName( sal_uLong nMethodId );
String GetKeyName( sal_uInt16 nKeyCode );
void WaitForAnswer ();
DECL_LINK( IdleHdl, Application* );
DECL_LINK( CallDialogHandler, Application* );
String aDialogHandlerName;
sal_uInt16 nWindowHandlerCallLevel;
sal_uInt16 nIdleCount;
// wenn DialogHandler gesetzt wird er im IdleHandler inkrementiert und
// in WaitForAnswer rückgesetzt. Ü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, sal_Bool bWasControl );
static ControlDefLoad const arR_Cmds[];
static CNames *pRCommands;
static CErrors *pFehlerListe; // Hier werden die Fehler des Testtools gespeichert
};
#endif