/**
  * sets the KalturaTestDataSourceFile object from simpleXMLElement (the source xml of the data)
  * @param SimpleXMLElement $simpleXMLElement
  * 
  * @return None, sets the given object
  */
 public function fromSourceXML(SimpleXMLElement $simpleXMLElement)
 {
     //For each test file
     foreach ($simpleXMLElement->TestCaseData as $xmlTestDataFile) {
         //Create new test file obejct
         $testDataFile = new KalturaTestCaseDataFile(trim((string) $xmlTestDataFile["testCaseName"]));
         foreach ($xmlTestDataFile->TestProcedureData as $xmlTestProcedureData) {
             $testProcedureData = new KalturaTestProcedureData();
             if (isset($xmlTestProcedureData["testProcedureName"])) {
                 $testProcedureData->setProcedureName($xmlTestProcedureData["testProcedureName"]);
             }
             //TODO: maybe get this from procedure / test case instance config
             $testCaseNum = 0;
             //For each test data (in this file)
             foreach ($xmlTestProcedureData->TestCaseData as $xmlTestCaseData) {
                 $testCaseName = $testProcedureData->getProcedureName() . " with data set #{$testCaseNum}";
                 $testCaseNum++;
                 //User defined test cases name
                 if (isset($xmlTestCaseData["testCaseInstanceName"])) {
                     $testCaseName = $xmlTestCaseData["testCaseInstanceName"];
                     $testCaseNum--;
                 }
                 //Create new unit test data
                 $testCaseData = new KalturaTestCaseInstanceData($testCaseName);
                 //For each input create the needed Kaltura object identifier
                 foreach ($xmlTestCaseData->Input as $input) {
                     $additionalData = kXml::getAttributesAsArray($input);
                     $testInputDataObjectIdentifier = new KalturaTestDataObject((string) $input["type"], $additionalData);
                     $testCaseData->addInput($testInputDataObjectIdentifier);
                 }
                 //And for each output reference create the needed kaltura object identifier
                 foreach ($xmlTestCaseData->OutputReference as $outputReference) {
                     $additionalData = kXml::getAttributesAsArray($outputReference);
                     $testOutputReferenceDataObjectIdentifier = new KalturaTestDataObject((string) $outputReference["type"], $additionalData);
                     $testCaseData->addOutputReference($testOutputReferenceDataObjectIdentifier);
                 }
                 //Add the new test case data into the test procedure data.
                 $testProcedureData->addTestCaseInstance($testCaseData);
             }
             //Add the new procedure test data into the test file.
             $testDataFile->addTestProcedureData($testProcedureData);
         }
         $this->testFiles[] = $testDataFile;
     }
 }
 /**
  * 
  * Creates a test file from the given KalturaTestCaseDataFile object (the data source for the test)
  * @param testDataFile $testDataFile
  */
 private function createTestDataFile(KalturaTestCaseDataFile $testDataSourceFile)
 {
     //TODO: break this function to 2 parts!
     //1. Create the new test data file
     $newTestDataFile = new KalturaTestCaseDataFile($testDataSourceFile->getTestCaseName());
     //2.For every test data we need to:
     foreach ($testDataSourceFile->getTestProceduresData() as $testProcedureData) {
         $newTestProcedureData = new KalturaTestProcedureData($testProcedureData->getProcedureName());
         foreach ($testProcedureData->getTestCasesData() as $testCaseData) {
             $newTestCaseData = new KalturaTestCaseInstanceData($testCaseData->getTestCaseInstanceName());
             //2. Foreach input - Get the object from kaltura DB and add it to the inputObjects array
             foreach ($testCaseData->getInput() as $inputIdentifier) {
                 $inputObject = $this->getTestDataObject($inputIdentifier);
                 $newTestCaseData->addInput($inputObject);
             }
             //3. Foreach outputReference - Get the object from kaltura DB and add it to the outputReferenceObjects array
             foreach ($testCaseData->getOutputReferences() as $outputReferenceIdentifier) {
                 $outputReferenceObject = $this->getTestDataObject($outputReferenceIdentifier);
                 $newTestCaseData->addOutputReference($outputReferenceObject);
             }
             //5. Add the new unit test data to the Data file
             $newTestProcedureData->addTestCaseInstance($newTestCaseData);
         }
         $newTestDataFile->addTestProcedureData($newTestProcedureData);
     }
     chdir(dirname($this->dataSourceFile->getFilePath()));
     //3. Open the file at the file path
     $testDatFileHandle = fopen("{$testDataSourceFile->getTestCaseName()}.data", "w+");
     //4. Convert the test data to xml dom
     $newTestDataDom = KalturaTestCaseDataFile::toXml($newTestDataFile);
     $newTestDataDom->formatOutput = true;
     //5. Save the entire test data file to the test data file name path (in XML)
     fwrite($testDatFileHandle, $newTestDataDom->saveXML());
 }
 /**
  * 
  * Generates a new testDatafile object from a given xml file path
  * @param string $dataFilePath
  * @return testDataFile - new TestDataFile object
  */
 public static function generateFromDataXml($dataFilePath)
 {
     $testDataFile = new KalturaTestCaseDataFile();
     $testDataFile->fromDataXml($dataFilePath);
     return $testDataFile;
 }
 /**
  * TODO: check if needed
  *  Finds the right test data by its inputs (id and type)
  * @param KalturaTestCaseDataFile $unitTestDataFile
  * @param array $failuresInputs
  * @return int - the KalturaTestCaseDataFile key or null for if non found
  */
 protected static function getTestKeyByInputs(KalturaTestCaseDataFile $unitTestDataFile, array $failuresInputs)
 {
     $testKey = null;
     foreach ($unitTestDataFile->getTestProceduresData() as $testProcedureKey => $testProcedureData) {
         foreach ($testProcedureData->getTestCasesData() as $key => $unitTestData) {
             $isAllInputsFound = KalturaTestResultUpdater::isAllFound($unitTestData->getInput(), $failuresInputs);
             $isAllOutputReferencesFound = KalturaTestResultUpdater::isAllFound($unitTestData->getOutputReferences(), $failuresInputs);
             if ($isAllInputsFound && $isAllOutputReferencesFound) {
                 $testKey = $key;
                 break;
             }
         }
         //If key is found then skip
         if (isset($testKey)) {
             break;
         }
     }
     return $testKey;
 }