| import sys, cmakelib, json, os, shutil |
| |
| debug = True |
| |
| cmakeCommand = sys.argv[1] |
| testFile = sys.argv[2] |
| sourceDir = sys.argv[3] |
| buildDir = sys.argv[4] + "/" + os.path.splitext(os.path.basename(testFile))[0] |
| cmakeGenerator = sys.argv[5] |
| |
| print("Test:", testFile, |
| "\n-- SourceDir:", sourceDir, |
| "\n-- BuildDir:", buildDir, |
| "\n-- Generator:", cmakeGenerator) |
| |
| if os.path.exists(buildDir): |
| shutil.rmtree(buildDir) |
| |
| proc = cmakelib.initProc(cmakeCommand) |
| |
| with open(testFile) as f: |
| testData = json.loads(f.read()) |
| |
| for obj in testData: |
| if 'sendRaw' in obj: |
| data = obj['sendRaw'] |
| if debug: print("Sending raw:", data) |
| cmakelib.writeRawData(proc, data) |
| elif 'send' in obj: |
| data = obj['send'] |
| if debug: print("Sending:", json.dumps(data)) |
| cmakelib.writePayload(proc, data) |
| elif 'recv' in obj: |
| data = obj['recv'] |
| if debug: print("Waiting for:", json.dumps(data)) |
| cmakelib.waitForMessage(proc, data) |
| elif 'reply' in obj: |
| data = obj['reply'] |
| if debug: print("Waiting for reply:", json.dumps(data)) |
| originalType = "" |
| cookie = "" |
| skipProgress = False; |
| if 'cookie' in data: cookie = data['cookie'] |
| if 'type' in data: originalType = data['type'] |
| if 'skipProgress' in data: skipProgress = data['skipProgress'] |
| cmakelib.waitForReply(proc, originalType, cookie, skipProgress) |
| elif 'error' in obj: |
| data = obj['error'] |
| if debug: print("Waiting for error:", json.dumps(data)) |
| originalType = "" |
| cookie = "" |
| message = "" |
| if 'cookie' in data: cookie = data['cookie'] |
| if 'type' in data: originalType = data['type'] |
| if 'message' in data: message = data['message'] |
| cmakelib.waitForError(proc, originalType, cookie, message) |
| elif 'progress' in obj: |
| data = obj['progress'] |
| if debug: print("Waiting for progress:", json.dumps(data)) |
| originalType = '' |
| cookie = "" |
| current = 0 |
| message = "" |
| if 'cookie' in data: cookie = data['cookie'] |
| if 'type' in data: originalType = data['type'] |
| if 'current' in data: current = data['current'] |
| if 'message' in data: message = data['message'] |
| cmakelib.waitForProgress(proc, originalType, cookie, current, message) |
| elif 'handshake' in obj: |
| data = obj['handshake'] |
| if debug: print("Doing handshake:", json.dumps(data)) |
| major = -1 |
| minor = -1 |
| generator = cmakeGenerator |
| extraGenerator = '' |
| sourceDirectory = sourceDir |
| buildDirectory = buildDir |
| if 'major' in data: major = data['major'] |
| if 'minor' in data: minor = data['minor'] |
| if 'buildDirectory' in data: buildDirectory = data['buildDirectory'] |
| if 'sourceDirectory' in data: sourceDirectory = data['sourceDirectory'] |
| if 'generator' in data: generator = data['generator'] |
| if 'extraGenerator' in data: extraGenerator = data['extraGenerator'] |
| if not os.path.isabs(buildDirectory): |
| buildDirectory = buildDir + "/" + buildDirectory |
| if not os.path.isabs(sourceDirectory): |
| sourceDirectory = sourceDir + "/" + sourceDirectory |
| cmakelib.handshake(proc, major, minor, sourceDirectory, buildDirectory, |
| generator, extraGenerator) |
| elif 'validateGlobalSettings' in obj: |
| data = obj['validateGlobalSettings'] |
| if not 'buildDirectory' in data: data['buildDirectory'] = buildDir |
| if not 'sourceDirectory' in data: data['sourceDirectory'] = sourceDir |
| if not 'generator' in data: data['generator'] = cmakeGenerator |
| if not 'extraGenerator' in data: data['extraGenerator'] = '' |
| cmakelib.validateGlobalSettings(proc, cmakeCommand, data) |
| elif 'message' in obj: |
| print("MESSAGE:", obj["message"]) |
| else: |
| print("Unknown command:", json.dumps(obj)) |
| sys.exit(2) |
| |
| print("Completed") |
| |
| # Tell the server to exit. |
| proc.stdin.close() |
| proc.stdout.close() |
| |
| # Wait for the server to exit. |
| # If this version of python supports it, terminate the server after a timeout. |
| try: |
| proc.wait(timeout=5) |
| except TypeError: |
| proc.wait() |
| except: |
| proc.terminate() |
| raise |
| |
| sys.exit(0) |