Index: trunk/MFCtooling/replay/LogParser.cpp
===================================================================
--- trunk/MFCtooling/replay/LogParser.cpp	(revision 142)
+++ trunk/MFCtooling/replay/LogParser.cpp	(revision 143)
@@ -78,5 +78,13 @@
 		}
 		currentParent = winData;
-	} 
+	}
+	else if( localName.compare(L"textEquals")==0 ) {
+		expectedValue = GetAttributeValue(pAttributes, L"expectedValue", L"");
+	}
+	else if( localName.compare(L"fileEquals")==0) {
+		actualFile = GetAttributeValue(pAttributes, L"actualFile", L"");
+		expectedFile = GetAttributeValue(pAttributes, L"expectedFile", L"");
+	}
+
 	return S_OK;
 }
@@ -130,4 +138,74 @@
 		currentWindow = NULL;
 	}
+	else if( localName.compare(L"textEquals")==0 ) {
+		WindowFinder finder;
+		HWND hwnd = finder.find(currentWindow);
+
+		wchar_t* wstr = new wchar_t[256];
+		wstr[0] = '\0';
+		
+		//GetWindowText is not working properly for EditControls in other applications -> send WM_GETTEXT instead
+		SendMessage(hwnd, WM_GETTEXT, 255, (LPARAM)wstr);
+		std::wstring windowText = wstr;
+
+		if(expectedValue == windowText) std::wcout << std::endl << L"textEquals passed (expected value: " << expectedValue.c_str() << ")" << std::endl << std::endl;
+		else std::wcout << std::endl << L"textEquals failed (expected value: " << expectedValue.c_str() << ", windowText: " << windowText << ")" << std::endl << std::endl;
+		deleteWindowData(currentWindow);
+		currentWindow = NULL;
+	}
+	else if( localName.compare(L"fileEquals")==0) {
+		std::ifstream f1(actualFile.c_str(), std::ios_base::in | std::ios_base::binary);
+		if(f1 == NULL) {
+
+			std::wcout << std::endl << L"fileEquals failed because " << actualFile << " is not available!"<< std::endl << std::endl;
+			return S_OK;
+		}
+
+		std::ifstream f2(expectedFile.c_str(), std::ios_base::in | std::ios_base::binary);
+		if(f2 == NULL) {
+			std::wcout << std::endl << L"fileEquals failed because " << expectedFile << " is not available!" << std::endl << std::endl;
+			return S_OK;
+		}
+
+		f1.seekg(0, std::ios_base::end);
+		f2.seekg(0, std::ios_base::end);
+		std::streamsize length1 = f1.tellg();
+		std::streamsize length2 = f2.tellg();
+
+		bool passed = true;
+
+		if (length1 != length2) { // Non equal length -> files differ
+			passed = false;
+		}
+		else {
+			f1.seekg(0);
+			f2.seekg(0);
+
+			const std::streamsize blocksize = 4096;
+			char block1[blocksize], block2[blocksize];
+
+			for (std::streamsize counter=length1; counter > 0; counter -= blocksize)
+			{				
+				f1.read(block1, blocksize);
+				f2.read(block2, blocksize);
+
+				if(memcmp(block1, block2, blocksize) != 0) { //block are non equal -> files differ
+					passed = false;
+					break;
+				}
+			}
+		}
+
+		if(passed) {
+			std::wcout << std::endl << L"FileEquals passed" << std::endl << std::endl;
+		}
+		else {
+			std::wcout << std::endl << L"fileEquals failed (expectedFile: " << expectedFile.c_str() << ", actualFile: " << actualFile << ")" << std::endl << std::endl;
+		}
+		
+		f1.close();
+		f2.close();
+	}
+
 	return S_OK;
 }
