2012-10-02 09:12:39 +02:00
/****************************************************************************
2008-12-02 12:01:29 +01:00
* *
2013-01-28 17:12:19 +01:00
* * Copyright ( C ) 2013 Digia Plc and / or its subsidiary ( - ies ) .
2012-10-02 09:12:39 +02:00
* * Contact : http : //www.qt-project.org/legal
2008-12-02 12:01:29 +01:00
* *
2012-10-02 09:12:39 +02:00
* * This file is part of Qt Creator .
2008-12-02 12:01:29 +01:00
* *
2012-10-02 09:12:39 +02:00
* * Commercial License Usage
* * Licensees holding valid commercial Qt licenses may use this file in
* * accordance with the commercial license agreement provided with the
* * Software or , alternatively , in accordance with the terms contained in
* * a written agreement between you and Digia . For licensing terms and
* * conditions see http : //qt.digia.com/licensing. For further information
* * use the contact form at http : //qt.digia.com/contact-us.
2008-12-02 14:17:16 +01:00
* *
2009-02-25 09:15:00 +01:00
* * GNU Lesser General Public License Usage
2012-10-02 09:12:39 +02:00
* * Alternatively , this file may be used under the terms of the GNU Lesser
* * General Public License version 2.1 as published by the Free Software
* * Foundation and appearing in the file LICENSE . LGPL included in the
* * packaging of this file . Please review the following information to
* * ensure the GNU Lesser General Public License version 2.1 requirements
* * will be met : http : //www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
* *
* * In addition , as a special exception , Digia gives you certain additional
* * rights . These rights are described in the Digia Qt LGPL Exception
2010-12-17 16:01:08 +01:00
* * version 1.1 , included in the file LGPL_EXCEPTION . txt in this package .
* *
2012-10-02 09:12:39 +02:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-12-02 12:01:29 +01:00
# include "msvcparser.h"
2009-02-16 13:12:12 +01:00
# include "projectexplorerconstants.h"
2013-06-17 12:05:06 +03:00
2013-07-19 11:37:46 +03:00
# include <utils/qtcassert.h>
2013-06-17 12:05:06 +03:00
# ifdef Q_OS_WIN
2013-06-14 17:06:11 +03:00
# include <utils/winutils.h>
2013-06-17 12:05:06 +03:00
# endif
2008-12-02 12:01:29 +01:00
2011-08-18 13:58:23 +02:00
static const char FILE_POS_PATTERN [ ] = " (cl|LINK|.+) : " ;
static const char ERROR_PATTERN [ ] = " [A-Z]+ \\ d \\ d \\ d \\ d ?: " ;
2011-05-19 16:11:59 +02:00
2012-01-26 13:38:25 +01:00
static QPair < Utils : : FileName , int > parseFileName ( const QString & input )
2011-05-19 16:11:59 +02:00
{
QString fileName = input ;
if ( fileName . startsWith ( QLatin1String ( " LINK " ) )
| | fileName . startsWith ( QLatin1String ( " cl " ) ) )
2012-01-26 13:38:25 +01:00
return qMakePair ( Utils : : FileName ( ) , - 1 ) ;
2011-05-19 16:11:59 +02:00
// Extract linenumber (if it is there):
int linenumber = - 1 ;
if ( fileName . endsWith ( QLatin1Char ( ' ) ' ) ) ) {
int pos = fileName . lastIndexOf ( QLatin1Char ( ' ( ' ) ) ;
if ( pos > = 0 ) {
bool ok = false ;
int n = fileName . mid ( pos + 1 , fileName . count ( ) - pos - 2 ) . toInt ( & ok ) ;
if ( ok ) {
fileName = fileName . left ( pos ) ;
linenumber = n ;
}
}
}
2013-06-17 12:05:06 +03:00
# ifdef Q_OS_WIN
const QString normalized = Utils : : normalizePathName ( fileName ) ;
# else
const QString normalized = fileName ;
# endif
return qMakePair ( Utils : : FileName : : fromUserInput ( normalized ) , linenumber ) ;
2010-08-13 13:27:02 +02:00
}
2009-02-16 13:12:12 +01:00
using namespace ProjectExplorer ;
2008-12-02 12:01:29 +01:00
MsvcParser : : MsvcParser ( )
{
2010-09-30 12:47:45 +02:00
setObjectName ( QLatin1String ( " MsvcParser " ) ) ;
2010-09-08 18:17:52 +02:00
m_compileRegExp . setPattern ( QString : : fromLatin1 ( " ^ " ) + QLatin1String ( FILE_POS_PATTERN )
2011-05-19 16:11:59 +02:00
+ QLatin1String ( " (Command line |fatal )?(warning|error) ( " )
2010-09-08 18:17:52 +02:00
+ QLatin1String ( ERROR_PATTERN ) + QLatin1String ( " .*)$ " ) ) ;
2008-12-02 12:01:29 +01:00
m_compileRegExp . setMinimal ( true ) ;
2013-07-19 11:37:46 +03:00
QTC_CHECK ( m_compileRegExp . isValid ( ) ) ;
2011-05-19 16:11:59 +02:00
m_additionalInfoRegExp . setPattern ( QString : : fromLatin1 ( " ^ (.*) \\ (( \\ d+) \\ ) : (.*)$ " ) ) ;
2010-08-13 13:27:02 +02:00
m_additionalInfoRegExp . setMinimal ( true ) ;
2013-07-19 11:37:46 +03:00
QTC_CHECK ( m_additionalInfoRegExp . isValid ( ) ) ;
2008-12-02 12:01:29 +01:00
}
2009-12-09 13:54:46 +01:00
void MsvcParser : : stdOutput ( const QString & line )
2008-12-02 12:01:29 +01:00
{
2011-05-19 16:11:59 +02:00
int infoPos = m_additionalInfoRegExp . indexIn ( line ) ;
if ( line . startsWith ( QLatin1String ( " " ) ) & & infoPos < 0 ) {
2010-09-02 16:43:22 +02:00
if ( m_lastTask . isNull ( ) )
return ;
2012-01-09 16:30:33 +01:00
m_lastTask . description . append ( QLatin1Char ( ' \n ' ) ) ;
2010-09-02 16:43:22 +02:00
m_lastTask . description . append ( line . mid ( 8 ) ) ;
// trim trailing spaces:
int i = 0 ;
for ( i = m_lastTask . description . length ( ) - 1 ; i > = 0 ; - - i ) {
if ( ! m_lastTask . description . at ( i ) . isSpace ( ) )
break ;
}
m_lastTask . description . truncate ( i + 1 ) ;
if ( m_lastTask . formats . isEmpty ( ) ) {
QTextLayout : : FormatRange fr ;
2012-01-09 16:30:33 +01:00
fr . start = m_lastTask . description . indexOf ( QLatin1Char ( ' \n ' ) ) + 1 ;
2010-09-02 16:43:22 +02:00
fr . length = m_lastTask . description . length ( ) - fr . start ;
fr . format . setFontItalic ( true ) ;
m_lastTask . formats . append ( fr ) ;
} else {
m_lastTask . formats [ 0 ] . length = m_lastTask . description . length ( ) - m_lastTask . formats [ 0 ] . start ;
}
return ;
}
2010-09-08 18:17:52 +02:00
if ( processCompileLine ( line ) )
2009-11-12 15:54:45 +01:00
return ;
2012-11-21 22:40:31 +02:00
if ( line . startsWith ( QLatin1String ( " Error: " ) ) ) {
2012-10-12 16:33:00 +02:00
m_lastTask = Task ( Task : : Error ,
line . mid ( 6 ) . trimmed ( ) , /* description */
Utils : : FileName ( ) , /* fileName */
- 1 , /* linenumber */
Core : : Id ( Constants : : TASK_CATEGORY_COMPILE ) ) ;
return ;
}
2012-11-21 22:40:31 +02:00
if ( line . startsWith ( QLatin1String ( " Warning: " ) ) ) {
2012-10-12 16:33:00 +02:00
m_lastTask = Task ( Task : : Warning ,
line . mid ( 8 ) . trimmed ( ) , /* description */
Utils : : FileName ( ) , /* fileName */
- 1 , /* linenumber */
Core : : Id ( Constants : : TASK_CATEGORY_COMPILE ) ) ;
return ;
}
2011-05-19 16:11:59 +02:00
if ( infoPos > - 1 ) {
2010-09-02 16:43:22 +02:00
m_lastTask = Task ( Task : : Unknown ,
2011-05-19 16:11:59 +02:00
m_additionalInfoRegExp . cap ( 3 ) . trimmed ( ) , /* description */
2012-01-26 13:38:25 +01:00
Utils : : FileName : : fromUserInput ( m_additionalInfoRegExp . cap ( 1 ) ) , /* fileName */
2011-05-19 16:11:59 +02:00
m_additionalInfoRegExp . cap ( 2 ) . toInt ( ) , /* linenumber */
2012-01-26 13:38:25 +01:00
Core : : Id ( Constants : : TASK_CATEGORY_COMPILE ) ) ;
2009-11-12 15:54:45 +01:00
return ;
2008-12-02 12:01:29 +01:00
}
2010-07-27 14:22:23 +02:00
IOutputParser : : stdOutput ( line ) ;
2008-12-02 12:01:29 +01:00
}
2010-09-01 12:55:03 +02:00
void MsvcParser : : stdError ( const QString & line )
2010-09-08 18:17:52 +02:00
{
if ( processCompileLine ( line ) )
return ;
IOutputParser : : stdError ( line ) ;
}
bool MsvcParser : : processCompileLine ( const QString & line )
2010-09-01 12:55:03 +02:00
{
2013-05-03 16:08:00 +02:00
doFlush ( ) ;
2010-09-02 16:43:22 +02:00
2010-09-08 18:17:52 +02:00
if ( m_compileRegExp . indexIn ( line ) > - 1 ) {
2012-01-26 13:38:25 +01:00
QPair < Utils : : FileName , int > position = parseFileName ( m_compileRegExp . cap ( 1 ) ) ;
2010-09-08 18:17:52 +02:00
m_lastTask = Task ( Task : : Unknown ,
2011-05-19 16:11:59 +02:00
m_compileRegExp . cap ( 4 ) . trimmed ( ) /* description */ ,
position . first , position . second ,
2012-01-26 13:38:25 +01:00
Core : : Id ( Constants : : TASK_CATEGORY_COMPILE ) ) ;
2011-05-19 16:11:59 +02:00
if ( m_compileRegExp . cap ( 3 ) = = QLatin1String ( " warning " ) )
2010-09-08 18:17:52 +02:00
m_lastTask . type = Task : : Warning ;
2011-05-19 16:11:59 +02:00
else if ( m_compileRegExp . cap ( 3 ) = = QLatin1String ( " error " ) )
2010-09-08 18:17:52 +02:00
m_lastTask . type = Task : : Error ;
return true ;
2010-09-01 12:55:03 +02:00
}
2010-09-08 18:17:52 +02:00
return false ;
2010-09-01 12:55:03 +02:00
}
2013-05-03 16:08:00 +02:00
void MsvcParser : : doFlush ( )
2010-09-02 16:43:22 +02:00
{
if ( m_lastTask . isNull ( ) )
return ;
2013-05-03 16:08:00 +02:00
Task t = m_lastTask ;
m_lastTask . clear ( ) ;
emit addTask ( t ) ;
2010-09-02 16:43:22 +02:00
}
2010-08-12 16:29:58 +02:00
// Unit tests:
# ifdef WITH_TESTS
# include <QTest>
# include "projectexplorer.h"
# include "projectexplorer / outputparser_test.h"
using namespace ProjectExplorer : : Internal ;
void ProjectExplorerPlugin : : testMsvcOutputParsers_data ( )
{
QTest : : addColumn < QString > ( " input " ) ;
QTest : : addColumn < OutputParserTester : : Channel > ( " inputChannel " ) ;
QTest : : addColumn < QString > ( " childStdOutLines " ) ;
QTest : : addColumn < QString > ( " childStdErrLines " ) ;
QTest : : addColumn < QList < ProjectExplorer : : Task > > ( " tasks " ) ;
QTest : : addColumn < QString > ( " outputLines " ) ;
QTest : : newRow ( " pass-through stdout " )
< < QString : : fromLatin1 ( " Sometext " ) < < OutputParserTester : : STDOUT
2011-05-18 18:39:14 +02:00
< < QString : : fromLatin1 ( " Sometext \n " ) < < QString ( )
2010-08-12 16:29:58 +02:00
< < QList < ProjectExplorer : : Task > ( )
< < QString ( ) ;
QTest : : newRow ( " pass-through stderr " )
< < QString : : fromLatin1 ( " Sometext " ) < < OutputParserTester : : STDERR
2011-05-18 18:39:14 +02:00
< < QString ( ) < < QString : : fromLatin1 ( " Sometext \n " )
2010-08-12 16:29:58 +02:00
< < QList < ProjectExplorer : : Task > ( )
< < QString ( ) ;
QTest : : newRow ( " labeled error " )
< < QString : : fromLatin1 ( " qmlstandalone \\ main.cpp(54) : error C4716: 'findUnresolvedModule' : must return a value " ) < < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
2012-11-21 22:40:31 +02:00
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Error ,
QLatin1String ( " C4716: 'findUnresolvedModule' : must return a value " ) ,
Utils : : FileName : : fromUserInput ( QLatin1String ( " qmlstandalone \\ main.cpp " ) ) , 54 ,
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2010-08-12 16:29:58 +02:00
< < QString ( ) ;
QTest : : newRow ( " labeled warning " )
< < QString : : fromLatin1 ( " x: \\ src \\ plugins \\ projectexplorer \\ msvcparser.cpp(69) : warning C4100: 'something' : unreferenced formal parameter " ) < < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
2012-11-21 22:40:31 +02:00
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Warning ,
QLatin1String ( " C4100: 'something' : unreferenced formal parameter " ) ,
Utils : : FileName : : fromUserInput ( QLatin1String ( " x: \\ src \\ plugins \\ projectexplorer \\ msvcparser.cpp " ) ) , 69 ,
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2010-08-12 16:29:58 +02:00
< < QString ( ) ;
2010-08-13 13:27:02 +02:00
QTest : : newRow ( " additional information " )
< < QString : : fromLatin1 ( " x: \\ src \\ plugins \\ texteditor \\ icompletioncollector.h(50) : warning C4099: 'TextEditor::CompletionItem' : type name first seen using 'struct' now seen using 'class' \n "
" x: \\ src \\ plugins \\ texteditor \\ completionsupport.h(39) : see declaration of 'TextEditor::CompletionItem' " )
< < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Warning ,
QLatin1String ( " C4099: 'TextEditor::CompletionItem' : type name first seen using 'struct' now seen using 'class' " ) ,
2012-11-21 22:40:31 +02:00
Utils : : FileName : : fromUserInput ( QLatin1String ( " x: \\ src \\ plugins \\ texteditor \\ icompletioncollector.h " ) ) , 50 ,
2012-01-26 13:38:25 +01:00
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) )
2010-08-13 13:27:02 +02:00
< < Task ( Task : : Unknown ,
QLatin1String ( " see declaration of 'TextEditor::CompletionItem' " ) ,
2012-11-21 22:40:31 +02:00
Utils : : FileName : : fromUserInput ( QLatin1String ( " x: \\ src \\ plugins \\ texteditor \\ completionsupport.h " ) ) , 39 ,
2012-01-26 13:38:25 +01:00
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2010-08-13 13:27:02 +02:00
< < QString ( ) ;
2010-09-01 12:55:03 +02:00
QTest : : newRow ( " fatal linker error " )
< < QString : : fromLatin1 ( " LINK : fatal error LNK1146: no argument specified with option '/LIBPATH:' " )
< < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Error ,
QLatin1String ( " LNK1146: no argument specified with option '/LIBPATH:' " ) ,
2012-01-26 13:38:25 +01:00
Utils : : FileName ( ) , - 1 ,
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2010-09-01 12:55:03 +02:00
< < QString ( ) ;
// This actually comes through stderr!
QTest : : newRow ( " command line warning " )
< < QString : : fromLatin1 ( " cl : Command line warning D9002 : ignoring unknown option '-fopenmp' " )
< < OutputParserTester : : STDERR
< < QString ( ) < < QString ( )
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Warning ,
QLatin1String ( " D9002 : ignoring unknown option '-fopenmp' " ) ,
2012-01-26 13:38:25 +01:00
Utils : : FileName ( ) , - 1 ,
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2010-09-01 12:55:03 +02:00
< < QString ( ) ;
2010-09-02 16:43:22 +02:00
QTest : : newRow ( " complex error " )
< < QString : : fromLatin1 ( " .. \\ untitled \\ main.cpp(19) : error C2440: 'initializing' : cannot convert from 'int' to 'std::_Tree<_Traits>::iterator' \n "
" with \n "
" [ \n "
" _Traits=std::_Tmap_traits<int,double,std::less<int>,std::allocator<std::pair<const int,double>>,false> \n "
" ] \n "
" No constructor could take the source type, or constructor overload resolution was ambiguous " )
< < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Error ,
QLatin1String ( " C2440: 'initializing' : cannot convert from 'int' to 'std::_Tree<_Traits>::iterator' \n "
" with \n "
" [ \n "
" _Traits=std::_Tmap_traits<int,double,std::less<int>,std::allocator<std::pair<const int,double>>,false> \n "
" ] \n "
" No constructor could take the source type, or constructor overload resolution was ambiguous " ) ,
2012-11-21 22:40:31 +02:00
Utils : : FileName : : fromUserInput ( QLatin1String ( " .. \\ untitled \\ main.cpp " ) ) , 19 ,
2012-01-26 13:38:25 +01:00
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2010-09-02 16:43:22 +02:00
< < QString ( ) ;
2010-09-08 18:17:52 +02:00
QTest : : newRow ( " Linker error 1 " )
< < QString : : fromLatin1 ( " main.obj : error LNK2019: unresolved external symbol \" public: void __thiscall Data::doit(void) \" (?doit@Data@@QAEXXZ) referenced in function _main " )
< < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Error ,
QLatin1String ( " LNK2019: unresolved external symbol \" public: void __thiscall Data::doit(void) \" (?doit@Data@@QAEXXZ) referenced in function _main " ) ,
2012-11-21 22:40:31 +02:00
Utils : : FileName : : fromUserInput ( QLatin1String ( " main.obj " ) ) , - 1 ,
2012-01-26 13:38:25 +01:00
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2010-09-08 18:17:52 +02:00
< < QString ( ) ;
QTest : : newRow ( " Linker error 2 " )
< < QString : : fromLatin1 ( " debug \\ Experimentation.exe : fatal error LNK1120: 1 unresolved externals " )
< < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Error ,
QLatin1String ( " LNK1120: 1 unresolved externals " ) ,
2012-11-21 22:40:31 +02:00
Utils : : FileName : : fromUserInput ( QLatin1String ( " debug \\ Experimentation.exe " ) ) , - 1 ,
2012-01-26 13:38:25 +01:00
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2010-09-08 18:17:52 +02:00
< < QString ( ) ;
2012-10-12 16:33:00 +02:00
QTest : : newRow ( " Linker error 3 " )
< < QString : : fromLatin1 ( " Error: dependent '.. \\ .. \\ .. \\ .. \\ creator-2.5 \\ src \\ plugins \\ coreplugin \\ ifile.h' does not exist. " )
< < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Error ,
QLatin1String ( " dependent '.. \\ .. \\ .. \\ .. \\ creator-2.5 \\ src \\ plugins \\ coreplugin \\ ifile.h' does not exist. " ) ,
Utils : : FileName ( ) , - 1 ,
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
< < QString ( ) ;
2011-05-19 16:11:59 +02:00
QTest : : newRow ( " Multiline error " )
< < QString : : fromLatin1 ( " c: \\ Program Files (x86) \\ Microsoft Visual Studio 10.0 \\ VC \\ INCLUDE \\ xutility(2227) : warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' \n "
" c: \\ Program Files (x86) \\ Microsoft Visual Studio 10.0 \\ VC \\ INCLUDE \\ xutility(2212) : see declaration of 'std::_Copy_impl' \n "
" symbolgroupvalue.cpp(2314) : see reference to function template instantiation '_OutIt std::copy<const unsigned char*,unsigned short*>(_InIt,_InIt,_OutIt)' being compiled \n "
" with \n "
" [ \n "
" _OutIt=unsigned short *, \n "
" _InIt=const unsigned char * \n "
" ] " )
< < OutputParserTester : : STDOUT
< < QString ( ) < < QString ( )
< < ( QList < ProjectExplorer : : Task > ( )
< < Task ( Task : : Warning ,
QLatin1String ( " C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' " ) ,
2012-11-21 22:40:31 +02:00
Utils : : FileName : : fromUserInput ( QLatin1String ( " c: \\ Program Files (x86) \\ Microsoft Visual Studio 10.0 \\ VC \\ INCLUDE \\ xutility " ) ) , 2227 ,
2012-01-26 13:38:25 +01:00
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) )
2011-05-19 16:11:59 +02:00
< < Task ( Task : : Unknown ,
QLatin1String ( " see declaration of 'std::_Copy_impl' " ) ,
2012-11-21 22:40:31 +02:00
Utils : : FileName : : fromUserInput ( QLatin1String ( " c: \\ Program Files (x86) \\ Microsoft Visual Studio 10.0 \\ VC \\ INCLUDE \\ xutility " ) ) , 2212 ,
2012-01-26 13:38:25 +01:00
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) )
2011-05-19 16:11:59 +02:00
< < Task ( Task : : Unknown ,
QLatin1String ( " see reference to function template instantiation '_OutIt std::copy<const unsigned char*,unsigned short*>(_InIt,_InIt,_OutIt)' being compiled \n "
" with \n "
" [ \n "
" _OutIt=unsigned short *, \n "
" _InIt=const unsigned char * \n "
" ] " ) ,
2012-11-21 22:40:31 +02:00
Utils : : FileName : : fromUserInput ( QLatin1String ( " symbolgroupvalue.cpp " ) ) , 2314 ,
2012-01-26 13:38:25 +01:00
Core : : Id ( ProjectExplorer : : Constants : : TASK_CATEGORY_COMPILE ) ) )
2011-05-19 16:11:59 +02:00
< < QString ( ) ;
2010-08-12 16:29:58 +02:00
}
void ProjectExplorerPlugin : : testMsvcOutputParsers ( )
{
OutputParserTester testbench ;
testbench . appendOutputParser ( new MsvcParser ) ;
QFETCH ( QString , input ) ;
QFETCH ( OutputParserTester : : Channel , inputChannel ) ;
QFETCH ( QList < Task > , tasks ) ;
QFETCH ( QString , childStdOutLines ) ;
QFETCH ( QString , childStdErrLines ) ;
QFETCH ( QString , outputLines ) ;
testbench . testParsing ( input , inputChannel ,
tasks , childStdOutLines , childStdErrLines ,
outputLines ) ;
}
2011-11-24 16:11:37 +01:00
# endif // WITH_TEST