Skip to content
Snippets Groups Projects
user avatar
Orgad Shaneh authored
Mostly done using the following Ruby script:

Fname = 'src/plugins/cpptools/cppcompletion_test.cpp'
s = File.read(Fname)
mod = s.gsub(/(?<declaration>void CppToolsPlugin::test_(?<test_name>[^(]+)\(\)\n\{)(?<body>.*?\n)\}/m) { |func|
  match = $~
  declaration = match['declaration']
  body = match['body']
  test_name = match['test_name'].sub('_data', '')
  final = body.gsub(/(?:completions.clear\(\);\s+)?(?: +)[^\n]* =\n(?<code>.*?);\s*(?<completions>(?:completions.append\(QLatin1String\("[^"]*"\)\);\s*)*)QTest::newRow\("case: (?<name>.+?)"\)\s*<< code << _\("(?<prefix>[^"]+)"\) << completions;/m) {
    m = $~
    res = "    QTest::newRow(\"#{test_name}: #{m['name']}\") << _(\n#{m['code'].rstrip}\n        ) << _(\"#{m['prefix']}\") << (QStringList()"
    m['completions'].scan(/completions.append\((.+)\);/) { |comp|
      res << "\n            << #{comp[0]}"
    }
    res + ');'
  }.gsub(/(?: +)[^\n]* =\n(?<code>.*?);\n\s*CompletionTestCase test\(.+?, "(?<prefix>.+?)"\);\s*QStringList expected;\s*(?<completions>(?:expected.append\(QLatin1String\("[^"]*"\)\);\s*)*)const QStringList completions = test.getCompletions\(\);\s*QCOMPARE\(completions, expected\);/m) {
    m = $~
    res = "    QTest::newRow(\"#{test_name}\") << _(\n#{m['code'].rstrip}\n        ) << _(\"#{m['prefix']}\") << (QStringList()"
    m['completions'].scan(/expected.append\((.+)\);/) { |comp|
      res << "\n            << #{comp[0]}"
    }
    res + ');'
  }.gsub(/(?: +)[^\n]* =\n(?<code>.*?);\n\s*CompletionTestCase test\(.+?(?:, (?<prefix>".+?"))?\);\s*(?:const )?QStringList completions = test.getCompletions\(\);\s*QCOMPARE\(completions.size\(\), \d+\);(?<completions>(?:\s*QVERIFY\(completions.contains\([^\n]+\);)*)\n/m) { |mm|
    m = $~
    res = "    QTest::newRow(\"#{test_name}\") << _(\n#{m['code'].rstrip}\n        ) << _(#{m['prefix']}) << (QStringList()"
    m['completions'].scan(/QVERIFY\(completions.contains\((.+?)\)\);/) { |comp|
      res << "\n            << #{comp[0]}"
    }
    res + ");\n"
  }.gsub(/(?: +)[^\n]* =\n(?<code>.*?);\n\s*CompletionTestCase test\(.+?(?:, (?<prefix>".+?"))?\);\s*bool replaceAccessOperator = false;\s*const QStringList completions = test.getCompletions\(\&replaceAccessOperator\);\s*QCOMPARE\(completions.size\(\), \d+\);(?<completions>(?:\s*QVERIFY\(completions.contains\([^\n]+\);)*)\s*QVERIFY\((?<replace>!?)[^)]*\);\n/m) { |mm|
    m = $~
    res = "    QTest::newRow(\"#{test_name}\") << _(\n#{m['code'].rstrip}\n        ) << _(#{m['prefix']}) << (QStringList()"
    m['completions'].scan(/QVERIFY\(completions.contains\((.+?)\)\);/) { |comp|
      res << "\n            << #{comp[0]}"
    }
    res + ")\n        << #{m['replace'].empty?};\n"
  }
  if final == body or final['QTest::addColumn']
    declaration + final + "}"
  else
    final
  end
}.gsub(/QTest::newRow\("([^"]+)"/) { |m|
  name = $1
  if name.size > 73
    space = name[0..73].rindex(/[ _]/)
    "QTest::newRow(\"#{name[0..space]}\"\n                  \"#{name[space+1..-1]}\""
  else
    m
  end
}.gsub(/\s+QTest::newRow/, "\n\n    QTest::newRow")
if mod != s
    File.open(Fname, 'wt').write(mod)
end

Change-Id: Id6bfb03cdf31ac27b36028fcdc861c340a5398f4
Reviewed-by: default avatarNikolai Kosjar <nikolai.kosjar@digia.com>
0909c029
History
Name Last commit Last update
..
CppTools.pluginspec.in
abstracteditorsupport.cpp
abstracteditorsupport.h
builtinindexingsupport.cpp
builtinindexingsupport.h
commentssettings.cpp
commentssettings.h
completionsettingspage.cpp
completionsettingspage.h
completionsettingspage.ui
cppchecksymbols.cpp
cppchecksymbols.h
cppclassesfilter.cpp
cppclassesfilter.h
cppcodeformatter.cpp
cppcodeformatter.h
cppcodegen_test.cpp
cppcodemodelsettings.cpp
cppcodemodelsettings.h
cppcodemodelsettingspage.cpp
cppcodemodelsettingspage.h
cppcodemodelsettingspage.ui
cppcodestylepreferences.cpp
cppcodestylepreferences.h
cppcodestylepreferencesfactory.cpp
cppcodestylepreferencesfactory.h
cppcodestylesettings.cpp
cppcodestylesettings.h
cppcodestylesettingspage.cpp
cppcodestylesettingspage.h
cppcodestylesettingspage.ui
cppcompletion_test.cpp
cppcompletionassist.cpp
cppcompletionassist.h
cppcompletionassistprovider.cpp
cppcompletionassistprovider.h
cppcurrentdocumentfilter.cpp
cppcurrentdocumentfilter.h
cppdoxygen.cpp
cppdoxygen.h
cppfilesettingspage.cpp
cppfilesettingspage.h
cppfilesettingspage.ui
cppfindreferences.cpp
cppfindreferences.h
cppfunctionsfilter.cpp
cppfunctionsfilter.h
cppheadersource_test.cpp
cpphighlightingsupport.cpp
cpphighlightingsupport.h
cpphighlightingsupportinternal.cpp
cpphighlightingsupportinternal.h
cppindexingsupport.cpp
cppindexingsupport.h
cpplocalsymbols.cpp
cpplocalsymbols.h
cpplocatordata.cpp
cpplocatordata.h
cpplocatorfilter.cpp
cpplocatorfilter.h
cpplocatorfilter_test.cpp
cppmodelmanager.cpp
cppmodelmanager.h
cppmodelmanager_test.cpp
cppmodelmanagerinterface.cpp
cppmodelmanagerinterface.h
cppmodelmanagersupport.cpp
cppmodelmanagersupport.h
cppmodelmanagersupportinternal.cpp
cppmodelmanagersupportinternal.h
cpppointerdeclarationformatter.cpp
cpppointerdeclarationformatter.h
cpppointerdeclarationformatter_test.cpp
cpppreprocessertesthelper.cpp
cpppreprocessertesthelper.h
cpppreprocessor.cpp
cpppreprocessor.h
cpppreprocessor_test.cpp
cppprojectfile.cpp
cppprojectfile.h
cppqtstyleindenter.cpp
cppqtstyleindenter.h
cpprefactoringchanges.cpp
cpprefactoringchanges.h
cppsemanticinfo.cpp
cppsemanticinfo.h
cppsnapshotupdater.cpp
cppsnapshotupdater.h
cpptools.pro
cpptools.qbs
cpptools_dependencies.pri
cpptools_global.h
cpptoolsconstants.h
cpptoolseditorsupport.cpp
cpptoolseditorsupport.h
cpptoolsplugin.cpp
cpptoolsplugin.h
cpptoolsreuse.cpp
cpptoolsreuse.h
cpptoolssettings.cpp