Exemple #1
0
// load given song
void Song::loadProject( const QString & fileName )
{
	QDomNode node;

	m_loadingProject = true;

	Engine::projectJournal()->setJournalling( false );

	m_oldFileName = m_fileName;
	m_fileName = fileName;

	DataFile dataFile( m_fileName );
	// if file could not be opened, head-node is null and we create
	// new project
	if( dataFile.head().isNull() )
	{
		if( m_loadOnLaunch )
		{
			createNewProject();
		}
		m_fileName = m_oldFileName;
		return;
	}

	m_oldFileName = m_fileName;

	clearProject();

	clearErrors();

	DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeLoad );

	Engine::mixer()->requestChangeInModel();

	// get the header information from the DOM
	m_tempoModel.loadSettings( dataFile.head(), "bpm" );
	m_timeSigModel.loadSettings( dataFile.head(), "timesig" );
	m_masterVolumeModel.loadSettings( dataFile.head(), "mastervol" );
	m_masterPitchModel.loadSettings( dataFile.head(), "masterpitch" );

	if( m_playPos[Mode_PlaySong].m_timeLine )
	{
		// reset loop-point-state
		m_playPos[Mode_PlaySong].m_timeLine->toggleLoopPoints( 0 );
	}

	if( !dataFile.content().firstChildElement( "track" ).isNull() )
	{
		m_globalAutomationTrack->restoreState( dataFile.content().
						firstChildElement( "track" ) );
	}

	//Backward compatibility for LMMS <= 0.4.15
	PeakController::initGetControllerBySetting();

	// Load mixer first to be able to set the correct range for FX channels
	node = dataFile.content().firstChildElement( Engine::fxMixer()->nodeName() );
	if( !node.isNull() )
	{
		Engine::fxMixer()->restoreState( node.toElement() );
		if( gui )
		{
			// refresh FxMixerView
			gui->fxMixerView()->refreshDisplay();
		}
	}

	node = dataFile.content().firstChild();

	QDomNodeList tclist=dataFile.content().elementsByTagName("trackcontainer");
	m_nLoadingTrack=0;
	for( int i=0,n=tclist.count(); i<n; ++i )
	{
		QDomNode nd=tclist.at(i).firstChild();
		while(!nd.isNull())
		{
			if( nd.isElement() && nd.nodeName() == "track" )
			{
				++m_nLoadingTrack;
				if( nd.toElement().attribute("type").toInt() == Track::BBTrack )
				{
					n += nd.toElement().elementsByTagName("bbtrack").at(0)
						.toElement().firstChildElement().childNodes().count();
				}
				nd=nd.nextSibling();
			}
		}
	}

	while( !node.isNull() )
	{
		if( node.isElement() )
		{
			if( node.nodeName() == "trackcontainer" )
			{
				( (JournallingObject *)( this ) )->restoreState( node.toElement() );
			}
			else if( node.nodeName() == "controllers" )
			{
				restoreControllerStates( node.toElement() );
			}
			else if( gui )
			{
				if( node.nodeName() == gui->getControllerRackView()->nodeName() )
				{
					gui->getControllerRackView()->restoreState( node.toElement() );
				}
				else if( node.nodeName() == gui->pianoRoll()->nodeName() )
				{
					gui->pianoRoll()->restoreState( node.toElement() );
				}
				else if( node.nodeName() == gui->automationEditor()->m_editor->nodeName() )
				{
					gui->automationEditor()->m_editor->restoreState( node.toElement() );
				}
				else if( node.nodeName() == gui->getProjectNotes()->nodeName() )
				{
					 gui->getProjectNotes()->SerializingObject::restoreState( node.toElement() );
				}
				else if( node.nodeName() == m_playPos[Mode_PlaySong].m_timeLine->nodeName() )
				{
					m_playPos[Mode_PlaySong].m_timeLine->restoreState( node.toElement() );
				}
			}
		}
		node = node.nextSibling();
	}

	// quirk for fixing projects with broken positions of TCOs inside
	// BB-tracks
	Engine::getBBTrackContainer()->fixIncorrectPositions();

	// Connect controller links to their controllers
	// now that everything is loaded
	ControllerConnection::finalizeConnections();

	// resolve all IDs so that autoModels are automated
	AutomationPattern::resolveAllIDs();


	Engine::mixer()->doneChangeInModel();

	ConfigManager::inst()->addRecentlyOpenedProject( fileName );

	Engine::projectJournal()->setJournalling( true );

	emit projectLoaded();

	if ( hasErrors())
	{
		if ( gui )
		{
			QMessageBox::warning( NULL, tr("LMMS Error report"), errorSummary(),
							QMessageBox::Ok );
		}
		else
		{
			QTextStream(stderr) << Engine::getSong()->errorSummary() << endl;
		}
	}

	m_loadingProject = false;
	m_modified = false;
	m_loadOnLaunch = false;

	if( gui && gui->mainWindow() )
	{
		gui->mainWindow()->resetWindowTitle();
	}
}
Exemple #2
0
//------------------------------------------------------------------------------
//
std::auto_ptr<XxDiffs> XxBuilderDirs2::process( 
   const QString& command,
   XxBuffer&      buffer1,
   XxBuffer&      buffer2
)
{
   initLines();

   QString path1 = buffer1.getName();
   QString path2 = buffer2.getName();

   QStringList filenames;
   filenames.append( path1 );
   filenames.append( path2 );
   QStringList out_args;
   QString executable;
   XxUtil::splitArgs( command, filenames, executable, out_args );

   QProcess diffProc;
   diffProc.start( executable, out_args );
   if ( ! diffProc.waitForStarted() ) {
      throw XxIoError( XX_EXC_PARAMS );
   }
   diffProc.waitForReadyRead();
   diffProc.setReadChannel( QProcess::StandardOutput );

   std::vector<DirDiffType> types1;
   std::vector<DirDiffType> types2;

   QTextStream errors( &_errors );

   // Note: for now we don't support recursive diffs built against a directory.
   if ( _buildSolelyFromOutput || _isDiffRecursive ) {
      buildSolelyFromOutput(
         diffProc, errors, buffer1, buffer2, types1, types2
      );
   }
   else {
      buildAgainstReadDirectory( 
         diffProc, errors, buffer1, buffer2, types1, types2
      );
   }

#ifdef LOCAL_TRACE
   XX_TRACE( "------------------------------" );
   for ( unsigned int ii = 0; ii < types1.size(); ++ii ) {
      XX_TRACE( typeString[ types1[ii] ] );
   }
   XX_TRACE( "------------------------------" );
   XX_TRACE( "------------------------------" );
   for ( unsigned int ii = 0; ii < types2.size(); ++ii ) {
      XX_TRACE( typeString[ types2[ii] ] );
   }
   XX_TRACE( "------------------------------" );
#endif
      
   XxFln fline1 = 1;
   XxFln fline2 = 1;
   {
      // Create regions with it. Hopefully our searches resulted in something
      // coherent w.r.t. to the quantities and pair matching of entries. Barf if
      // it doesn't.
      std::vector<DirDiffType>::const_iterator it1 = types1.begin();
      std::vector<DirDiffType>::const_iterator it2 = types2.begin();
   
      while ( it1 != types1.end() || it2 != types2.end() ) {
         if ( it1 == types1.end() ) {
            if ( *it2 != ONLY_IN ) {
               throw XxInternalError( XX_EXC_PARAMS );
            }
            XxLine line( XxLine::INSERT_2, -1, fline2++ );
            addLine( line );
            ++it2;
            continue;
         }
         if ( it2 == types2.end() ) {
            if ( *it1 != ONLY_IN ) {
               throw XxInternalError( XX_EXC_PARAMS );
            }
            XxLine line( XxLine::INSERT_1, fline1++, -1 );
            addLine( line );
            ++it1;
            continue;
         }

         if ( *it1 == ONLY_IN ) {
            XxLine line( XxLine::INSERT_1, fline1++, -1 );
            addLine( line );
            ++it1;
         }
         else if ( *it2 == ONLY_IN ) {
            XxLine line( XxLine::INSERT_2, -1, fline2++ );
            addLine( line );
            ++it2;
         }
         else if ( *it1 == DIFFER ) {
            if ( *it2 != *it1 ) {
               throw XxInternalError( XX_EXC_PARAMS );
            }
            XxLine::Type dtype = 
               _ignoreFileChanges == true ? XxLine::SAME : XxLine::DIFF_ALL;
            XxLine line( dtype, fline1++, fline2++ );
            addLine( line );
            ++it1;
            ++it2;
         }
         else if ( *it1 == IDENTICAL ) {
            if ( *it2 != *it1 ) {
               throw XxInternalError( XX_EXC_PARAMS );
            }
            XxLine line( XxLine::SAME, fline1++, fline2++ );
            addLine( line );
            ++it1;
            ++it2;
         }
         else if ( *it1 == COMMON_SUBDIR ) {
            if ( *it2 != *it1 ) {
               throw XxInternalError( XX_EXC_PARAMS );
            }
            XxLine line( XxLine::DIRECTORIES, fline1++, fline2++ );
            addLine( line );
            ++it1;
            ++it2;
         }
         else {
            XX_ASSERT( false );
         }
      }
   }

   // Create hunks.
   if ( _lines.size() > 0 ) {
      XxHunk curHunk = 0;
      XxLine::Type prevType = _lines[0].getType();
      _lines[0].setHunkId( curHunk );
      for ( XxDln ii = 1; ii < XxDln(_lines.size()); ++ii ) {
         XxLine& cline = _lines[ii];
         if ( prevType != cline.getType() ) {
            ++curHunk;
            prevType = cline.getType();
         }
         cline.setHunkId( curHunk );
      }
   }

   diffProc.waitForFinished();

   // Collect stderr.
   QString errstr = diffProc.readAllStandardError();
   if ( ! errstr.isEmpty() ) {
      errors << errstr << endl;
   }
   _status = ( diffProc.exitStatus() == QProcess::NormalExit ) ? diffProc.exitCode() : 2;

   // Saved error text.
   errors << flush;
   XX_LOCAL_TRACE( "Errors: " << _errors );

   // If we've read no lines and there are diff errors then blow off
   if ( ( fline1 == 1 ) && ( fline2 == 1 ) && hasErrors() ) {
      throw XxIoError( XX_EXC_PARAMS );
   }

   std::auto_ptr<XxDiffs> ap( new XxDiffs( _lines, true ) );
   return ap;
}
Exemple #3
0
bool Form::valid()
{
    return FormElement::valid() && root().size() > 0 && !hasErrors();
}
Exemple #4
0
/// Configuration  : TESTING
/// Function name  : verifyScriptTranslationTestCase
// Description     : Verify the results of a Script Translation test case
// 
// CONST UINT          iTestCaseID    : [in] TestCase ID
// CONST OPERATION_DATA*  pOperationData : [in] Operation data for the test case
// 
// Return Value   : TRUE if validated succesfully, FALSE otherwise
// 
BOOL  verifyScriptTranslationTestCase(CONST UINT  iTestCaseID, CONST OPERATION_DATA*  pOperationData)
{
   OPERATION_RESULT  eDesiredResult;   // Correct result for the current TestCase
   ERROR_QUEUE*      pErrorQueue;      // Convenience pointer for the thread error queue
   BOOL              bVerified;        // Verifcation result, defaults to FALSE

   // Prepare
   pErrorQueue = pOperationData->pErrorQueue;
   bVerified   = FALSE;
   
   /// Verify ErrorQueue and Operation Result
   switch (iTestCaseID)
   {
   /// [050: MISSING SCRIPT TAG] - Check for 'Missing <Script> Tag' (+ 'Unexpected closing tag')
   //  [CRITICAL ERROR]
   case TC_MISSING_SCRIPT_TAG:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 2, IDS_SCRIPT_TAG_MISSING, IDS_XML_UNEXPECTED_CLOSING_TAG);
      eDesiredResult = OR_FAILURE;
      break;

   /// [051: MISSING CODEARRAY TAG] - Check for 'Missing <codearray> Tag' (+ 'Unexpected closing tag')
   //  [CRITICAL ERROR]
   case TC_MISSING_CODEARRAY_TAG:
#ifdef _DEBUG
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 2, IDS_CODEARRAY_TAG_MISSING, IDS_XML_MISMATCHED_CLOSING_TAG);
#else
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 3, IDS_CODEARRAY_TAG_MISSING, IDS_XML_UNEXPECTED_CLOSING_BRACKET, IDS_XML_MISMATCHED_CLOSING_TAG);
#endif
      eDesiredResult = OR_FAILURE;
      break;

   /// [052-056: MISSING SCRIPT PROPERTY TAG] - Check for 'Missing Property Tag' (+ 'Unexpected closing tag')
   //  [CRITICAL ERROR]
   case TC_MISSING_NAME_TAG:
   case TC_MISSING_DESCRIPTION_TAG:
   case TC_MISSING_ENGINEVERSION_TAG:
   case TC_MISSING_VERSION_TAG:
   case TC_MISSING_ARGUMENTS_TAG:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_PROPERTY_TAG_MISSING);
      eDesiredResult = OR_FAILURE;
      break;

   /// [057: MISSING SOURCETEXT TAG] - Check for 'Missing Property Tag' (+ 'Unexpected closing tag')
   //  [NO ERROR]
   case TC_MISSING_SOURCETEXT_TAG:
      bVerified = !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;


   /// [058: INCORRECT CODEARRAY SIZE] - Check for 'Invalid CodeArray' 
   //  [CRITICAL ERROR]
   case TC_CODEARRAY_INCORRECT_SIZE:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_CODEARRAY_INVALID);
      eDesiredResult = OR_FAILURE;
      break;

   /// [059: INVALID STANDARD BRANCH] - Check for 'Invalid Standard Branch' 
   //  [CRITICAL ERROR]
   case TC_CODEARRAY_INVALID_STANDARD_BRANCH:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_CODEARRAY_STANDARD_BRANCH_INVALID);
      eDesiredResult = OR_FAILURE;
      break;

   /// [060: EMPTY STANDARD BRANCH] - Check for 'Empty Standard Branch' 
   //  [CRITICAL ERROR]
   case TC_CODEARRAY_EMPTY_STANDARD_BRANCH:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_CODEARRAY_STANDARD_BRANCH_EMPTY);
      eDesiredResult = OR_FAILURE;
      break;

   /// [061: INVALID AUXILIARY BRANCH] - Check for 'Invalid Auxiliary Branch' 
   //  [CRITICAL ERROR]
   case TC_CODEARRAY_INVALID_AUXILIARY_BRANCH:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_CODEARRAY_AUXILIARY_BRANCH_INVALID);
      eDesiredResult = OR_FAILURE;
      break;

   /// [062: INVALID VARIABLES BRANCH] - Check for 'Invalid Variables Branch' 
   //  [CRITICAL ERROR]
   case TC_CODEARRAY_INVALID_VARIABLES_BRANCH:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_CODEARRAY_VARIABLES_BRANCH_INVALID);
      eDesiredResult = OR_FAILURE;
      break;

   /// [063: MISSING COMMAND ID] - Check for 'Missing Command ID' 
   //  [CRITICAL ERROR]
   case TC_CODEARRAY_MISSING_COMMAND_ID:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_CODEARRAY_COMMAND_ID_MISSING);
      eDesiredResult = OR_FAILURE;
      break;

   /// [065: MISSING SCRIPT DESCRIPTION] - No Error
   //  [NO ERROR]
   case TC_MISSING_SCRIPT_DESCRIPTION:
      bVerified = !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [064, 066, 067: MISSING SCRIPT NAME/VERSION/ENGINEVERSION] - Check for 'Missing Script property' 
   //  [CRITICAL ERROR]
   case TC_MISSING_SCRIPT_NAME:
   case TC_MISSING_SCRIPT_VERSION:
   case TC_MISSING_SCRIPT_ENGINEVERSION:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_PROPERTY_TAG_MISSING);
      eDesiredResult = OR_FAILURE;
      break;

   /// [068: ASSIGNMENT] - Ensure result is '$a = $b'
   //  [NO ERROR] 
   case TC_EXPRESSION_ASSIGNMENT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("$a = $b"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [069: SIMPLE SMALL EXPRESSION] - Ensure result is '$a = $b + $c'
   //  [NO ERROR] 
   case TC_EXPRESSION_SIMPLE_SMALL:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("$a = $b + $c"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [070: SIMPLE LARGE EXPRESSION] - Ensure result is '$a = $b + $c - $d / $e * $f AND ($g OR ! $h)'
   //  [NO ERROR] 
   case TC_EXPRESSION_SIMPLE_LARGE:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("$a = $b + $c - $d / $e * $f AND ($g OR !$h)"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [071: SIMPLE HUGE EXPRESSION] - Ensure result is '$a = $b + $c - $d / $e * $f AND ($g OR !$h) + $c * $d - ($e * $f + ($g - $h)) OR $b AND $c'
   //  [NO ERROR] 
   case TC_EXPRESSION_SIMPLE_HUGE:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("$a = $b + $c - $d / $e * $f AND ($g OR !$h) + $c * $d - ($e * $f + ($g - $h)) OR $b AND $c"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [072: COMPLEX SMALL EXPRESSION] - Ensure result is '$a = $b AND ($c == {1 GJ Shield})'
   //  [NO ERROR] 
   case TC_EXPRESSION_COMPLEX_SMALL:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("$a = $b AND ($c == {1 GJ Shield})"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;
     
   /// [073: COMPLEX LARGE EXPRESSION] - Ensure result is '$a = $b AND ($c == {1 GJ Shield}) OR (5 >= 8) AND 'Hello' == {Banshee Missile}'
   //  [NO ERROR] 
   case TC_EXPRESSION_COMPLEX_LARGE:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("$a = $b AND ($c == {1 GJ Shield}) OR (5 >= 8) AND 'Hello' == {Banshee Missile}"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [074: 'IF' CONDITIONAL] - Ensure result is 'if $a == $b'
   //  [NO ERROR] 
   case TC_CONDITIONAL_IF:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("if $a == $b"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [075: 'IF NOT' CONDITIONAL] - Ensure result is 'if not $a == $b'
   //  [NO ERROR] 
   case TC_CONDITIONAL_IF_NOT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("if not $a == $b"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [076: 'SKIP IF' CONDITIONAL] - Ensure result is 'skip if $a == $b'
   //  [NO ERROR] 
   case TC_CONDITIONAL_SKIP_IF:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("skip if $a == $b"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [077: 'SKIP IF NOT' CONDITIONAL] - Ensure result is 'skip if not $a == $b'
   //  [NO ERROR] 
   case TC_CONDITIONAL_SKIP_IF_NOT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("skip if not $a == $b"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [078: 'WHILE' CONDITIONAL] - Ensure result is 'while $a == $b'
   //  [NO ERROR] 
   case TC_CONDITIONAL_WHILE:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("while $a == $b"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [079: 'WHILE NOT' CONDITIONAL] - Ensure result is 'while not $a == $b'
   //  [NO ERROR] 
   case TC_CONDITIONAL_WHILE_NOT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("while not $a == $b"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [080: 'ELSE' CONDITIONAL] - Ensure result is 'else'
   //  [NO ERROR] 
   case TC_CONDITIONAL_ELSE:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 1, TEXT("else"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [081: 'ELSE IF' CONDITIONAL] - Ensure result is 'else if $a == $b'
   //  [NO ERROR] 
   case TC_CONDITIONAL_ELSE_IF:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 1, TEXT("else if $c == $d"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [082: 'ELSE IF NOT' CONDITIONAL] - Ensure result is 'else if not $a == $b'
   //  [NO ERROR] 
   case TC_CONDITIONAL_ELSE_IF_NOT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 1, TEXT("else if not $c == $d"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [083: COMMENT COMMAND] - Ensure result is '* Example script'
   //  [NO ERROR] 
   case TC_COMMAND_COMMENT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("* Example script"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [084: DEFINE LABEL] - Ensure result is 'start:'
   //  [NO ERROR] 
   case TC_COMMAND_LABEL:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 1, TEXT("start:"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [085: INCREMENT] - Ensure result is 'inc $a'
   //  [NO ERROR] 
   case TC_COMMAND_INCREMENT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 3, TEXT("inc $a"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [086: DECREMENT] - Ensure result is 'dec $a'
   //  [NO ERROR] 
   case TC_COMMAND_DECREMENT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 4, TEXT("dec $a"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [087: WAIT] - Ensure result is '= wait 40 ms'
   //  [NO ERROR] 
   case TC_COMMAND_WAIT:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 5, TEXT("= wait 40 ms"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [088: GOTO LABEL] - Ensure result is 'goto label start:'
   //  [NO ERROR] 
   case TC_COMMAND_GOTO_LABEL:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 6, TEXT("goto label start:"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [089: GOTO SUBROUTINE] - Ensure result is 'gosub start:'
   //  [NO ERROR] 
   case TC_COMMAND_GOTO_SUBROUTINE:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 7, TEXT("gosub start:"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [090: BREAK] - Ensure result is 'break'
   //  [NO ERROR] 
   case TC_COMMAND_BREAK:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 8, TEXT("break"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [091: CONTINUE] - Ensure result is 'continue'
   //  [NO ERROR] 
   case TC_COMMAND_CONTINUE:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 9, TEXT("continue"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [092: END] - Ensure result is 'end'
   //  [NO ERROR] 
   case TC_COMMAND_END:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 10, TEXT("end"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [093: RETURN] - Ensure result is 'return'
   //  [NO ERROR] 
   case TC_COMMAND_RETURN:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 11, TEXT("return null"))
                  AND !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [094: COMMAND NODE COUNT MISMATCH] - Check for 'SourceValue count mismatch' 
   //  [MINOR ERROR]
   case TC_COMMAND_NODE_COUNT_MISMATCH:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_SOURCEVALUE_SIZE_MISMATCH);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [095: INCORRECT COMMAND NODE COUNT] - Check for 'Command node count incorrect'
   //  [MINOR ERROR]
   case TC_COMMAND_NODE_COUNT_INCORRECT:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_COMMAND_NODE_COUNT_MISMATCH);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [096: INVALID PARAMETER TYPE] - Check for 'Invalid parameter type'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_TYPE:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_PARAMETER_TUPLE_TYPE_INVALID);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [097: INVALID CONDITIONAL] - Check for 'Invalid conditional'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_CONDITIONAL:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_RETURN_OBJECT_CONDITIONAL_INVALID);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [098: INVALID VARIABLE] - Check for 'Invalid variable ID'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_VARIABLE_ID:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_TRANSLATION_VARIABLE_INVALID);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [099: INVALID COMMAND] - Check for 'Command syntax not found'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_COMMAND_ID:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_COMMAND_SYNTAX_MISSING);
      eDesiredResult = OR_SUCCESS; 
      break;   

   /// [100: INVALID LABEL NUMBER] - Check for 'Label number not found'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_LABEL_ID:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_LABEL_NUMBER_NOT_FOUND);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [101: INVALID RETURN VARIABLE] - Check for 'Return variable invalid'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_RETURN_VARIABLE:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_RETURN_OBJECT_VARIABLE_INVALID);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [102-117: VALID PARAMETER TYPE] - Ensure no errors
   //  [NO ERROR]
   case TC_PARAMETER_VALID_CONSTANT:
   case TC_PARAMETER_VALID_DATATYPE:
   case TC_PARAMETER_VALID_FLIGHT_RETURN:
   case TC_PARAMETER_VALID_OBJECT_CLASS:
   case TC_PARAMETER_VALID_OBJECT_COMMAND:
   case TC_PARAMETER_VALID_OPERATOR:
   case TC_PARAMETER_VALID_SCRIPTDEF:
   case TC_PARAMETER_VALID_SECTOR:
   case TC_PARAMETER_VALID_SHIP:
   case TC_PARAMETER_VALID_STATION:
   case TC_PARAMETER_VALID_STATION_SERIAL:
   case TC_PARAMETER_VALID_TRANSPORT_CLASS:
   case TC_PARAMETER_VALID_RACE:
   case TC_PARAMETER_VALID_RELATION:
   case TC_PARAMETER_VALID_WARE:
   case TC_PARAMETER_VALID_WING_COMMAND:
      bVerified = !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [118,120-125,128-130,134: INVALID PARAMETER TYPE] - Check for 'Invalid parameter type'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_CONSTANT:
   case TC_PARAMETER_INVALID_FLIGHT_RETURN:
   case TC_PARAMETER_INVALID_OBJECT_CLASS:
   case TC_PARAMETER_INVALID_OBJECT_COMMAND:
   case TC_PARAMETER_INVALID_OPERATOR:
   case TC_PARAMETER_INVALID_SCRIPTDEF:
   case TC_PARAMETER_INVALID_SECTOR:
   case TC_PARAMETER_INVALID_STATION_SERIAL:
   case TC_PARAMETER_INVALID_TRANSPORT_CLASS:
   case TC_PARAMETER_INVALID_RACE:
   case TC_PARAMETER_INVALID_WING_COMMAND:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_TRANSLATION_PARAMETER_INVALID);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [119+131: INVALID DATATYPE] - Check for 'Invalid parameter type'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_DATATYPE:
   case TC_PARAMETER_INVALID_RELATION:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_TRANSLATION_TYPE_CONVERSION_FAILED);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [126+127,132+133: INVALID SHIP, STATION or WARE] - Check for 'Invalid ware'
   //  [MINOR ERROR]
   case TC_PARAMETER_INVALID_SHIP:
   case TC_PARAMETER_INVALID_STATION:
   case TC_PARAMETER_INVALID_WARE_MAINTYPE:
   case TC_PARAMETER_INVALID_WARE_SUBTYPE:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_TRANSLATION_WARE_INVALID);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [135+137: HUGE STRING or COMMENT] - Ensure no errors
   //  [NO ERROR]
   case TC_PARAMETER_STRING_HUGE:
   case TC_PARAMETER_COMMENT_HUGE:
      bVerified = !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [136,138,139: INVALID CHARACTERS in STRING or COMMENT or LABEL NAME] 
   //  [MINOR ERROR]
   case TC_PARAMETER_STRING_ILLEGAL_CHARS:
   case TC_PARAMETER_COMMENT_ILLEGAL_CHARS:
   case TC_LABEL_NAME_ILLEGAL_CHARS:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 3, IDS_SCRIPT_SOURCEVALUE_SIZE_MISMATCH, IDS_XML_UNEXPECTED_CLOSING_BRACKET, IDS_SCRIPT_SOURCEVALUE_SIZE_MISMATCH);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [140,141: INVALID CHARACTERS in a SCRIPT NAME or DESCRIPTION] 
   //  [MINOR ERROR]
   case TC_SCRIPT_NAME_ILLEGAL_CHARS:
   case TC_SCRIPT_DESCRIPTION_ILLEGAL_CHARS:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 5, IDS_XML_UNEXPECTED_OPENING_BRACKET, IDS_XML_UNEXPECTED_CLOSING_BRACKET, IDS_XML_MISMATCHED_CLOSING_TAG, IDS_XML_UNCLOSED_OPENING_TAG, IDS_XML_UNCLOSED_OPENING_TAG);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [142,143: INVALID CHARACTERS in an ARGUMENT NAME or DESCRIPTION] 
   //  [MINOR ERROR]
   case TC_ARGUMENT_NAME_ILLEGAL_CHARS:
   case TC_ARGUMENT_DESCRIPTION_ILLEGAL_CHARS:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 2, IDS_XML_UNEXPECTED_OPENING_BRACKET, IDS_XML_UNEXPECTED_CLOSING_BRACKET);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [144: INVALID CHARACTERS in a SOURCE TEXT LINE] 
   //  [MINOR ERROR]
   case TC_SOURCE_TEXT_ILLEGAL_CHARS:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_XML_UNEXPECTED_CLOSING_BRACKET);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [145: INVALID ARGUMENT INDEX] 
   //  [ERROR CANNOT BE DETECTED]
   case TC_ARGUMENT_INVALID_INDEX:
      bVerified = !hasErrors(pErrorQueue);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [146: INVALID ARGUMENT TYPE] 
   //  [CRITICAL ERROR]
   case TC_ARGUMENT_INVALID_TYPE:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_ARGUMENT_TYPE_INVALID);
      eDesiredResult = OR_FAILURE;
      break;
   
   /// [147: UNSUPPORTED ENGINE VERSION] 
   //  [MINOR ERROR]
   case TC_ENGINE_VERSION_UNSUPPORTED:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_SCRIPT_ENGINE_VERSION_MISMATCH);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [148: MISSING SCRIPT TARGET] 
   //  [MINOR ERROR]
   case TC_SCRIPT_CALL_TARGET_MISSING:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 2, IDS_XML_UNEXPECTED_CLOSING_BRACKET, IDS_SCRIPT_LOAD_IO_ERROR);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [149: SCRIPT TARGET CORRUPT] 
   //  [MINOR ERROR]
   case TC_SCRIPT_CALL_TARGET_CORRUPT:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 2, IDS_XML_UNEXPECTED_CLOSING_BRACKET, IDS_SCRIPT_PROPERTY_TAG_MISSING);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [150: SCRIPT TARGET VALID] 
   //  [MINOR ERROR]
   case TC_SCRIPT_CALL_TARGET_VALID:
      bVerified = checkCommandTranslation(pOperationData->pScriptFile->pCommandList, 0, TEXT("$a = [THIS]-> call script 'script.valid' : iWaitTime=42 szExample='Fandango' bDestroy=[TRUE]"))
                  AND checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_XML_UNEXPECTED_CLOSING_BRACKET);
      eDesiredResult = OR_SUCCESS;
      break;

   /// [151: GAME STRING REFERENCE NOT FOUND]
   //  [MINOR ERROR]
   case TC_GAME_STRING_REFERENCE_NOT_FOUND:
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 1, IDS_TRANSLATION_GAME_STRING_REFERENCE_NOT_FOUND);
      eDesiredResult = OR_SUCCESS;
      break;
   }
   
   
   /*
   /// [0: ] - Check for ''
   //  [CRITICAL ERROR]
   case :
      bVerified = checkErrorQueueMessages(pErrorQueue, iTestCaseID, 2, IDS, IDS);
      eDesiredResult = OR_FAILURE;
      break;
   */

   // [CHECK] Operation result
   if (eDesiredResult != pOperationData->eResult)
   {
      CONSOLE("WARNING: TC.%03u Operation Result is '%s' when it should be '%s'", iTestCaseID, szOperationResults[pOperationData->eResult], szOperationResults[eDesiredResult]);
      bVerified = FALSE;
   }

   // Return result
   return bVerified;
}
Exemple #5
0
bool ObjParser::parse( std::istream& input )
{
    reset();

    // Read each line of the .obj file
    while ( readNextLine( input ) && !hasErrors() )
    {
        // Skip lines that are empty
        if ( isCurrentLineEmpty() )
        {
            continue;
        }

        // Split the input line into "words' that are separated by
        // spaces. The first word is the next obj file command, the others
        // that follow are arguments to that command
        std::vector<std::string> tokens;

        tokenizeCommandString( lineText(), tokens );
        assert( tokens.size() > 0 );

        // What kind of command is this?
        if ( tokens[0] == "v" )
        {
            processVertexPosition( tokens );
        }
        else if ( tokens[0] == "vt" )
        {
            processVertexTexCoord( tokens );
        }
        else if ( tokens[0] == "vn" )
        {
            processVertexNormal( tokens );
        }
        else if ( tokens[0] == "g" )
        {
            processGroup( tokens );
        }
        else if ( tokens[0] == "f" )
        {
            processFace( tokens );
        }
        else if ( tokens[0] == "usemtl" )
        {
            processMaterial( tokens );
        }
        else if ( tokens[0] == "mtllib" )
        {
            processMaterialLib( tokens );
        }
        else if ( tokens[0] == "s" )
        {
            // ignore smoothing groups
        }
        else
        {
            raiseError("Unknown .obj command encountered");
            continue;
        }
    }

    // Make sure the last group has at least one face in it
    if ( m_objdata->currentGroup.empty() == false )
    {
        if ( m_objdata->groups[ m_objdata->currentGroupIndex ].count == 0 )
        {
            raiseError("The last active group didn't have any faces");
        }
    }

    // Now we're done, make sure to return if the parsing was successful or
    // not
    return !hasErrors();
}