aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/api/testdata/add-qobject-macro-to-cpp-file/main.cpp (renamed from tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/main.cpp)0
-rw-r--r--tests/auto/api/testdata/add-qobject-macro-to-cpp-file/object.cpp (renamed from tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/object.cpp)0
-rw-r--r--tests/auto/api/testdata/add-qobject-macro-to-cpp-file/object.h (renamed from tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/object.h)0
-rw-r--r--tests/auto/api/testdata/add-qobject-macro-to-cpp-file/project.qbs (renamed from tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/project.qbs)0
-rw-r--r--tests/auto/api/testdata/added-file-persistent/file.cpp (renamed from tests/auto/blackbox/testdata/added-file-persistent/file.cpp)0
-rw-r--r--tests/auto/api/testdata/added-file-persistent/main.cpp (renamed from tests/auto/blackbox/testdata/added-file-persistent/main.cpp)0
-rw-r--r--tests/auto/api/testdata/added-file-persistent/project.qbs (renamed from tests/auto/blackbox/testdata/added-file-persistent/project.qbs)0
-rw-r--r--tests/auto/api/testdata/app-without-sources/a.c (renamed from tests/auto/blackbox/testdata/appWithoutSources/a.c)0
-rw-r--r--tests/auto/api/testdata/app-without-sources/b.c (renamed from tests/auto/blackbox/testdata/appWithoutSources/b.c)0
-rw-r--r--tests/auto/api/testdata/app-without-sources/project.qbs (renamed from tests/auto/blackbox/testdata/appWithoutSources/project.qbs)0
-rw-r--r--tests/auto/api/testdata/base-properties/imports/Bar.qbs (renamed from tests/auto/blackbox/testdata/baseProperties/imports/Bar.qbs)0
-rw-r--r--tests/auto/api/testdata/base-properties/imports/Foo.qbs (renamed from tests/auto/blackbox/testdata/baseProperties/imports/Foo.qbs)0
-rw-r--r--tests/auto/api/testdata/base-properties/main.cpp (renamed from tests/auto/blackbox/testdata/baseProperties/main.cpp)0
-rw-r--r--tests/auto/api/testdata/base-properties/prj.qbs (renamed from tests/auto/blackbox/testdata/baseProperties/prj.qbs)0
-rw-r--r--tests/auto/api/testdata/build-properties-source/main.cpp (renamed from tests/auto/blackbox/testdata/buildproperties_source/main.cpp)0
-rw-r--r--tests/auto/api/testdata/build-properties-source/project.qbs (renamed from tests/auto/blackbox/testdata/buildproperties_source/bp_source.qbs)0
-rw-r--r--tests/auto/api/testdata/change-dependent-lib/change-dependent-lib.qbs (renamed from tests/auto/blackbox/testdata/change-dependent-lib/change-dependent-lib.qbs)0
-rw-r--r--tests/auto/api/testdata/change-dependent-lib/main.cpp (renamed from tests/auto/blackbox/testdata/change-dependent-lib/main.cpp)0
-rw-r--r--tests/auto/api/testdata/change-dependent-lib/mylib.cpp (renamed from tests/auto/blackbox/testdata/change-dependent-lib/mylib.cpp)0
-rw-r--r--tests/auto/api/testdata/codegen/foo.txt (renamed from tests/auto/blackbox/testdata/codegen/foo.txt)0
-rw-r--r--tests/auto/api/testdata/codegen/project.qbs (renamed from tests/auto/blackbox/testdata/codegen/codegen.qbs)0
-rw-r--r--tests/auto/api/testdata/disable-product/project.qbs (renamed from tests/auto/blackbox/testdata/disable-product/project.qbs)0
-rw-r--r--tests/auto/api/testdata/disabled-product/disabledProduct.qbs (renamed from tests/auto/blackbox/testdata/disabledProduct/disabledProduct.qbs)0
-rw-r--r--tests/auto/api/testdata/disabled-product/main.cpp (renamed from tests/auto/blackbox/testdata/disabledProduct/main.cpp)0
-rw-r--r--tests/auto/api/testdata/disabled-project/disabled_project.qbs (renamed from tests/auto/blackbox/testdata/disabledProject/disabled_project.qbs)0
-rw-r--r--tests/auto/api/testdata/duplicate-product-names/explicit.qbs (renamed from tests/auto/blackbox/testdata/duplicateProductNames/explicit.qbs)0
-rw-r--r--tests/auto/api/testdata/duplicate-product-names/implicit-indirect.qbs (renamed from tests/auto/blackbox/testdata/duplicateProductNames/implicit-indirect.qbs)0
-rw-r--r--tests/auto/api/testdata/duplicate-product-names/implicit.qbs (renamed from tests/auto/blackbox/testdata/duplicateProductNames/implicit.qbs)0
-rw-r--r--tests/auto/api/testdata/duplicate-product-names/subdir1/subproject.qbs (renamed from tests/auto/blackbox/testdata/duplicateProductNames/subdir1/subproject.qbs)0
-rw-r--r--tests/auto/api/testdata/duplicate-product-names/subdir2/subproject.qbs (renamed from tests/auto/blackbox/testdata/duplicateProductNames/subdir2/subproject.qbs)0
-rw-r--r--tests/auto/api/testdata/dynamic-libs/lib1.cpp (renamed from tests/auto/blackbox/testdata/dynamicLibs/lib1.cpp)0
-rw-r--r--tests/auto/api/testdata/dynamic-libs/lib2.cpp (renamed from tests/auto/blackbox/testdata/dynamicLibs/lib2.cpp)0
-rw-r--r--tests/auto/api/testdata/dynamic-libs/lib3.cpp (renamed from tests/auto/blackbox/testdata/dynamicLibs/lib3.cpp)0
-rw-r--r--tests/auto/api/testdata/dynamic-libs/lib4.cpp (renamed from tests/auto/blackbox/testdata/dynamicLibs/lib4.cpp)0
-rw-r--r--tests/auto/api/testdata/dynamic-libs/lib4.h (renamed from tests/auto/blackbox/testdata/dynamicLibs/lib4.h)0
-rw-r--r--tests/auto/api/testdata/dynamic-libs/link_dynamiclib.qbs (renamed from tests/auto/blackbox/testdata/dynamicLibs/link_dynamiclib.qbs)0
-rw-r--r--tests/auto/api/testdata/dynamic-libs/main.cpp (renamed from tests/auto/blackbox/testdata/dynamicLibs/main.cpp)0
-rw-r--r--tests/auto/api/testdata/empty-filetag-list/dontcompilethis.cpp (renamed from tests/auto/blackbox/testdata/empty-filetag-list/dontcompilethis.cpp)0
-rw-r--r--tests/auto/api/testdata/empty-filetag-list/project.qbs (renamed from tests/auto/blackbox/testdata/empty-filetag-list/project.qbs)0
-rw-r--r--tests/auto/api/testdata/empty-submodules-list/project.qbs (renamed from tests/auto/blackbox/testdata/empty-submodules-list/project.qbs)0
-rw-r--r--tests/auto/api/testdata/explicitly-depends-on/dependency.txt (renamed from tests/auto/blackbox/testdata/explicitlyDependsOn/dependency.txt)0
-rw-r--r--tests/auto/api/testdata/explicitly-depends-on/project.qbs (renamed from tests/auto/blackbox/testdata/explicitlyDependsOn/project.qbs)0
-rw-r--r--tests/auto/api/testdata/export-simple/lib1.cpp (renamed from tests/auto/blackbox/testdata/exportSimple/lib1.cpp)0
-rw-r--r--tests/auto/api/testdata/export-simple/main.cpp (renamed from tests/auto/blackbox/testdata/exportSimple/main.cpp)0
-rw-r--r--tests/auto/api/testdata/export-simple/project.qbs (renamed from tests/auto/blackbox/testdata/exportSimple/project.qbs)0
-rw-r--r--tests/auto/api/testdata/export-with-recursive-depends/main1.cpp (renamed from tests/auto/blackbox/testdata/exportWithRecursiveDepends/main1.cpp)0
-rw-r--r--tests/auto/api/testdata/export-with-recursive-depends/main2.cpp (renamed from tests/auto/blackbox/testdata/exportWithRecursiveDepends/main2.cpp)0
-rw-r--r--tests/auto/api/testdata/export-with-recursive-depends/project.qbs (renamed from tests/auto/blackbox/testdata/exportWithRecursiveDepends/project.qbs)0
-rw-r--r--tests/auto/api/testdata/export-with-recursive-depends/qbs/modules/module1/module1.qbs (renamed from tests/auto/blackbox/testdata/exportWithRecursiveDepends/qbs/modules/module1/module1.qbs)0
-rw-r--r--tests/auto/api/testdata/export-with-recursive-depends/qbs/modules/module2/module2.qbs (renamed from tests/auto/blackbox/testdata/exportWithRecursiveDepends/qbs/modules/module2/module2.qbs)0
-rw-r--r--tests/auto/api/testdata/file-tagger/bla.txt (renamed from tests/auto/blackbox/testdata/fileTagger/bla.txt)0
-rw-r--r--tests/auto/api/testdata/file-tagger/moc_cpp.qbs (renamed from tests/auto/blackbox/testdata/fileTagger/moc_cpp.qbs)0
-rw-r--r--tests/auto/api/testdata/inherit-qbs-search-paths/imports/Foo.qbs (renamed from tests/auto/blackbox/testdata/inheritQbsSearchPaths/imports/Foo.qbs)0
-rw-r--r--tests/auto/api/testdata/inherit-qbs-search-paths/main.cpp (renamed from tests/auto/blackbox/testdata/inheritQbsSearchPaths/main.cpp)0
-rw-r--r--tests/auto/api/testdata/inherit-qbs-search-paths/prj.qbs (renamed from tests/auto/blackbox/testdata/inheritQbsSearchPaths/prj.qbs)0
-rw-r--r--tests/auto/api/testdata/inherit-qbs-search-paths/subdir/modules/bli/m.qbs (renamed from tests/auto/blackbox/testdata/inheritQbsSearchPaths/subdir/modules/bli/m.qbs)0
-rw-r--r--tests/auto/api/testdata/lib-same-source/main.cpp (renamed from tests/auto/blackbox/testdata/lib_samesource/main.cpp)0
-rw-r--r--tests/auto/api/testdata/lib-same-source/project.qbs (renamed from tests/auto/blackbox/testdata/lib_samesource/lib.qbs)0
-rw-r--r--tests/auto/api/testdata/link-static-lib/helper1/helper1.cpp (renamed from tests/auto/blackbox/testdata/link_staticlib/helper1/helper1.cpp)0
-rw-r--r--tests/auto/api/testdata/link-static-lib/helper1/helper1.h (renamed from tests/auto/blackbox/testdata/link_staticlib/helper1/helper1.h)0
-rw-r--r--tests/auto/api/testdata/link-static-lib/helper2/helper2.cpp (renamed from tests/auto/blackbox/testdata/link_staticlib/helper2/helper2.cpp)0
-rw-r--r--tests/auto/api/testdata/link-static-lib/helper2/helper2.h (renamed from tests/auto/blackbox/testdata/link_staticlib/helper2/helper2.h)0
-rw-r--r--tests/auto/api/testdata/link-static-lib/main.cpp (renamed from tests/auto/blackbox/testdata/link_staticlib/main.cpp)0
-rw-r--r--tests/auto/api/testdata/link-static-lib/mystaticlib.cpp (renamed from tests/auto/blackbox/testdata/link_staticlib/mystaticlib.cpp)0
-rw-r--r--tests/auto/api/testdata/link-static-lib/mystaticlibhelper.cpp (renamed from tests/auto/blackbox/testdata/link_staticlib/mystaticlibhelper.cpp)0
-rw-r--r--tests/auto/api/testdata/link-static-lib/project.qbs (renamed from tests/auto/blackbox/testdata/link_staticlib/link_staticlib.qbs)0
-rw-r--r--tests/auto/api/testdata/lots-of-dots/dotty.matrix.ui (renamed from tests/auto/blackbox/testdata/lotsofdots/dotty.matrix.ui)0
-rw-r--r--tests/auto/api/testdata/lots-of-dots/m.a.i.n.cpp (renamed from tests/auto/blackbox/testdata/lotsofdots/m.a.i.n.cpp)0
-rw-r--r--tests/auto/api/testdata/lots-of-dots/object.narf.cpp (renamed from tests/auto/blackbox/testdata/lotsofdots/object.narf.cpp)0
-rw-r--r--tests/auto/api/testdata/lots-of-dots/object.narf.h (renamed from tests/auto/blackbox/testdata/lotsofdots/object.narf.h)0
-rw-r--r--tests/auto/api/testdata/lots-of-dots/polka.dots.qrc (renamed from tests/auto/blackbox/testdata/lotsofdots/polka.dots.qrc)0
-rw-r--r--tests/auto/api/testdata/lots-of-dots/project.qbs (renamed from tests/auto/blackbox/testdata/lotsofdots/lots.of.dots.qbs)0
-rw-r--r--tests/auto/api/testdata/missing-qobject-header/main.cpp (renamed from tests/auto/blackbox/testdata/missingqobjectheader/main.cpp)0
-rw-r--r--tests/auto/api/testdata/missing-qobject-header/myobject.cpp (renamed from tests/auto/blackbox/testdata/missingqobjectheader/myobject.cpp)0
-rw-r--r--tests/auto/api/testdata/missing-qobject-header/myobject.h (renamed from tests/auto/blackbox/testdata/missingqobjectheader/myobject.h)0
-rw-r--r--tests/auto/api/testdata/moc-cpp/bla.cpp (renamed from tests/auto/blackbox/testdata/moc_cpp/bla.cpp)0
-rw-r--r--tests/auto/api/testdata/moc-cpp/project.qbs (renamed from tests/auto/blackbox/testdata/moc_cpp/moc_cpp.qbs)0
-rw-r--r--tests/auto/api/testdata/moc-hpp-included/object.cpp (renamed from tests/auto/blackbox/testdata/moc_hpp_included/object.cpp)0
-rw-r--r--tests/auto/api/testdata/moc-hpp-included/object.h (renamed from tests/auto/blackbox/testdata/moc_hpp/object.h)0
-rw-r--r--tests/auto/api/testdata/moc-hpp-included/project.qbs (renamed from tests/auto/blackbox/testdata/moc_hpp_included/moc_hpp_included.qbs)0
-rw-r--r--tests/auto/api/testdata/moc-hpp/object.cpp (renamed from tests/auto/blackbox/testdata/moc_hpp/object.cpp)0
-rw-r--r--tests/auto/api/testdata/moc-hpp/object.h (renamed from tests/auto/blackbox/testdata/moc_hpp_included/object.h)0
-rw-r--r--tests/auto/api/testdata/moc-hpp/project.qbs (renamed from tests/auto/blackbox/testdata/moc_hpp/moc_hpp.qbs)0
-rw-r--r--tests/auto/api/testdata/new-output-artifact-in-dependency/lib.cpp (renamed from tests/auto/blackbox/testdata/new-output-artifact-in-dependency/lib.cpp)0
-rw-r--r--tests/auto/api/testdata/new-output-artifact-in-dependency/main.cpp (renamed from tests/auto/blackbox/testdata/new-output-artifact-in-dependency/main.cpp)0
-rw-r--r--tests/auto/api/testdata/new-output-artifact-in-dependency/project.qbs (renamed from tests/auto/blackbox/testdata/new-output-artifact-in-dependency/project.qbs)0
-rw-r--r--tests/auto/api/testdata/new-pattern-match/project.qbs (renamed from tests/auto/blackbox/testdata/new-pattern-match/project.qbs)0
-rw-r--r--tests/auto/api/testdata/objc/main.mm (renamed from tests/auto/blackbox/testdata/objc/main.mm)0
-rw-r--r--tests/auto/api/testdata/objc/objc.qbs (renamed from tests/auto/blackbox/testdata/objc/objc.qbs)0
-rw-r--r--tests/auto/api/testdata/precompiled-header/main.cpp (renamed from tests/auto/blackbox/testdata/precompiledHeader/main.cpp)0
-rw-r--r--tests/auto/api/testdata/precompiled-header/myobject.cpp (renamed from tests/auto/blackbox/testdata/precompiledHeader/myobject.cpp)0
-rw-r--r--tests/auto/api/testdata/precompiled-header/myobject.h (renamed from tests/auto/blackbox/testdata/precompiledHeader/myobject.h)0
-rw-r--r--tests/auto/api/testdata/precompiled-header/project.qbs (renamed from tests/auto/blackbox/testdata/precompiledHeader/precompiledHeader.qbs)0
-rw-r--r--tests/auto/api/testdata/precompiled-header/stable.h (renamed from tests/auto/blackbox/testdata/precompiledHeader/stable.h)0
-rw-r--r--tests/auto/api/testdata/project-with-properties-item/project.qbs (renamed from tests/auto/blackbox/testdata/project-with-properties-item/project.qbs)0
-rw-r--r--tests/auto/api/testdata/properties-blocks/main.cpp (renamed from tests/auto/blackbox/testdata/propertiesBlocks/main.cpp)0
-rw-r--r--tests/auto/api/testdata/properties-blocks/propertiesblocks.qbs (renamed from tests/auto/blackbox/testdata/propertiesBlocks/propertiesblocks.qbs)0
-rw-r--r--tests/auto/api/testdata/qt5-plugin/echointerface.h (renamed from tests/auto/blackbox/testdata/qt5plugin/echointerface.h)0
-rw-r--r--tests/auto/api/testdata/qt5-plugin/echoplugin.cpp (renamed from tests/auto/blackbox/testdata/qt5plugin/echoplugin.cpp)0
-rw-r--r--tests/auto/api/testdata/qt5-plugin/echoplugin.h (renamed from tests/auto/blackbox/testdata/qt5plugin/echoplugin.h)0
-rw-r--r--tests/auto/api/testdata/qt5-plugin/echoplugin.json.source (renamed from tests/auto/blackbox/testdata/qt5plugin/echoplugin.json.source)0
-rw-r--r--tests/auto/api/testdata/qt5-plugin/echoplugin_dummy.cpp (renamed from tests/auto/blackbox/testdata/qt5plugin/echoplugin_dummy.cpp)0
-rw-r--r--tests/auto/api/testdata/qt5-plugin/project.qbs (renamed from tests/auto/blackbox/testdata/qt5plugin/plugin.qbs)0
-rw-r--r--tests/auto/api/testdata/rc/main.cpp (renamed from tests/auto/blackbox/testdata/rc/main.cpp)0
-rw-r--r--tests/auto/api/testdata/rc/rc.qbs (renamed from tests/auto/blackbox/testdata/rc/rc.qbs)0
-rw-r--r--tests/auto/api/testdata/rc/test.rc (renamed from tests/auto/blackbox/testdata/rc/test.rc)0
-rw-r--r--tests/auto/api/testdata/remove-file-dependency/main.cpp (renamed from tests/auto/blackbox/testdata/removeFileDependency/main.cpp)0
-rw-r--r--tests/auto/api/testdata/remove-file-dependency/removeFileDependency.qbs (renamed from tests/auto/blackbox/testdata/removeFileDependency/removeFileDependency.qbs)0
-rw-r--r--tests/auto/api/testdata/remove-file-dependency/someheader.h (renamed from tests/auto/blackbox/testdata/removeFileDependency/someheader.h)0
-rw-r--r--tests/auto/api/testdata/rename-product/lib.cpp (renamed from tests/auto/blackbox/testdata/renameProduct/lib.cpp)0
-rw-r--r--tests/auto/api/testdata/rename-product/main.cpp (renamed from tests/auto/blackbox/testdata/renameProduct/main.cpp)0
-rw-r--r--tests/auto/api/testdata/rename-product/rename.qbs (renamed from tests/auto/blackbox/testdata/renameProduct/rename.qbs)0
-rw-r--r--tests/auto/api/testdata/rename-target-artifact/lib.cpp (renamed from tests/auto/blackbox/testdata/renameTargetArtifact/lib.cpp)0
-rw-r--r--tests/auto/api/testdata/rename-target-artifact/main.cpp (renamed from tests/auto/blackbox/testdata/renameTargetArtifact/main.cpp)0
-rw-r--r--tests/auto/api/testdata/rename-target-artifact/rename.qbs (renamed from tests/auto/blackbox/testdata/renameTargetArtifact/rename.qbs)0
-rw-r--r--tests/auto/api/testdata/same-base-name/lib.c (renamed from tests/auto/blackbox/testdata/sameBaseName/lib.c)0
-rw-r--r--tests/auto/api/testdata/same-base-name/lib.cpp (renamed from tests/auto/blackbox/testdata/sameBaseName/lib.cpp)0
-rw-r--r--tests/auto/api/testdata/same-base-name/lib.m (renamed from tests/auto/blackbox/testdata/sameBaseName/lib.m)0
-rw-r--r--tests/auto/api/testdata/same-base-name/lib.mm (renamed from tests/auto/blackbox/testdata/sameBaseName/lib.mm)0
-rw-r--r--tests/auto/api/testdata/same-base-name/main.c (renamed from tests/auto/blackbox/testdata/sameBaseName/main.c)0
-rw-r--r--tests/auto/api/testdata/same-base-name/project.qbs (renamed from tests/auto/blackbox/testdata/sameBaseName/sameBaseName.qbs)0
-rw-r--r--tests/auto/api/testdata/simple-probe/main.cpp (renamed from tests/auto/blackbox/testdata/simpleProbe/main.cpp)0
-rw-r--r--tests/auto/api/testdata/simple-probe/project.qbs (renamed from tests/auto/blackbox/testdata/simpleProbe/simpleProbe.qbs)0
-rw-r--r--tests/auto/api/testdata/soft-dependency/main.cpp (renamed from tests/auto/blackbox/testdata/soft-dependency/main.cpp)0
-rw-r--r--tests/auto/api/testdata/soft-dependency/project.qbs (renamed from tests/auto/blackbox/testdata/soft-dependency/project.qbs)0
-rw-r--r--tests/auto/api/testdata/static-lib-deps/a1.cpp (renamed from tests/auto/blackbox/testdata/staticLibDeps/a1.cpp)0
-rw-r--r--tests/auto/api/testdata/static-lib-deps/a2.cpp (renamed from tests/auto/blackbox/testdata/staticLibDeps/a2.cpp)0
-rw-r--r--tests/auto/api/testdata/static-lib-deps/b.cpp (renamed from tests/auto/blackbox/testdata/staticLibDeps/b.cpp)0
-rw-r--r--tests/auto/api/testdata/static-lib-deps/c.cpp (renamed from tests/auto/blackbox/testdata/staticLibDeps/c.cpp)0
-rw-r--r--tests/auto/api/testdata/static-lib-deps/d.cpp (renamed from tests/auto/blackbox/testdata/staticLibDeps/d.cpp)0
-rw-r--r--tests/auto/api/testdata/static-lib-deps/e.cpp (renamed from tests/auto/blackbox/testdata/staticLibDeps/e.cpp)0
-rw-r--r--tests/auto/api/testdata/static-lib-deps/main.cpp (renamed from tests/auto/blackbox/testdata/staticLibDeps/main.cpp)0
-rw-r--r--tests/auto/api/testdata/static-lib-deps/project.qbs (renamed from tests/auto/blackbox/testdata/staticLibDeps/dep.qbs)0
-rw-r--r--tests/auto/api/testdata/transformers/main.cpp (renamed from tests/auto/blackbox/testdata/transformers/main.cpp)0
-rw-r--r--tests/auto/api/testdata/transformers/transformers.qbs (renamed from tests/auto/blackbox/testdata/transformers/transformers.qbs)0
-rw-r--r--tests/auto/api/testdata/type-change/main.cpp (renamed from tests/auto/blackbox/testdata/type-change/main.cpp)0
-rw-r--r--tests/auto/api/testdata/type-change/project.qbs (renamed from tests/auto/blackbox/testdata/type-change/project.qbs)0
-rw-r--r--tests/auto/api/testdata/uic/bla.cpp (renamed from tests/auto/blackbox/testdata/uic/bla.cpp)0
-rw-r--r--tests/auto/api/testdata/uic/bla.h (renamed from tests/auto/blackbox/testdata/uic/bla.h)0
-rw-r--r--tests/auto/api/testdata/uic/ui.h (renamed from tests/auto/blackbox/testdata/uic/ui.h)0
-rw-r--r--tests/auto/api/testdata/uic/ui.ui (renamed from tests/auto/blackbox/testdata/uic/ui.ui)0
-rw-r--r--tests/auto/api/testdata/uic/uic.qbs (renamed from tests/auto/blackbox/testdata/uic/uic.qbs)0
-rw-r--r--tests/auto/api/tst_api.cpp815
-rw-r--r--tests/auto/api/tst_api.h54
-rw-r--r--tests/auto/blackbox/testdata/subprojects/resources/imports/LibraryType/type.js1
-rw-r--r--tests/auto/blackbox/testdata/subprojects/resources/modules/QtCoreDepender/qtcoredepender.qbs5
-rw-r--r--tests/auto/blackbox/testdata/subprojects/subproject1/main.cpp6
-rw-r--r--tests/auto/blackbox/testdata/subprojects/subproject2/subproject2.qbs15
-rw-r--r--tests/auto/blackbox/testdata/subprojects/subproject2/subproject3/subproject3.qbs16
-rw-r--r--tests/auto/blackbox/testdata/subprojects/subproject2/subproject3/testlib.cpp3
-rw-r--r--tests/auto/blackbox/testdata/subprojects/toplevelproject.qbs19
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp764
-rw-r--r--tests/auto/blackbox/tst_blackbox.h49
-rw-r--r--tests/auto/shared.h30
154 files changed, 924 insertions, 853 deletions
diff --git a/tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/main.cpp b/tests/auto/api/testdata/add-qobject-macro-to-cpp-file/main.cpp
index 940a7628d..940a7628d 100644
--- a/tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/main.cpp
+++ b/tests/auto/api/testdata/add-qobject-macro-to-cpp-file/main.cpp
diff --git a/tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/object.cpp b/tests/auto/api/testdata/add-qobject-macro-to-cpp-file/object.cpp
index aab24f6c0..aab24f6c0 100644
--- a/tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/object.cpp
+++ b/tests/auto/api/testdata/add-qobject-macro-to-cpp-file/object.cpp
diff --git a/tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/object.h b/tests/auto/api/testdata/add-qobject-macro-to-cpp-file/object.h
index 37070b494..37070b494 100644
--- a/tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/object.h
+++ b/tests/auto/api/testdata/add-qobject-macro-to-cpp-file/object.h
diff --git a/tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/project.qbs b/tests/auto/api/testdata/add-qobject-macro-to-cpp-file/project.qbs
index 40c5395ef..40c5395ef 100644
--- a/tests/auto/blackbox/testdata/add-qobject-macro-to-cpp-file/project.qbs
+++ b/tests/auto/api/testdata/add-qobject-macro-to-cpp-file/project.qbs
diff --git a/tests/auto/blackbox/testdata/added-file-persistent/file.cpp b/tests/auto/api/testdata/added-file-persistent/file.cpp
index 8101b05dc..8101b05dc 100644
--- a/tests/auto/blackbox/testdata/added-file-persistent/file.cpp
+++ b/tests/auto/api/testdata/added-file-persistent/file.cpp
diff --git a/tests/auto/blackbox/testdata/added-file-persistent/main.cpp b/tests/auto/api/testdata/added-file-persistent/main.cpp
index 1921f1feb..1921f1feb 100644
--- a/tests/auto/blackbox/testdata/added-file-persistent/main.cpp
+++ b/tests/auto/api/testdata/added-file-persistent/main.cpp
diff --git a/tests/auto/blackbox/testdata/added-file-persistent/project.qbs b/tests/auto/api/testdata/added-file-persistent/project.qbs
index 672886646..672886646 100644
--- a/tests/auto/blackbox/testdata/added-file-persistent/project.qbs
+++ b/tests/auto/api/testdata/added-file-persistent/project.qbs
diff --git a/tests/auto/blackbox/testdata/appWithoutSources/a.c b/tests/auto/api/testdata/app-without-sources/a.c
index bf7759e11..bf7759e11 100644
--- a/tests/auto/blackbox/testdata/appWithoutSources/a.c
+++ b/tests/auto/api/testdata/app-without-sources/a.c
diff --git a/tests/auto/blackbox/testdata/appWithoutSources/b.c b/tests/auto/api/testdata/app-without-sources/b.c
index e3841fa32..e3841fa32 100644
--- a/tests/auto/blackbox/testdata/appWithoutSources/b.c
+++ b/tests/auto/api/testdata/app-without-sources/b.c
diff --git a/tests/auto/blackbox/testdata/appWithoutSources/project.qbs b/tests/auto/api/testdata/app-without-sources/project.qbs
index dca195e29..dca195e29 100644
--- a/tests/auto/blackbox/testdata/appWithoutSources/project.qbs
+++ b/tests/auto/api/testdata/app-without-sources/project.qbs
diff --git a/tests/auto/blackbox/testdata/baseProperties/imports/Bar.qbs b/tests/auto/api/testdata/base-properties/imports/Bar.qbs
index 07ab724e4..07ab724e4 100644
--- a/tests/auto/blackbox/testdata/baseProperties/imports/Bar.qbs
+++ b/tests/auto/api/testdata/base-properties/imports/Bar.qbs
diff --git a/tests/auto/blackbox/testdata/baseProperties/imports/Foo.qbs b/tests/auto/api/testdata/base-properties/imports/Foo.qbs
index 563992434..563992434 100644
--- a/tests/auto/blackbox/testdata/baseProperties/imports/Foo.qbs
+++ b/tests/auto/api/testdata/base-properties/imports/Foo.qbs
diff --git a/tests/auto/blackbox/testdata/baseProperties/main.cpp b/tests/auto/api/testdata/base-properties/main.cpp
index 069cf9cb3..069cf9cb3 100644
--- a/tests/auto/blackbox/testdata/baseProperties/main.cpp
+++ b/tests/auto/api/testdata/base-properties/main.cpp
diff --git a/tests/auto/blackbox/testdata/baseProperties/prj.qbs b/tests/auto/api/testdata/base-properties/prj.qbs
index a43b930dc..a43b930dc 100644
--- a/tests/auto/blackbox/testdata/baseProperties/prj.qbs
+++ b/tests/auto/api/testdata/base-properties/prj.qbs
diff --git a/tests/auto/blackbox/testdata/buildproperties_source/main.cpp b/tests/auto/api/testdata/build-properties-source/main.cpp
index a5992a691..a5992a691 100644
--- a/tests/auto/blackbox/testdata/buildproperties_source/main.cpp
+++ b/tests/auto/api/testdata/build-properties-source/main.cpp
diff --git a/tests/auto/blackbox/testdata/buildproperties_source/bp_source.qbs b/tests/auto/api/testdata/build-properties-source/project.qbs
index df7649625..df7649625 100644
--- a/tests/auto/blackbox/testdata/buildproperties_source/bp_source.qbs
+++ b/tests/auto/api/testdata/build-properties-source/project.qbs
diff --git a/tests/auto/blackbox/testdata/change-dependent-lib/change-dependent-lib.qbs b/tests/auto/api/testdata/change-dependent-lib/change-dependent-lib.qbs
index ac5778134..ac5778134 100644
--- a/tests/auto/blackbox/testdata/change-dependent-lib/change-dependent-lib.qbs
+++ b/tests/auto/api/testdata/change-dependent-lib/change-dependent-lib.qbs
diff --git a/tests/auto/blackbox/testdata/change-dependent-lib/main.cpp b/tests/auto/api/testdata/change-dependent-lib/main.cpp
index d5ade08e2..d5ade08e2 100644
--- a/tests/auto/blackbox/testdata/change-dependent-lib/main.cpp
+++ b/tests/auto/api/testdata/change-dependent-lib/main.cpp
diff --git a/tests/auto/blackbox/testdata/change-dependent-lib/mylib.cpp b/tests/auto/api/testdata/change-dependent-lib/mylib.cpp
index fc4a504d4..fc4a504d4 100644
--- a/tests/auto/blackbox/testdata/change-dependent-lib/mylib.cpp
+++ b/tests/auto/api/testdata/change-dependent-lib/mylib.cpp
diff --git a/tests/auto/blackbox/testdata/codegen/foo.txt b/tests/auto/api/testdata/codegen/foo.txt
index 557db03de..557db03de 100644
--- a/tests/auto/blackbox/testdata/codegen/foo.txt
+++ b/tests/auto/api/testdata/codegen/foo.txt
diff --git a/tests/auto/blackbox/testdata/codegen/codegen.qbs b/tests/auto/api/testdata/codegen/project.qbs
index 4b440fc51..4b440fc51 100644
--- a/tests/auto/blackbox/testdata/codegen/codegen.qbs
+++ b/tests/auto/api/testdata/codegen/project.qbs
diff --git a/tests/auto/blackbox/testdata/disable-product/project.qbs b/tests/auto/api/testdata/disable-product/project.qbs
index 3aa7afd50..3aa7afd50 100644
--- a/tests/auto/blackbox/testdata/disable-product/project.qbs
+++ b/tests/auto/api/testdata/disable-product/project.qbs
diff --git a/tests/auto/blackbox/testdata/disabledProduct/disabledProduct.qbs b/tests/auto/api/testdata/disabled-product/disabledProduct.qbs
index 0c44995c7..0c44995c7 100644
--- a/tests/auto/blackbox/testdata/disabledProduct/disabledProduct.qbs
+++ b/tests/auto/api/testdata/disabled-product/disabledProduct.qbs
diff --git a/tests/auto/blackbox/testdata/disabledProduct/main.cpp b/tests/auto/api/testdata/disabled-product/main.cpp
index 1f5a432df..1f5a432df 100644
--- a/tests/auto/blackbox/testdata/disabledProduct/main.cpp
+++ b/tests/auto/api/testdata/disabled-product/main.cpp
diff --git a/tests/auto/blackbox/testdata/disabledProject/disabled_project.qbs b/tests/auto/api/testdata/disabled-project/disabled_project.qbs
index 1461b70ad..1461b70ad 100644
--- a/tests/auto/blackbox/testdata/disabledProject/disabled_project.qbs
+++ b/tests/auto/api/testdata/disabled-project/disabled_project.qbs
diff --git a/tests/auto/blackbox/testdata/duplicateProductNames/explicit.qbs b/tests/auto/api/testdata/duplicate-product-names/explicit.qbs
index 0183b411c..0183b411c 100644
--- a/tests/auto/blackbox/testdata/duplicateProductNames/explicit.qbs
+++ b/tests/auto/api/testdata/duplicate-product-names/explicit.qbs
diff --git a/tests/auto/blackbox/testdata/duplicateProductNames/implicit-indirect.qbs b/tests/auto/api/testdata/duplicate-product-names/implicit-indirect.qbs
index 7164aa1c5..7164aa1c5 100644
--- a/tests/auto/blackbox/testdata/duplicateProductNames/implicit-indirect.qbs
+++ b/tests/auto/api/testdata/duplicate-product-names/implicit-indirect.qbs
diff --git a/tests/auto/blackbox/testdata/duplicateProductNames/implicit.qbs b/tests/auto/api/testdata/duplicate-product-names/implicit.qbs
index f39f80626..f39f80626 100644
--- a/tests/auto/blackbox/testdata/duplicateProductNames/implicit.qbs
+++ b/tests/auto/api/testdata/duplicate-product-names/implicit.qbs
diff --git a/tests/auto/blackbox/testdata/duplicateProductNames/subdir1/subproject.qbs b/tests/auto/api/testdata/duplicate-product-names/subdir1/subproject.qbs
index 6d16a3c53..6d16a3c53 100644
--- a/tests/auto/blackbox/testdata/duplicateProductNames/subdir1/subproject.qbs
+++ b/tests/auto/api/testdata/duplicate-product-names/subdir1/subproject.qbs
diff --git a/tests/auto/blackbox/testdata/duplicateProductNames/subdir2/subproject.qbs b/tests/auto/api/testdata/duplicate-product-names/subdir2/subproject.qbs
index 6d16a3c53..6d16a3c53 100644
--- a/tests/auto/blackbox/testdata/duplicateProductNames/subdir2/subproject.qbs
+++ b/tests/auto/api/testdata/duplicate-product-names/subdir2/subproject.qbs
diff --git a/tests/auto/blackbox/testdata/dynamicLibs/lib1.cpp b/tests/auto/api/testdata/dynamic-libs/lib1.cpp
index c47b0cfb1..c47b0cfb1 100644
--- a/tests/auto/blackbox/testdata/dynamicLibs/lib1.cpp
+++ b/tests/auto/api/testdata/dynamic-libs/lib1.cpp
diff --git a/tests/auto/blackbox/testdata/dynamicLibs/lib2.cpp b/tests/auto/api/testdata/dynamic-libs/lib2.cpp
index 3c8b6dc6c..3c8b6dc6c 100644
--- a/tests/auto/blackbox/testdata/dynamicLibs/lib2.cpp
+++ b/tests/auto/api/testdata/dynamic-libs/lib2.cpp
diff --git a/tests/auto/blackbox/testdata/dynamicLibs/lib3.cpp b/tests/auto/api/testdata/dynamic-libs/lib3.cpp
index f25d8e883..f25d8e883 100644
--- a/tests/auto/blackbox/testdata/dynamicLibs/lib3.cpp
+++ b/tests/auto/api/testdata/dynamic-libs/lib3.cpp
diff --git a/tests/auto/blackbox/testdata/dynamicLibs/lib4.cpp b/tests/auto/api/testdata/dynamic-libs/lib4.cpp
index c0ead4721..c0ead4721 100644
--- a/tests/auto/blackbox/testdata/dynamicLibs/lib4.cpp
+++ b/tests/auto/api/testdata/dynamic-libs/lib4.cpp
diff --git a/tests/auto/blackbox/testdata/dynamicLibs/lib4.h b/tests/auto/api/testdata/dynamic-libs/lib4.h
index 689e8d146..689e8d146 100644
--- a/tests/auto/blackbox/testdata/dynamicLibs/lib4.h
+++ b/tests/auto/api/testdata/dynamic-libs/lib4.h
diff --git a/tests/auto/blackbox/testdata/dynamicLibs/link_dynamiclib.qbs b/tests/auto/api/testdata/dynamic-libs/link_dynamiclib.qbs
index 53cebc4a9..53cebc4a9 100644
--- a/tests/auto/blackbox/testdata/dynamicLibs/link_dynamiclib.qbs
+++ b/tests/auto/api/testdata/dynamic-libs/link_dynamiclib.qbs
diff --git a/tests/auto/blackbox/testdata/dynamicLibs/main.cpp b/tests/auto/api/testdata/dynamic-libs/main.cpp
index ef6df12e3..ef6df12e3 100644
--- a/tests/auto/blackbox/testdata/dynamicLibs/main.cpp
+++ b/tests/auto/api/testdata/dynamic-libs/main.cpp
diff --git a/tests/auto/blackbox/testdata/empty-filetag-list/dontcompilethis.cpp b/tests/auto/api/testdata/empty-filetag-list/dontcompilethis.cpp
index bac3b631d..bac3b631d 100644
--- a/tests/auto/blackbox/testdata/empty-filetag-list/dontcompilethis.cpp
+++ b/tests/auto/api/testdata/empty-filetag-list/dontcompilethis.cpp
diff --git a/tests/auto/blackbox/testdata/empty-filetag-list/project.qbs b/tests/auto/api/testdata/empty-filetag-list/project.qbs
index 294616124..294616124 100644
--- a/tests/auto/blackbox/testdata/empty-filetag-list/project.qbs
+++ b/tests/auto/api/testdata/empty-filetag-list/project.qbs
diff --git a/tests/auto/blackbox/testdata/empty-submodules-list/project.qbs b/tests/auto/api/testdata/empty-submodules-list/project.qbs
index 88b5e3177..88b5e3177 100644
--- a/tests/auto/blackbox/testdata/empty-submodules-list/project.qbs
+++ b/tests/auto/api/testdata/empty-submodules-list/project.qbs
diff --git a/tests/auto/blackbox/testdata/explicitlyDependsOn/dependency.txt b/tests/auto/api/testdata/explicitly-depends-on/dependency.txt
index e69de29bb..e69de29bb 100644
--- a/tests/auto/blackbox/testdata/explicitlyDependsOn/dependency.txt
+++ b/tests/auto/api/testdata/explicitly-depends-on/dependency.txt
diff --git a/tests/auto/blackbox/testdata/explicitlyDependsOn/project.qbs b/tests/auto/api/testdata/explicitly-depends-on/project.qbs
index 3db802717..3db802717 100644
--- a/tests/auto/blackbox/testdata/explicitlyDependsOn/project.qbs
+++ b/tests/auto/api/testdata/explicitly-depends-on/project.qbs
diff --git a/tests/auto/blackbox/testdata/exportSimple/lib1.cpp b/tests/auto/api/testdata/export-simple/lib1.cpp
index c3102139d..c3102139d 100644
--- a/tests/auto/blackbox/testdata/exportSimple/lib1.cpp
+++ b/tests/auto/api/testdata/export-simple/lib1.cpp
diff --git a/tests/auto/blackbox/testdata/exportSimple/main.cpp b/tests/auto/api/testdata/export-simple/main.cpp
index 6557bf8f1..6557bf8f1 100644
--- a/tests/auto/blackbox/testdata/exportSimple/main.cpp
+++ b/tests/auto/api/testdata/export-simple/main.cpp
diff --git a/tests/auto/blackbox/testdata/exportSimple/project.qbs b/tests/auto/api/testdata/export-simple/project.qbs
index 96244671a..96244671a 100644
--- a/tests/auto/blackbox/testdata/exportSimple/project.qbs
+++ b/tests/auto/api/testdata/export-simple/project.qbs
diff --git a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/main1.cpp b/tests/auto/api/testdata/export-with-recursive-depends/main1.cpp
index 237c8ce18..237c8ce18 100644
--- a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/main1.cpp
+++ b/tests/auto/api/testdata/export-with-recursive-depends/main1.cpp
diff --git a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/main2.cpp b/tests/auto/api/testdata/export-with-recursive-depends/main2.cpp
index c7f2e65ab..c7f2e65ab 100644
--- a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/main2.cpp
+++ b/tests/auto/api/testdata/export-with-recursive-depends/main2.cpp
diff --git a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/project.qbs b/tests/auto/api/testdata/export-with-recursive-depends/project.qbs
index 045e65133..045e65133 100644
--- a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/project.qbs
+++ b/tests/auto/api/testdata/export-with-recursive-depends/project.qbs
diff --git a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/qbs/modules/module1/module1.qbs b/tests/auto/api/testdata/export-with-recursive-depends/qbs/modules/module1/module1.qbs
index c1c4ad358..c1c4ad358 100644
--- a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/qbs/modules/module1/module1.qbs
+++ b/tests/auto/api/testdata/export-with-recursive-depends/qbs/modules/module1/module1.qbs
diff --git a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/qbs/modules/module2/module2.qbs b/tests/auto/api/testdata/export-with-recursive-depends/qbs/modules/module2/module2.qbs
index 75a274631..75a274631 100644
--- a/tests/auto/blackbox/testdata/exportWithRecursiveDepends/qbs/modules/module2/module2.qbs
+++ b/tests/auto/api/testdata/export-with-recursive-depends/qbs/modules/module2/module2.qbs
diff --git a/tests/auto/blackbox/testdata/fileTagger/bla.txt b/tests/auto/api/testdata/file-tagger/bla.txt
index 26185684a..26185684a 100644
--- a/tests/auto/blackbox/testdata/fileTagger/bla.txt
+++ b/tests/auto/api/testdata/file-tagger/bla.txt
diff --git a/tests/auto/blackbox/testdata/fileTagger/moc_cpp.qbs b/tests/auto/api/testdata/file-tagger/moc_cpp.qbs
index ce7970f20..ce7970f20 100644
--- a/tests/auto/blackbox/testdata/fileTagger/moc_cpp.qbs
+++ b/tests/auto/api/testdata/file-tagger/moc_cpp.qbs
diff --git a/tests/auto/blackbox/testdata/inheritQbsSearchPaths/imports/Foo.qbs b/tests/auto/api/testdata/inherit-qbs-search-paths/imports/Foo.qbs
index f6c1733b5..f6c1733b5 100644
--- a/tests/auto/blackbox/testdata/inheritQbsSearchPaths/imports/Foo.qbs
+++ b/tests/auto/api/testdata/inherit-qbs-search-paths/imports/Foo.qbs
diff --git a/tests/auto/blackbox/testdata/inheritQbsSearchPaths/main.cpp b/tests/auto/api/testdata/inherit-qbs-search-paths/main.cpp
index 7382cd2dd..7382cd2dd 100644
--- a/tests/auto/blackbox/testdata/inheritQbsSearchPaths/main.cpp
+++ b/tests/auto/api/testdata/inherit-qbs-search-paths/main.cpp
diff --git a/tests/auto/blackbox/testdata/inheritQbsSearchPaths/prj.qbs b/tests/auto/api/testdata/inherit-qbs-search-paths/prj.qbs
index ba8284f4f..ba8284f4f 100644
--- a/tests/auto/blackbox/testdata/inheritQbsSearchPaths/prj.qbs
+++ b/tests/auto/api/testdata/inherit-qbs-search-paths/prj.qbs
diff --git a/tests/auto/blackbox/testdata/inheritQbsSearchPaths/subdir/modules/bli/m.qbs b/tests/auto/api/testdata/inherit-qbs-search-paths/subdir/modules/bli/m.qbs
index b4b93678a..b4b93678a 100644
--- a/tests/auto/blackbox/testdata/inheritQbsSearchPaths/subdir/modules/bli/m.qbs
+++ b/tests/auto/api/testdata/inherit-qbs-search-paths/subdir/modules/bli/m.qbs
diff --git a/tests/auto/blackbox/testdata/lib_samesource/main.cpp b/tests/auto/api/testdata/lib-same-source/main.cpp
index 32de334c8..32de334c8 100644
--- a/tests/auto/blackbox/testdata/lib_samesource/main.cpp
+++ b/tests/auto/api/testdata/lib-same-source/main.cpp
diff --git a/tests/auto/blackbox/testdata/lib_samesource/lib.qbs b/tests/auto/api/testdata/lib-same-source/project.qbs
index 063684b40..063684b40 100644
--- a/tests/auto/blackbox/testdata/lib_samesource/lib.qbs
+++ b/tests/auto/api/testdata/lib-same-source/project.qbs
diff --git a/tests/auto/blackbox/testdata/link_staticlib/helper1/helper1.cpp b/tests/auto/api/testdata/link-static-lib/helper1/helper1.cpp
index 4ae0068d7..4ae0068d7 100644
--- a/tests/auto/blackbox/testdata/link_staticlib/helper1/helper1.cpp
+++ b/tests/auto/api/testdata/link-static-lib/helper1/helper1.cpp
diff --git a/tests/auto/blackbox/testdata/link_staticlib/helper1/helper1.h b/tests/auto/api/testdata/link-static-lib/helper1/helper1.h
index 8ca6e5acf..8ca6e5acf 100644
--- a/tests/auto/blackbox/testdata/link_staticlib/helper1/helper1.h
+++ b/tests/auto/api/testdata/link-static-lib/helper1/helper1.h
diff --git a/tests/auto/blackbox/testdata/link_staticlib/helper2/helper2.cpp b/tests/auto/api/testdata/link-static-lib/helper2/helper2.cpp
index 7a70aef5d..7a70aef5d 100644
--- a/tests/auto/blackbox/testdata/link_staticlib/helper2/helper2.cpp
+++ b/tests/auto/api/testdata/link-static-lib/helper2/helper2.cpp
diff --git a/tests/auto/blackbox/testdata/link_staticlib/helper2/helper2.h b/tests/auto/api/testdata/link-static-lib/helper2/helper2.h
index 9306d8576..9306d8576 100644
--- a/tests/auto/blackbox/testdata/link_staticlib/helper2/helper2.h
+++ b/tests/auto/api/testdata/link-static-lib/helper2/helper2.h
diff --git a/tests/auto/blackbox/testdata/link_staticlib/main.cpp b/tests/auto/api/testdata/link-static-lib/main.cpp
index cc0453ad6..cc0453ad6 100644
--- a/tests/auto/blackbox/testdata/link_staticlib/main.cpp
+++ b/tests/auto/api/testdata/link-static-lib/main.cpp
diff --git a/tests/auto/blackbox/testdata/link_staticlib/mystaticlib.cpp b/tests/auto/api/testdata/link-static-lib/mystaticlib.cpp
index aa3138692..aa3138692 100644
--- a/tests/auto/blackbox/testdata/link_staticlib/mystaticlib.cpp
+++ b/tests/auto/api/testdata/link-static-lib/mystaticlib.cpp
diff --git a/tests/auto/blackbox/testdata/link_staticlib/mystaticlibhelper.cpp b/tests/auto/api/testdata/link-static-lib/mystaticlibhelper.cpp
index 76a6a38e9..76a6a38e9 100644
--- a/tests/auto/blackbox/testdata/link_staticlib/mystaticlibhelper.cpp
+++ b/tests/auto/api/testdata/link-static-lib/mystaticlibhelper.cpp
diff --git a/tests/auto/blackbox/testdata/link_staticlib/link_staticlib.qbs b/tests/auto/api/testdata/link-static-lib/project.qbs
index be12e01aa..be12e01aa 100644
--- a/tests/auto/blackbox/testdata/link_staticlib/link_staticlib.qbs
+++ b/tests/auto/api/testdata/link-static-lib/project.qbs
diff --git a/tests/auto/blackbox/testdata/lotsofdots/dotty.matrix.ui b/tests/auto/api/testdata/lots-of-dots/dotty.matrix.ui
index 4b7d6a45f..4b7d6a45f 100644
--- a/tests/auto/blackbox/testdata/lotsofdots/dotty.matrix.ui
+++ b/tests/auto/api/testdata/lots-of-dots/dotty.matrix.ui
diff --git a/tests/auto/blackbox/testdata/lotsofdots/m.a.i.n.cpp b/tests/auto/api/testdata/lots-of-dots/m.a.i.n.cpp
index 4975bc680..4975bc680 100644
--- a/tests/auto/blackbox/testdata/lotsofdots/m.a.i.n.cpp
+++ b/tests/auto/api/testdata/lots-of-dots/m.a.i.n.cpp
diff --git a/tests/auto/blackbox/testdata/lotsofdots/object.narf.cpp b/tests/auto/api/testdata/lots-of-dots/object.narf.cpp
index a8761e53b..a8761e53b 100644
--- a/tests/auto/blackbox/testdata/lotsofdots/object.narf.cpp
+++ b/tests/auto/api/testdata/lots-of-dots/object.narf.cpp
diff --git a/tests/auto/blackbox/testdata/lotsofdots/object.narf.h b/tests/auto/api/testdata/lots-of-dots/object.narf.h
index bb1868cc0..bb1868cc0 100644
--- a/tests/auto/blackbox/testdata/lotsofdots/object.narf.h
+++ b/tests/auto/api/testdata/lots-of-dots/object.narf.h
diff --git a/tests/auto/blackbox/testdata/lotsofdots/polka.dots.qrc b/tests/auto/api/testdata/lots-of-dots/polka.dots.qrc
index 815b11002..815b11002 100644
--- a/tests/auto/blackbox/testdata/lotsofdots/polka.dots.qrc
+++ b/tests/auto/api/testdata/lots-of-dots/polka.dots.qrc
diff --git a/tests/auto/blackbox/testdata/lotsofdots/lots.of.dots.qbs b/tests/auto/api/testdata/lots-of-dots/project.qbs
index 9654100fc..9654100fc 100644
--- a/tests/auto/blackbox/testdata/lotsofdots/lots.of.dots.qbs
+++ b/tests/auto/api/testdata/lots-of-dots/project.qbs
diff --git a/tests/auto/blackbox/testdata/missingqobjectheader/main.cpp b/tests/auto/api/testdata/missing-qobject-header/main.cpp
index 191b3b316..191b3b316 100644
--- a/tests/auto/blackbox/testdata/missingqobjectheader/main.cpp
+++ b/tests/auto/api/testdata/missing-qobject-header/main.cpp
diff --git a/tests/auto/blackbox/testdata/missingqobjectheader/myobject.cpp b/tests/auto/api/testdata/missing-qobject-header/myobject.cpp
index 249e198ad..249e198ad 100644
--- a/tests/auto/blackbox/testdata/missingqobjectheader/myobject.cpp
+++ b/tests/auto/api/testdata/missing-qobject-header/myobject.cpp
diff --git a/tests/auto/blackbox/testdata/missingqobjectheader/myobject.h b/tests/auto/api/testdata/missing-qobject-header/myobject.h
index 46353c30e..46353c30e 100644
--- a/tests/auto/blackbox/testdata/missingqobjectheader/myobject.h
+++ b/tests/auto/api/testdata/missing-qobject-header/myobject.h
diff --git a/tests/auto/blackbox/testdata/moc_cpp/bla.cpp b/tests/auto/api/testdata/moc-cpp/bla.cpp
index 26185684a..26185684a 100644
--- a/tests/auto/blackbox/testdata/moc_cpp/bla.cpp
+++ b/tests/auto/api/testdata/moc-cpp/bla.cpp
diff --git a/tests/auto/blackbox/testdata/moc_cpp/moc_cpp.qbs b/tests/auto/api/testdata/moc-cpp/project.qbs
index 311d7c490..311d7c490 100644
--- a/tests/auto/blackbox/testdata/moc_cpp/moc_cpp.qbs
+++ b/tests/auto/api/testdata/moc-cpp/project.qbs
diff --git a/tests/auto/blackbox/testdata/moc_hpp_included/object.cpp b/tests/auto/api/testdata/moc-hpp-included/object.cpp
index ef0b32417..ef0b32417 100644
--- a/tests/auto/blackbox/testdata/moc_hpp_included/object.cpp
+++ b/tests/auto/api/testdata/moc-hpp-included/object.cpp
diff --git a/tests/auto/blackbox/testdata/moc_hpp/object.h b/tests/auto/api/testdata/moc-hpp-included/object.h
index 7d8f59c6c..7d8f59c6c 100644
--- a/tests/auto/blackbox/testdata/moc_hpp/object.h
+++ b/tests/auto/api/testdata/moc-hpp-included/object.h
diff --git a/tests/auto/blackbox/testdata/moc_hpp_included/moc_hpp_included.qbs b/tests/auto/api/testdata/moc-hpp-included/project.qbs
index b144fb672..b144fb672 100644
--- a/tests/auto/blackbox/testdata/moc_hpp_included/moc_hpp_included.qbs
+++ b/tests/auto/api/testdata/moc-hpp-included/project.qbs
diff --git a/tests/auto/blackbox/testdata/moc_hpp/object.cpp b/tests/auto/api/testdata/moc-hpp/object.cpp
index 8c091c58c..8c091c58c 100644
--- a/tests/auto/blackbox/testdata/moc_hpp/object.cpp
+++ b/tests/auto/api/testdata/moc-hpp/object.cpp
diff --git a/tests/auto/blackbox/testdata/moc_hpp_included/object.h b/tests/auto/api/testdata/moc-hpp/object.h
index 7d8f59c6c..7d8f59c6c 100644
--- a/tests/auto/blackbox/testdata/moc_hpp_included/object.h
+++ b/tests/auto/api/testdata/moc-hpp/object.h
diff --git a/tests/auto/blackbox/testdata/moc_hpp/moc_hpp.qbs b/tests/auto/api/testdata/moc-hpp/project.qbs
index 87ddfc335..87ddfc335 100644
--- a/tests/auto/blackbox/testdata/moc_hpp/moc_hpp.qbs
+++ b/tests/auto/api/testdata/moc-hpp/project.qbs
diff --git a/tests/auto/blackbox/testdata/new-output-artifact-in-dependency/lib.cpp b/tests/auto/api/testdata/new-output-artifact-in-dependency/lib.cpp
index 7fd25b792..7fd25b792 100644
--- a/tests/auto/blackbox/testdata/new-output-artifact-in-dependency/lib.cpp
+++ b/tests/auto/api/testdata/new-output-artifact-in-dependency/lib.cpp
diff --git a/tests/auto/blackbox/testdata/new-output-artifact-in-dependency/main.cpp b/tests/auto/api/testdata/new-output-artifact-in-dependency/main.cpp
index b44adf42f..b44adf42f 100644
--- a/tests/auto/blackbox/testdata/new-output-artifact-in-dependency/main.cpp
+++ b/tests/auto/api/testdata/new-output-artifact-in-dependency/main.cpp
diff --git a/tests/auto/blackbox/testdata/new-output-artifact-in-dependency/project.qbs b/tests/auto/api/testdata/new-output-artifact-in-dependency/project.qbs
index 2fc85e9a9..2fc85e9a9 100644
--- a/tests/auto/blackbox/testdata/new-output-artifact-in-dependency/project.qbs
+++ b/tests/auto/api/testdata/new-output-artifact-in-dependency/project.qbs
diff --git a/tests/auto/blackbox/testdata/new-pattern-match/project.qbs b/tests/auto/api/testdata/new-pattern-match/project.qbs
index 18975da75..18975da75 100644
--- a/tests/auto/blackbox/testdata/new-pattern-match/project.qbs
+++ b/tests/auto/api/testdata/new-pattern-match/project.qbs
diff --git a/tests/auto/blackbox/testdata/objc/main.mm b/tests/auto/api/testdata/objc/main.mm
index 49b4f3915..49b4f3915 100644
--- a/tests/auto/blackbox/testdata/objc/main.mm
+++ b/tests/auto/api/testdata/objc/main.mm
diff --git a/tests/auto/blackbox/testdata/objc/objc.qbs b/tests/auto/api/testdata/objc/objc.qbs
index c069c5032..c069c5032 100644
--- a/tests/auto/blackbox/testdata/objc/objc.qbs
+++ b/tests/auto/api/testdata/objc/objc.qbs
diff --git a/tests/auto/blackbox/testdata/precompiledHeader/main.cpp b/tests/auto/api/testdata/precompiled-header/main.cpp
index 400762bc6..400762bc6 100644
--- a/tests/auto/blackbox/testdata/precompiledHeader/main.cpp
+++ b/tests/auto/api/testdata/precompiled-header/main.cpp
diff --git a/tests/auto/blackbox/testdata/precompiledHeader/myobject.cpp b/tests/auto/api/testdata/precompiled-header/myobject.cpp
index 9f3f93740..9f3f93740 100644
--- a/tests/auto/blackbox/testdata/precompiledHeader/myobject.cpp
+++ b/tests/auto/api/testdata/precompiled-header/myobject.cpp
diff --git a/tests/auto/blackbox/testdata/precompiledHeader/myobject.h b/tests/auto/api/testdata/precompiled-header/myobject.h
index 376f0da66..376f0da66 100644
--- a/tests/auto/blackbox/testdata/precompiledHeader/myobject.h
+++ b/tests/auto/api/testdata/precompiled-header/myobject.h
diff --git a/tests/auto/blackbox/testdata/precompiledHeader/precompiledHeader.qbs b/tests/auto/api/testdata/precompiled-header/project.qbs
index de65b9330..de65b9330 100644
--- a/tests/auto/blackbox/testdata/precompiledHeader/precompiledHeader.qbs
+++ b/tests/auto/api/testdata/precompiled-header/project.qbs
diff --git a/tests/auto/blackbox/testdata/precompiledHeader/stable.h b/tests/auto/api/testdata/precompiled-header/stable.h
index 93ce3cb29..93ce3cb29 100644
--- a/tests/auto/blackbox/testdata/precompiledHeader/stable.h
+++ b/tests/auto/api/testdata/precompiled-header/stable.h
diff --git a/tests/auto/blackbox/testdata/project-with-properties-item/project.qbs b/tests/auto/api/testdata/project-with-properties-item/project.qbs
index d59a26a94..d59a26a94 100644
--- a/tests/auto/blackbox/testdata/project-with-properties-item/project.qbs
+++ b/tests/auto/api/testdata/project-with-properties-item/project.qbs
diff --git a/tests/auto/blackbox/testdata/propertiesBlocks/main.cpp b/tests/auto/api/testdata/properties-blocks/main.cpp
index c2304641c..c2304641c 100644
--- a/tests/auto/blackbox/testdata/propertiesBlocks/main.cpp
+++ b/tests/auto/api/testdata/properties-blocks/main.cpp
diff --git a/tests/auto/blackbox/testdata/propertiesBlocks/propertiesblocks.qbs b/tests/auto/api/testdata/properties-blocks/propertiesblocks.qbs
index 5fe02a103..5fe02a103 100644
--- a/tests/auto/blackbox/testdata/propertiesBlocks/propertiesblocks.qbs
+++ b/tests/auto/api/testdata/properties-blocks/propertiesblocks.qbs
diff --git a/tests/auto/blackbox/testdata/qt5plugin/echointerface.h b/tests/auto/api/testdata/qt5-plugin/echointerface.h
index 228a911e6..228a911e6 100644
--- a/tests/auto/blackbox/testdata/qt5plugin/echointerface.h
+++ b/tests/auto/api/testdata/qt5-plugin/echointerface.h
diff --git a/tests/auto/blackbox/testdata/qt5plugin/echoplugin.cpp b/tests/auto/api/testdata/qt5-plugin/echoplugin.cpp
index b6747a82b..b6747a82b 100644
--- a/tests/auto/blackbox/testdata/qt5plugin/echoplugin.cpp
+++ b/tests/auto/api/testdata/qt5-plugin/echoplugin.cpp
diff --git a/tests/auto/blackbox/testdata/qt5plugin/echoplugin.h b/tests/auto/api/testdata/qt5-plugin/echoplugin.h
index 9f8d71c5c..9f8d71c5c 100644
--- a/tests/auto/blackbox/testdata/qt5plugin/echoplugin.h
+++ b/tests/auto/api/testdata/qt5-plugin/echoplugin.h
diff --git a/tests/auto/blackbox/testdata/qt5plugin/echoplugin.json.source b/tests/auto/api/testdata/qt5-plugin/echoplugin.json.source
index 0967ef424..0967ef424 100644
--- a/tests/auto/blackbox/testdata/qt5plugin/echoplugin.json.source
+++ b/tests/auto/api/testdata/qt5-plugin/echoplugin.json.source
diff --git a/tests/auto/blackbox/testdata/qt5plugin/echoplugin_dummy.cpp b/tests/auto/api/testdata/qt5-plugin/echoplugin_dummy.cpp
index baa060d28..baa060d28 100644
--- a/tests/auto/blackbox/testdata/qt5plugin/echoplugin_dummy.cpp
+++ b/tests/auto/api/testdata/qt5-plugin/echoplugin_dummy.cpp
diff --git a/tests/auto/blackbox/testdata/qt5plugin/plugin.qbs b/tests/auto/api/testdata/qt5-plugin/project.qbs
index 2944198f3..2944198f3 100644
--- a/tests/auto/blackbox/testdata/qt5plugin/plugin.qbs
+++ b/tests/auto/api/testdata/qt5-plugin/project.qbs
diff --git a/tests/auto/blackbox/testdata/rc/main.cpp b/tests/auto/api/testdata/rc/main.cpp
index 6ea3f271f..6ea3f271f 100644
--- a/tests/auto/blackbox/testdata/rc/main.cpp
+++ b/tests/auto/api/testdata/rc/main.cpp
diff --git a/tests/auto/blackbox/testdata/rc/rc.qbs b/tests/auto/api/testdata/rc/rc.qbs
index 75502cf88..75502cf88 100644
--- a/tests/auto/blackbox/testdata/rc/rc.qbs
+++ b/tests/auto/api/testdata/rc/rc.qbs
diff --git a/tests/auto/blackbox/testdata/rc/test.rc b/tests/auto/api/testdata/rc/test.rc
index a8e5fd39b..a8e5fd39b 100644
--- a/tests/auto/blackbox/testdata/rc/test.rc
+++ b/tests/auto/api/testdata/rc/test.rc
diff --git a/tests/auto/blackbox/testdata/removeFileDependency/main.cpp b/tests/auto/api/testdata/remove-file-dependency/main.cpp
index 77727cf42..77727cf42 100644
--- a/tests/auto/blackbox/testdata/removeFileDependency/main.cpp
+++ b/tests/auto/api/testdata/remove-file-dependency/main.cpp
diff --git a/tests/auto/blackbox/testdata/removeFileDependency/removeFileDependency.qbs b/tests/auto/api/testdata/remove-file-dependency/removeFileDependency.qbs
index 8ed927761..8ed927761 100644
--- a/tests/auto/blackbox/testdata/removeFileDependency/removeFileDependency.qbs
+++ b/tests/auto/api/testdata/remove-file-dependency/removeFileDependency.qbs
diff --git a/tests/auto/blackbox/testdata/removeFileDependency/someheader.h b/tests/auto/api/testdata/remove-file-dependency/someheader.h
index b895e465c..b895e465c 100644
--- a/tests/auto/blackbox/testdata/removeFileDependency/someheader.h
+++ b/tests/auto/api/testdata/remove-file-dependency/someheader.h
diff --git a/tests/auto/blackbox/testdata/renameProduct/lib.cpp b/tests/auto/api/testdata/rename-product/lib.cpp
index 47ce43bc9..47ce43bc9 100644
--- a/tests/auto/blackbox/testdata/renameProduct/lib.cpp
+++ b/tests/auto/api/testdata/rename-product/lib.cpp
diff --git a/tests/auto/blackbox/testdata/renameProduct/main.cpp b/tests/auto/api/testdata/rename-product/main.cpp
index 6a0bac9f1..6a0bac9f1 100644
--- a/tests/auto/blackbox/testdata/renameProduct/main.cpp
+++ b/tests/auto/api/testdata/rename-product/main.cpp
diff --git a/tests/auto/blackbox/testdata/renameProduct/rename.qbs b/tests/auto/api/testdata/rename-product/rename.qbs
index a2fe2e22f..a2fe2e22f 100644
--- a/tests/auto/blackbox/testdata/renameProduct/rename.qbs
+++ b/tests/auto/api/testdata/rename-product/rename.qbs
diff --git a/tests/auto/blackbox/testdata/renameTargetArtifact/lib.cpp b/tests/auto/api/testdata/rename-target-artifact/lib.cpp
index 47ce43bc9..47ce43bc9 100644
--- a/tests/auto/blackbox/testdata/renameTargetArtifact/lib.cpp
+++ b/tests/auto/api/testdata/rename-target-artifact/lib.cpp
diff --git a/tests/auto/blackbox/testdata/renameTargetArtifact/main.cpp b/tests/auto/api/testdata/rename-target-artifact/main.cpp
index 6a0bac9f1..6a0bac9f1 100644
--- a/tests/auto/blackbox/testdata/renameTargetArtifact/main.cpp
+++ b/tests/auto/api/testdata/rename-target-artifact/main.cpp
diff --git a/tests/auto/blackbox/testdata/renameTargetArtifact/rename.qbs b/tests/auto/api/testdata/rename-target-artifact/rename.qbs
index 5a8c765e4..5a8c765e4 100644
--- a/tests/auto/blackbox/testdata/renameTargetArtifact/rename.qbs
+++ b/tests/auto/api/testdata/rename-target-artifact/rename.qbs
diff --git a/tests/auto/blackbox/testdata/sameBaseName/lib.c b/tests/auto/api/testdata/same-base-name/lib.c
index 6055ed681..6055ed681 100644
--- a/tests/auto/blackbox/testdata/sameBaseName/lib.c
+++ b/tests/auto/api/testdata/same-base-name/lib.c
diff --git a/tests/auto/blackbox/testdata/sameBaseName/lib.cpp b/tests/auto/api/testdata/same-base-name/lib.cpp
index 933fa8036..933fa8036 100644
--- a/tests/auto/blackbox/testdata/sameBaseName/lib.cpp
+++ b/tests/auto/api/testdata/same-base-name/lib.cpp
diff --git a/tests/auto/blackbox/testdata/sameBaseName/lib.m b/tests/auto/api/testdata/same-base-name/lib.m
index 17cd2dceb..17cd2dceb 100644
--- a/tests/auto/blackbox/testdata/sameBaseName/lib.m
+++ b/tests/auto/api/testdata/same-base-name/lib.m
diff --git a/tests/auto/blackbox/testdata/sameBaseName/lib.mm b/tests/auto/api/testdata/same-base-name/lib.mm
index ee284b080..ee284b080 100644
--- a/tests/auto/blackbox/testdata/sameBaseName/lib.mm
+++ b/tests/auto/api/testdata/same-base-name/lib.mm
diff --git a/tests/auto/blackbox/testdata/sameBaseName/main.c b/tests/auto/api/testdata/same-base-name/main.c
index 07da20307..07da20307 100644
--- a/tests/auto/blackbox/testdata/sameBaseName/main.c
+++ b/tests/auto/api/testdata/same-base-name/main.c
diff --git a/tests/auto/blackbox/testdata/sameBaseName/sameBaseName.qbs b/tests/auto/api/testdata/same-base-name/project.qbs
index e9b4ba7a6..e9b4ba7a6 100644
--- a/tests/auto/blackbox/testdata/sameBaseName/sameBaseName.qbs
+++ b/tests/auto/api/testdata/same-base-name/project.qbs
diff --git a/tests/auto/blackbox/testdata/simpleProbe/main.cpp b/tests/auto/api/testdata/simple-probe/main.cpp
index 76e819701..76e819701 100644
--- a/tests/auto/blackbox/testdata/simpleProbe/main.cpp
+++ b/tests/auto/api/testdata/simple-probe/main.cpp
diff --git a/tests/auto/blackbox/testdata/simpleProbe/simpleProbe.qbs b/tests/auto/api/testdata/simple-probe/project.qbs
index b409c7cc6..b409c7cc6 100644
--- a/tests/auto/blackbox/testdata/simpleProbe/simpleProbe.qbs
+++ b/tests/auto/api/testdata/simple-probe/project.qbs
diff --git a/tests/auto/blackbox/testdata/soft-dependency/main.cpp b/tests/auto/api/testdata/soft-dependency/main.cpp
index 5f3248c7f..5f3248c7f 100644
--- a/tests/auto/blackbox/testdata/soft-dependency/main.cpp
+++ b/tests/auto/api/testdata/soft-dependency/main.cpp
diff --git a/tests/auto/blackbox/testdata/soft-dependency/project.qbs b/tests/auto/api/testdata/soft-dependency/project.qbs
index bbf37fda8..bbf37fda8 100644
--- a/tests/auto/blackbox/testdata/soft-dependency/project.qbs
+++ b/tests/auto/api/testdata/soft-dependency/project.qbs
diff --git a/tests/auto/blackbox/testdata/staticLibDeps/a1.cpp b/tests/auto/api/testdata/static-lib-deps/a1.cpp
index 862d76783..862d76783 100644
--- a/tests/auto/blackbox/testdata/staticLibDeps/a1.cpp
+++ b/tests/auto/api/testdata/static-lib-deps/a1.cpp
diff --git a/tests/auto/blackbox/testdata/staticLibDeps/a2.cpp b/tests/auto/api/testdata/static-lib-deps/a2.cpp
index d1f41731c..d1f41731c 100644
--- a/tests/auto/blackbox/testdata/staticLibDeps/a2.cpp
+++ b/tests/auto/api/testdata/static-lib-deps/a2.cpp
diff --git a/tests/auto/blackbox/testdata/staticLibDeps/b.cpp b/tests/auto/api/testdata/static-lib-deps/b.cpp
index a88cc9d90..a88cc9d90 100644
--- a/tests/auto/blackbox/testdata/staticLibDeps/b.cpp
+++ b/tests/auto/api/testdata/static-lib-deps/b.cpp
diff --git a/tests/auto/blackbox/testdata/staticLibDeps/c.cpp b/tests/auto/api/testdata/static-lib-deps/c.cpp
index 264db582a..264db582a 100644
--- a/tests/auto/blackbox/testdata/staticLibDeps/c.cpp
+++ b/tests/auto/api/testdata/static-lib-deps/c.cpp
diff --git a/tests/auto/blackbox/testdata/staticLibDeps/d.cpp b/tests/auto/api/testdata/static-lib-deps/d.cpp
index a7a2b9f85..a7a2b9f85 100644
--- a/tests/auto/blackbox/testdata/staticLibDeps/d.cpp
+++ b/tests/auto/api/testdata/static-lib-deps/d.cpp
diff --git a/tests/auto/blackbox/testdata/staticLibDeps/e.cpp b/tests/auto/api/testdata/static-lib-deps/e.cpp
index af7d24682..af7d24682 100644
--- a/tests/auto/blackbox/testdata/staticLibDeps/e.cpp
+++ b/tests/auto/api/testdata/static-lib-deps/e.cpp
diff --git a/tests/auto/blackbox/testdata/staticLibDeps/main.cpp b/tests/auto/api/testdata/static-lib-deps/main.cpp
index 3753dd5cb..3753dd5cb 100644
--- a/tests/auto/blackbox/testdata/staticLibDeps/main.cpp
+++ b/tests/auto/api/testdata/static-lib-deps/main.cpp
diff --git a/tests/auto/blackbox/testdata/staticLibDeps/dep.qbs b/tests/auto/api/testdata/static-lib-deps/project.qbs
index f7d4a98b0..f7d4a98b0 100644
--- a/tests/auto/blackbox/testdata/staticLibDeps/dep.qbs
+++ b/tests/auto/api/testdata/static-lib-deps/project.qbs
diff --git a/tests/auto/blackbox/testdata/transformers/main.cpp b/tests/auto/api/testdata/transformers/main.cpp
index c0d920a9d..c0d920a9d 100644
--- a/tests/auto/blackbox/testdata/transformers/main.cpp
+++ b/tests/auto/api/testdata/transformers/main.cpp
diff --git a/tests/auto/blackbox/testdata/transformers/transformers.qbs b/tests/auto/api/testdata/transformers/transformers.qbs
index a0b1d70b0..a0b1d70b0 100644
--- a/tests/auto/blackbox/testdata/transformers/transformers.qbs
+++ b/tests/auto/api/testdata/transformers/transformers.qbs
diff --git a/tests/auto/blackbox/testdata/type-change/main.cpp b/tests/auto/api/testdata/type-change/main.cpp
index 237c8ce18..237c8ce18 100644
--- a/tests/auto/blackbox/testdata/type-change/main.cpp
+++ b/tests/auto/api/testdata/type-change/main.cpp
diff --git a/tests/auto/blackbox/testdata/type-change/project.qbs b/tests/auto/api/testdata/type-change/project.qbs
index 7661aa305..7661aa305 100644
--- a/tests/auto/blackbox/testdata/type-change/project.qbs
+++ b/tests/auto/api/testdata/type-change/project.qbs
diff --git a/tests/auto/blackbox/testdata/uic/bla.cpp b/tests/auto/api/testdata/uic/bla.cpp
index 0f53e98a7..0f53e98a7 100644
--- a/tests/auto/blackbox/testdata/uic/bla.cpp
+++ b/tests/auto/api/testdata/uic/bla.cpp
diff --git a/tests/auto/blackbox/testdata/uic/bla.h b/tests/auto/api/testdata/uic/bla.h
index 952d25b7d..952d25b7d 100644
--- a/tests/auto/blackbox/testdata/uic/bla.h
+++ b/tests/auto/api/testdata/uic/bla.h
diff --git a/tests/auto/blackbox/testdata/uic/ui.h b/tests/auto/api/testdata/uic/ui.h
index b186b58f8..b186b58f8 100644
--- a/tests/auto/blackbox/testdata/uic/ui.h
+++ b/tests/auto/api/testdata/uic/ui.h
diff --git a/tests/auto/blackbox/testdata/uic/ui.ui b/tests/auto/api/testdata/uic/ui.ui
index b07f62d05..b07f62d05 100644
--- a/tests/auto/blackbox/testdata/uic/ui.ui
+++ b/tests/auto/api/testdata/uic/ui.ui
diff --git a/tests/auto/blackbox/testdata/uic/uic.qbs b/tests/auto/api/testdata/uic/uic.qbs
index a216b86a9..a216b86a9 100644
--- a/tests/auto/blackbox/testdata/uic/uic.qbs
+++ b/tests/auto/api/testdata/uic/uic.qbs
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index 6cdb3279a..35dd15842 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -31,18 +31,9 @@
#include "../shared.h"
-#include <api/jobs.h>
-#include <api/project.h>
-#include <api/projectdata.h>
-#include <logging/ilogsink.h>
-#include <tools/buildoptions.h>
+#include <qbs.h>
#include <tools/fileinfo.h>
#include <tools/hostosinfo.h>
-#include <tools/installoptions.h>
-#include <tools/preferences.h>
-#include <tools/profile.h>
-#include <tools/settings.h>
-#include <tools/setupprojectparameters.h>
#include <QCoreApplication>
#include <QDir>
@@ -54,12 +45,20 @@
#include <QTest>
#include <QTimer>
+#define VERIFY_NO_ERROR(errorInfo) \
+ QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()))
+
class LogSink: public qbs::ILogSink
{
+public:
+ QString output;
+
void doPrintWarning(const qbs::ErrorInfo &error) {
qDebug("%s", qPrintable(error.toString()));
}
- void doPrintMessage(qbs::LoggerLevel, const QString &, const QString &) { }
+ void doPrintMessage(qbs::LoggerLevel, const QString &message, const QString &) {
+ output += message;
+ }
};
class BuildDescriptionReceiver : public QObject
@@ -74,25 +73,29 @@ private slots:
}
};
-TestApi::TestApi()
- : m_logSink(new LogSink)
- , m_sourceDataDir(QDir::cleanPath(SRCDIR "/testdata"))
- , m_workingDataDir(QCoreApplication::applicationDirPath() + "/../tests/auto/api/testWorkDir")
+class ProcessResultReceiver : public QObject
{
-}
+ Q_OBJECT
+public:
+ QString output;
-TestApi::~TestApi()
-{
- delete m_logSink;
-}
+private slots:
+ void handleProcessResult(const qbs::ProcessResult &result) {
+ output += result.stdErr().join(QLatin1String("\n"));
+ output += result.stdOut().join(QLatin1String("\n"));
+ }
+};
-void TestApi::initTestCase()
+class TaskReceiver : public QObject
{
- QString errorMessage;
- qbs::Internal::removeDirectoryWithContents(m_workingDataDir, &errorMessage);
- QVERIFY2(qbs::Internal::copyFileRecursion(m_sourceDataDir,
- m_workingDataDir, false, &errorMessage), qPrintable(errorMessage));
-}
+ Q_OBJECT
+public:
+ QString taskDescriptions;
+
+private slots:
+ void handleTaskStart(const QString &task) { taskDescriptions += task; }
+};
+
static void removeBuildDir(const qbs::SetupProjectParameters &params)
{
@@ -119,8 +122,7 @@ static bool waitForFinished(qbs::AbstractJob *job, int timeout = 0)
return true;
}
-
-void printProjectData(const qbs::ProjectData &project)
+static void printProjectData(const qbs::ProjectData &project)
{
foreach (const qbs::ProductData &p, project.products()) {
qDebug(" Product '%s' at %s", qPrintable(p.name()), qPrintable(p.location().toString()));
@@ -131,6 +133,113 @@ void printProjectData(const qbs::ProjectData &project)
}
}
+
+TestApi::TestApi()
+ : m_logSink(new LogSink)
+ , m_sourceDataDir(QDir::cleanPath(SRCDIR "/testdata"))
+ , m_workingDataDir(QCoreApplication::applicationDirPath() + "/../tests/auto/api/testWorkDir")
+{
+}
+
+TestApi::~TestApi()
+{
+ delete m_logSink;
+}
+
+void TestApi::initTestCase()
+{
+ QString errorMessage;
+ qbs::Internal::removeDirectoryWithContents(m_workingDataDir, &errorMessage);
+ QVERIFY2(qbs::Internal::copyFileRecursion(m_sourceDataDir,
+ m_workingDataDir, false, &errorMessage), qPrintable(errorMessage));
+}
+
+void TestApi::addQObjectMacroToCppFile()
+{
+ BuildDescriptionReceiver receiver;
+ qbs::ErrorInfo errorInfo = doBuildProject("add-qobject-macro-to-cpp-file/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(!receiver.descriptions.contains("moc"), qPrintable(receiver.descriptions));
+ receiver.descriptions.clear();
+
+ waitForNewTimestamp();
+ QFile cppFile("object.cpp");
+ QVERIFY2(cppFile.open(QIODevice::ReadWrite), qPrintable(cppFile.errorString()));
+ QByteArray contents = cppFile.readAll();
+ contents.replace("// ", "");
+ cppFile.resize(0);
+ cppFile.write(contents);
+ cppFile.close();
+ errorInfo = doBuildProject("add-qobject-macro-to-cpp-file/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(receiver.descriptions.contains("moc"), qPrintable(receiver.descriptions));
+}
+
+static bool isAboutUndefinedSymbols(const QString &_message)
+{
+ const QString message = _message.toLower();
+ return message.contains("undefined") || message.contains("unresolved");
+}
+
+void TestApi::addedFilePersistent()
+{
+ // On the initial run, linking will fail.
+ const QString relProjectFilePath = "added-file-persistent/project.qbs";
+ ProcessResultReceiver receiver;
+ qbs::ErrorInfo errorInfo = doBuildProject(relProjectFilePath, 0, &receiver);
+ QVERIFY(errorInfo.hasError());
+ QVERIFY2(isAboutUndefinedSymbols(receiver.output), qPrintable((receiver.output)));
+ receiver.output.clear();
+
+ // Add a file. qbs must schedule it for rule application on the next build.
+ waitForNewTimestamp();
+ const qbs::SetupProjectParameters params = defaultSetupParameters(relProjectFilePath);
+ QFile projectFile(params.projectFilePath());
+ QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
+ const QByteArray originalContent = projectFile.readAll();
+ QByteArray addedFileContent = originalContent;
+ addedFileContent.replace("/* 'file.cpp' */", "'file.cpp'");
+ projectFile.resize(0);
+ projectFile.write(addedFileContent);
+ projectFile.flush();
+ QScopedPointer<qbs::SetupProjectJob> setupJob(qbs::Project().setupProject(params, m_logSink,
+ 0));
+ waitForFinished(setupJob.data());
+ QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
+ setupJob.reset(0);
+
+ // Remove the file again. qbs must unschedule the rule application again.
+ // Consequently, the linking step must fail as in the initial run.
+ waitForNewTimestamp();
+ projectFile.resize(0);
+ projectFile.write(originalContent);
+ projectFile.flush();
+ errorInfo = doBuildProject(relProjectFilePath, 0, &receiver);
+ QVERIFY(errorInfo.hasError());
+ QVERIFY2(isAboutUndefinedSymbols(receiver.output), qPrintable((receiver.output)));
+
+ // Add the file again. qbs must schedule it for rule application on the next build.
+ waitForNewTimestamp();
+ projectFile.resize(0);
+ projectFile.write(addedFileContent);
+ projectFile.close();
+ setupJob.reset(qbs::Project().setupProject(params, m_logSink, 0));
+ waitForFinished(setupJob.data());
+ QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
+ setupJob.reset(0);
+
+ // qbs must remember that a file was scheduled for rule application. The build must then
+ // succeed, as now all necessary symbols are linked in.
+ errorInfo = doBuildProject(relProjectFilePath);
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::baseProperties()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("base-properties/prj.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
void TestApi::buildGraphLocking()
{
qbs::SetupProjectParameters setupParams
@@ -151,6 +260,97 @@ void TestApi::buildGraphLocking()
qPrintable(setupJob->error().toString()));
}
+void TestApi::buildProject()
+{
+ QFETCH(QString, projectSubDir);
+ QFETCH(QString, productFileName);
+ qbs::SetupProjectParameters params = defaultSetupParameters(projectSubDir + "/project.qbs");
+ removeBuildDir(params);
+ qbs::ErrorInfo errorInfo = doBuildProject(projectSubDir + "/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(regularFileExists(productFileName), qPrintable(productFileName));
+ QVERIFY(regularFileExists(relativeBuildGraphFilePath()));
+
+ QVERIFY2(QFile::remove(productFileName), qPrintable(productFileName));
+ waitForNewTimestamp();
+ qbs::BuildOptions options;
+ options.setForceTimestampCheck(true);
+ errorInfo = doBuildProject(projectSubDir + "/project.qbs", 0, 0, 0, options);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(regularFileExists(productFileName), qPrintable(productFileName));
+ QVERIFY(regularFileExists(relativeBuildGraphFilePath()));
+}
+
+void TestApi::buildProject_data()
+{
+ QTest::addColumn<QString>("projectSubDir");
+ QTest::addColumn<QString>("productFileName");
+ QTest::newRow("BPs in Sources")
+ << QString("build-properties-source")
+ << relativeExecutableFilePath("HelloWorld");
+ QTest::newRow("code generator")
+ << QString("codegen")
+ << relativeExecutableFilePath("codegen");
+ QTest::newRow("link static libs")
+ << QString("link-static-lib")
+ << relativeExecutableFilePath("HelloWorld");
+ QTest::newRow("precompiled header")
+ << QString("precompiled-header")
+ << relativeExecutableFilePath("MyApp");
+ QTest::newRow("lots of dots")
+ << QString("lots-of-dots")
+ << relativeExecutableFilePath("lots.of.dots");
+ QTest::newRow("Qt5 plugin")
+ << QString("qt5-plugin")
+ << relativeProductBuildDir("echoplugin") + '/'
+ + qbs::Internal::HostOsInfo::dynamicLibraryName("echoplugin");
+ QTest::newRow("Q_OBJECT in source")
+ << QString("moc-cpp")
+ << relativeExecutableFilePath("moc_cpp");
+ QTest::newRow("Q_OBJECT in header")
+ << QString("moc-hpp")
+ << relativeExecutableFilePath("moc_hpp");
+ QTest::newRow("Q_OBJECT in header, moc_XXX.cpp included")
+ << QString("moc-hpp-included")
+ << relativeExecutableFilePath("moc_hpp_included");
+ QTest::newRow("app and lib with same source file")
+ << QString("lib-same-source")
+ << relativeExecutableFilePath("HelloWorldApp");
+ QTest::newRow("source files with the same base name but different extensions")
+ << QString("same-base-name")
+ << relativeExecutableFilePath("basename");
+ QTest::newRow("static library dependencies")
+ << QString("static-lib-deps")
+ << relativeExecutableFilePath("staticLibDeps");
+ QTest::newRow("simple probes")
+ << QString("simple-probe")
+ << relativeExecutableFilePath("MyApp");
+ QTest::newRow("application without sources")
+ << QString("app-without-sources")
+ << relativeExecutableFilePath("appWithoutSources");
+}
+
+void TestApi::buildProjectDryRun()
+{
+ QFETCH(QString, projectSubDir);
+ QFETCH(QString, productFileName);
+ qbs::SetupProjectParameters params = defaultSetupParameters(projectSubDir + "/project.qbs");
+ removeBuildDir(params);
+ qbs::BuildOptions options;
+ options.setDryRun(true);
+ const qbs::ErrorInfo errorInfo
+ = doBuildProject(projectSubDir + "/project.qbs", 0, 0, 0, options);
+ VERIFY_NO_ERROR(errorInfo);
+ const QStringList &buildDirContents
+ = QDir(relativeBuildDir()).entryList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
+ QVERIFY2(buildDirContents.isEmpty(), qPrintable(buildDirContents.join(" ")));
+}
+
+void TestApi::buildProjectDryRun_data()
+{
+ return buildProject_data();
+}
+
void TestApi::buildSingleFile()
{
qbs::SetupProjectParameters setupParams
@@ -210,10 +410,10 @@ void TestApi::changeContent()
QVERIFY(errorInfo.toString().contains("empty"));
errorInfo = project.addGroup(product, "New Group 1");
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
errorInfo = project.addGroup(product, "New Group 2");
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
// Error handling: Group already inserted.
errorInfo = project.addGroup(product, "New Group 1");
@@ -234,7 +434,7 @@ void TestApi::changeContent()
qbs::GroupData group = findGroup(product, "New Group 1");
QVERIFY(group.isValid());
errorInfo = project.addFiles(product, group, QStringList() << "file.h" << "file.cpp");
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
// Error handling: Add the same file again.
projectData = project.projectData();
@@ -249,7 +449,7 @@ void TestApi::changeContent()
// Remove one of the newly added files again.
errorInfo = project.removeFiles(product, group, QStringList("file.h"));
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
// Error handling: Try to remove the same file again.
projectData = project.projectData();
@@ -271,7 +471,7 @@ void TestApi::changeContent()
// Remove file from product's 'files' binding.
errorInfo = project.removeFiles(product, qbs::GroupData(), QStringList("main.cpp"));
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
// Add file to non-empty array literal.
projectData = project.projectData();
@@ -280,14 +480,14 @@ void TestApi::changeContent()
group = findGroup(product, "Existing Group 1");
QVERIFY(group.isValid());
errorInfo = project.addFiles(product, group, QStringList() << "newfile1.txt");
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
// Add files to list represented as a single string.
projectData = project.projectData();
QVERIFY(projectData.products().count() == 1);
product = projectData.products().first();
errorInfo = project.addFiles(product, qbs::GroupData(), QStringList() << "newfile2.txt");
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
// Add files to list represented as an identifier.
projectData = project.projectData();
@@ -296,7 +496,7 @@ void TestApi::changeContent()
group = findGroup(product, "Existing Group 2");
QVERIFY(group.isValid());
errorInfo = project.addFiles(product, group, QStringList() << "newfile3.txt");
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
// Add files to list represented as a block of code (not yet implemented).
projectData = project.projectData();
@@ -315,7 +515,7 @@ void TestApi::changeContent()
group = findGroup(product, "Existing Group 4");
QVERIFY(group.isValid());
errorInfo = project.addFiles(product, group, QStringList() << "file.txt");
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
// Error handling: Add file to group with non-directory prefix.
projectData = project.projectData();
@@ -334,7 +534,7 @@ void TestApi::changeContent()
group = findGroup(product, "Existing Group 5");
QVERIFY(group.isValid());
errorInfo = project.removeGroup(product, group);
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
projectData = project.projectData();
QVERIFY(projectData.products().count() == 1);
QCOMPARE(projectData.products().first().groups().count(), 9);
@@ -354,7 +554,7 @@ void TestApi::changeContent()
QVERIFY2(newFile.open(QIODevice::WriteOnly), qPrintable(newFile.errorString()));
newFile.close();
errorInfo = project.addFiles(product, group, QStringList() << newFile.fileName());
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
projectData = project.projectData();
QVERIFY(projectData.products().count() == 1);
product = projectData.products().first();
@@ -426,9 +626,11 @@ void TestApi::changeContent()
QVERIFY2(errorInfo.toString().contains("in process"), qPrintable(errorInfo.toString()));
waitForFinished(buildJob.data());
errorInfo = project.addGroup(newProjectData.products().first(), "blubb");
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
project = qbs::Project();
+ job.reset(0);
+ buildJob.reset(0);
removeBuildDir(setupParams);
// Add a file to the top level of a product that does not have a "files" binding yet.
setupParams.setProjectFilePath(QDir::cleanPath(m_workingDataDir +
@@ -442,7 +644,7 @@ void TestApi::changeContent()
QCOMPARE(projectData.allProducts().count(), 1);
product = projectData.allProducts().first();
errorInfo = project.addFiles(product, qbs::GroupData(), QStringList("main.cpp"));
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
projectData = project.projectData();
rcvr.descriptions.clear();
buildJob.reset(project.buildAllProducts(buildOptions, this));
@@ -467,8 +669,29 @@ void TestApi::changeContent()
}
QVERIFY(projectDataMatches);
}
+
#endif // QBS_ENABLE_PROJECT_FILE_UPDATES
+void TestApi::changeDependentLib()
+{
+ qbs::ErrorInfo errorInfo = doBuildProject("change-dependent-lib/change-dependent-lib.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ waitForNewTimestamp();
+ const QString qbsFileName("change-dependent-lib.qbs");
+ QFile qbsFile(qbsFileName);
+ QVERIFY(qbsFile.open(QIODevice::ReadWrite));
+ const QByteArray content1 = qbsFile.readAll();
+ QByteArray content2 = content1;
+ content2.replace("cpp.defines: [\"XXXX\"]", "cpp.defines: [\"ABCD\"]");
+ QVERIFY(content1 != content2);
+ qbsFile.seek(0);
+ qbsFile.write(content2);
+ qbsFile.close();
+ errorInfo = doBuildProject("change-dependent-lib/change-dependent-lib.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
static qbs::ErrorInfo forceRuleEvaluation(const qbs::Project project)
{
qbs::BuildOptions buildOptions;
@@ -489,7 +712,7 @@ void TestApi::disabledInstallGroup()
const qbs::Project project = job->project();
const qbs::ErrorInfo errorInfo = forceRuleEvaluation(project);
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
qbs::ProjectData projectData = project.projectData();
QCOMPARE(projectData.allProducts().count(), 1);
@@ -503,6 +726,111 @@ void TestApi::disabledInstallGroup()
QCOMPARE(project.targetExecutable(product, qbs::InstallOptions()), targets.first().filePath());
}
+void TestApi::disabledProduct()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("disabled-product/disabledProduct.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::disabledProject()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("disabled-project/disabled_project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::disableProduct()
+{
+ qbs::ErrorInfo errorInfo = doBuildProject("disable-product/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ waitForNewTimestamp();
+ QFile projectFile("project.qbs");
+ QVERIFY(projectFile.open(QIODevice::ReadWrite));
+ QByteArray content = projectFile.readAll();
+ content.replace("// condition: false", "condition: false");
+ projectFile.resize(0);
+ projectFile.write(content);
+ projectFile.close();
+ errorInfo = doBuildProject("disable-product/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::duplicateProductNames()
+{
+ QFETCH(QString, projectFileName);
+ const qbs::ErrorInfo errorInfo = doBuildProject("duplicate-product-names/" + projectFileName);
+ QVERIFY(errorInfo.hasError());
+ QVERIFY2(errorInfo.toString().contains("Duplicate product name"),
+ qPrintable(errorInfo.toString()));
+}
+
+void TestApi::duplicateProductNames_data()
+{
+ QTest::addColumn<QString>("projectFileName");
+ QTest::newRow("Names explicitly set") << QString("explicit.qbs");
+ QTest::newRow("Unnamed products in same file") << QString("implicit.qbs");
+ QTest::newRow("Unnamed products in files of the same name") << QString("implicit-indirect.qbs");
+
+}
+
+void TestApi::dynamicLibs()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("dynamic-libs/link_dynamiclib.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::emptyFileTagList()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("empty-filetag-list/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::emptySubmodulesList()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("empty-submodules-list/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::explicitlyDependsOn()
+{
+ BuildDescriptionReceiver receiver;
+ qbs::ErrorInfo errorInfo = doBuildProject("explicitly-depends-on/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(receiver.descriptions.contains("Creating output artifact"));
+ receiver.descriptions.clear();
+
+ errorInfo = doBuildProject("explicitly-depends-on/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(!receiver.descriptions.contains("Creating output artifact"));
+
+ waitForNewTimestamp();
+ touch("dependency.txt");
+ errorInfo = doBuildProject("explicitly-depends-on/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(receiver.descriptions.contains("Creating output artifact"));
+}
+
+void TestApi::exportSimple()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("export-simple/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::exportWithRecursiveDepends()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("export-with-recursive-depends/project.qbs");
+ QEXPECT_FAIL("", "currently broken", Abort);
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::fileTagger()
+{
+ BuildDescriptionReceiver receiver;
+ const qbs::ErrorInfo errorInfo = doBuildProject("file-tagger/moc_cpp.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(receiver.descriptions.contains("moc bla.cpp"), qPrintable(receiver.descriptions));
+}
+
void TestApi::fileTagsFilterOverride()
{
qbs::SetupProjectParameters setupParams
@@ -514,7 +842,7 @@ void TestApi::fileTagsFilterOverride()
qbs::Project project = job->project();
const qbs::ErrorInfo errorInfo = forceRuleEvaluation(project);
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
qbs::ProjectData projectData = project.projectData();
QCOMPARE(projectData.allProducts().count(), 1);
@@ -559,6 +887,12 @@ void TestApi::infiniteLoopResolving()
qPrintable(setupJob->error().toString()));
}
+void TestApi::inheritQbsSearchPaths()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("inherit-qbs-search-paths/prj.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
void TestApi::installableFiles()
{
qbs::SetupProjectParameters setupParams
@@ -570,7 +904,7 @@ void TestApi::installableFiles()
qbs::Project project = job->project();
const qbs::ErrorInfo errorInfo = forceRuleEvaluation(project);
- QVERIFY2(!errorInfo.hasError(), qPrintable(errorInfo.toString()));
+ VERIFY_NO_ERROR(errorInfo);
qbs::ProjectData projectData = project.projectData();
QCOMPARE(projectData.allProducts().count(), 1);
@@ -641,6 +975,33 @@ void TestApi::listBuildSystemFiles()
+ "/subproject2/subproject3/subproject3.qbs"));
}
+void TestApi::mocCppIncluded()
+{
+ // Initial build.
+ qbs::ErrorInfo errorInfo = doBuildProject("moc-hpp-included/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ // Touch header and try again.
+ waitForNewTimestamp();
+ QFile headerFile("object.h");
+ QVERIFY2(headerFile.open(QIODevice::WriteOnly | QIODevice::Append),
+ qPrintable(headerFile.errorString()));
+ headerFile.write("\n");
+ headerFile.close();
+ errorInfo = doBuildProject("moc-hpp-included/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ // Touch cpp file and try again.
+ waitForNewTimestamp();
+ QFile cppFile("object.cpp");
+ QVERIFY2(cppFile.open(QIODevice::WriteOnly | QIODevice::Append),
+ qPrintable(cppFile.errorString()));
+ cppFile.write("\n");
+ cppFile.close();
+ errorInfo = doBuildProject("moc-hpp-included/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
void TestApi::multiArch()
{
qbs::SetupProjectParameters setupParams = defaultSetupParameters("multi-arch/project.qbs");
@@ -660,7 +1021,7 @@ void TestApi::multiArch()
waitForFinished(setupJob.data());
QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
qbs::Project project = setupJob->project();
- QCOMPARE(project.profile(), QLatin1String("qbs_autotests"));
+ QCOMPARE(project.profile(), profileName());
const QList<qbs::ProductData> &products = project.projectData().products();
QCOMPARE(products.count(), 3);
QList<qbs::ProductData> hostProducts;
@@ -721,6 +1082,62 @@ void TestApi::multiArch()
qPrintable(setupJob->error().toString()));
}
+void TestApi::newOutputArtifactInDependency()
+{
+ BuildDescriptionReceiver receiver;
+ qbs::ErrorInfo errorInfo
+ = doBuildProject("new-output-artifact-in-dependency/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(receiver.descriptions.contains("linking app"));
+ const QByteArray linkingLibString = QByteArray("linking ")
+ + qbs::Internal::HostOsInfo::dynamicLibraryName("lib").toLatin1();
+ QVERIFY(!receiver.descriptions.contains(linkingLibString));
+ receiver.descriptions.clear();
+
+ waitForNewTimestamp();
+ QFile projectFile("project.qbs");
+ QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
+ QByteArray contents = projectFile.readAll();
+ contents.replace("//Depends", "Depends");
+ projectFile.resize(0);
+ projectFile.write(contents);
+ projectFile.close();
+ errorInfo = doBuildProject("new-output-artifact-in-dependency/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(receiver.descriptions.contains("linking app"));
+ QVERIFY(receiver.descriptions.contains(linkingLibString));
+}
+
+void TestApi::newPatternMatch()
+{
+ TaskReceiver receiver;
+ qbs::ErrorInfo errorInfo = doBuildProject("new-pattern-match/project.qbs", 0, 0, &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(receiver.taskDescriptions.contains("Resolving"), qPrintable(m_logSink->output));
+ receiver.taskDescriptions.clear();
+
+ errorInfo = doBuildProject("new-pattern-match/project.qbs", 0, 0, &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(!receiver.taskDescriptions.contains("Resolving"));
+
+ QFile f("test.txt");
+ QVERIFY2(f.open(QIODevice::WriteOnly), qPrintable(f.errorString()));
+ f.close();
+ errorInfo = doBuildProject("new-pattern-match/project.qbs", 0, 0, &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(receiver.taskDescriptions.contains("Resolving"));
+ receiver.taskDescriptions.clear();
+
+ errorInfo = doBuildProject("new-pattern-match/project.qbs", 0, 0, &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(!receiver.taskDescriptions.contains("Resolving"));
+
+ f.remove();
+ errorInfo = doBuildProject("new-pattern-match/project.qbs", 0, 0, &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY(receiver.taskDescriptions.contains("Resolving"));
+}
+
void TestApi::nonexistingProjectPropertyFromProduct()
{
qbs::SetupProjectParameters setupParams
@@ -750,6 +1167,12 @@ void TestApi::nonexistingProjectPropertyFromCommandLine()
qPrintable(job->error().toString()));
}
+void TestApi::objC()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("objc/objc.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
void TestApi::projectInvalidation()
{
qbs::SetupProjectParameters setupParams
@@ -795,6 +1218,27 @@ void TestApi::projectLocking()
QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
}
+void TestApi::projectWithPropertiesItem()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("project-with-properties-item/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::propertiesBlocks()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("properties-blocks/propertiesblocks.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::rc()
+{
+ BuildDescriptionReceiver receiver;
+ const qbs::ErrorInfo errorInfo = doBuildProject("rc/rc.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ const bool rcFileWasCompiled = receiver.descriptions.contains("compiling test.rc");
+ QCOMPARE(rcFileWasCompiled, qbs::Internal::HostOsInfo::isWindowsHost());
+}
+
qbs::SetupProjectParameters TestApi::defaultSetupParameters(const QString &projectFilePath) const
{
qbs::SetupProjectParameters setupParams;
@@ -807,11 +1251,10 @@ qbs::SetupProjectParameters TestApi::defaultSetupParameters(const QString &proje
const QString qbsRootPath = QDir::cleanPath(QCoreApplication::applicationDirPath()
+ QLatin1String("/../"));
qbs::Settings settings((QString()));
- const QString profileName = QLatin1String("qbs_autotests");
- const qbs::Preferences prefs(&settings, profileName);
+ const qbs::Preferences prefs(&settings, profileName());
setupParams.setSearchPaths(prefs.searchPaths(qbsRootPath));
setupParams.setPluginPaths(prefs.pluginPaths(qbsRootPath + QLatin1String("/lib")));
- setupParams.setTopLevelProfile(profileName);
+ setupParams.setTopLevelProfile(profileName());
setupParams.setBuildVariant(QLatin1String("debug"));
return setupParams;
}
@@ -845,6 +1288,125 @@ void TestApi::references()
QCOMPARE(subProjectFileName, QString("p.qbs"));
}
+void TestApi::renameProduct()
+{
+ // Initial run.
+ qbs::ErrorInfo errorInfo = doBuildProject("rename-product/rename.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ // Rename lib and adapt Depends item.
+ waitForNewTimestamp();
+ QFile f("rename.qbs");
+ QVERIFY(f.open(QIODevice::ReadWrite));
+ QByteArray contents = f.readAll();
+ contents.replace("TheLib", "thelib");
+ f.resize(0);
+ f.write(contents);
+ f.close();
+ errorInfo = doBuildProject("rename-product/rename.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ // Rename lib and don't adapt Depends item.
+ waitForNewTimestamp();
+ QVERIFY(f.open(QIODevice::ReadWrite));
+ contents = f.readAll();
+ const int libNameIndex = contents.lastIndexOf("thelib");
+ QVERIFY(libNameIndex != -1);
+ contents.replace(libNameIndex, 6, "TheLib");
+ f.resize(0);
+ f.write(contents);
+ f.close();
+ errorInfo = doBuildProject("rename-product/rename.qbs");
+ QVERIFY(errorInfo.hasError());
+ QVERIFY2(errorInfo.toString().contains("Product dependency 'thelib' not found"),
+ qPrintable(errorInfo.toString()));
+}
+
+void TestApi::renameTargetArtifact()
+{
+ // Initial run.
+ BuildDescriptionReceiver receiver;
+ qbs::ErrorInfo errorInfo = doBuildProject("rename-target-artifact/rename.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(receiver.descriptions.contains("compiling"), qPrintable(receiver.descriptions));
+ QCOMPARE(receiver.descriptions.count("linking"), 2);
+ receiver.descriptions.clear();
+
+ // Rename library file name.
+ waitForNewTimestamp();
+ QFile f("rename.qbs");
+ QVERIFY(f.open(QIODevice::ReadWrite));
+ QByteArray contents = f.readAll();
+ contents.replace("the_lib", "TheLib");
+ f.resize(0);
+ f.write(contents);
+ f.close();
+ errorInfo = doBuildProject("rename-target-artifact/rename.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(!receiver.descriptions.contains("compiling"), qPrintable(receiver.descriptions));
+ QCOMPARE(receiver.descriptions.count("linking"), 2);
+}
+
+void TestApi::removeFileDependency()
+{
+ qbs::ErrorInfo errorInfo = doBuildProject("remove-file-dependency/removeFileDependency.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ QFile::remove("someheader.h");
+ ProcessResultReceiver receiver;
+ errorInfo = doBuildProject("remove-file-dependency/removeFileDependency.qbs", 0, &receiver);
+ QVERIFY(errorInfo.hasError());
+ QVERIFY2(receiver.output.contains("someheader.h"), qPrintable(receiver.output));
+}
+
+void TestApi::resolveProject()
+{
+ QFETCH(QString, projectSubDir);
+ QFETCH(QString, productFileName);
+
+ const qbs::SetupProjectParameters params
+ = defaultSetupParameters(projectSubDir + "/project.qbs");
+ removeBuildDir(params);
+ const QScopedPointer<qbs::SetupProjectJob> setupJob(qbs::Project().setupProject(params,
+ m_logSink, 0));
+ waitForFinished(setupJob.data());
+ VERIFY_NO_ERROR(setupJob->error());
+ QVERIFY2(!QFile::exists(productFileName), qPrintable(productFileName));
+ QVERIFY(regularFileExists(relativeBuildGraphFilePath()));
+}
+
+void TestApi::resolveProject_data()
+{
+ return buildProject_data();
+}
+
+void TestApi::resolveProjectDryRun()
+{
+ QFETCH(QString, projectSubDir);
+ QFETCH(QString, productFileName);
+
+ qbs::SetupProjectParameters params = defaultSetupParameters(projectSubDir + "/project.qbs");
+ params.setDryRun(true);
+ removeBuildDir(params);
+ const QScopedPointer<qbs::SetupProjectJob> setupJob(qbs::Project().setupProject(params,
+ m_logSink, 0));
+ waitForFinished(setupJob.data());
+ VERIFY_NO_ERROR(setupJob->error());
+ QVERIFY2(!QFile::exists(productFileName), qPrintable(productFileName));
+ QVERIFY(!regularFileExists(relativeBuildGraphFilePath()));
+}
+
+void TestApi::resolveProjectDryRun_data()
+{
+ return resolveProject_data();
+}
+
+void TestApi::softDependency()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("soft-dependency/project.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
void TestApi::sourceFileInBuildDir()
{
qbs::SetupProjectParameters setupParams
@@ -856,12 +1418,167 @@ void TestApi::sourceFileInBuildDir()
const qbs::ProjectData projectData = job->project().projectData();
QCOMPARE(projectData.allProducts().count(), 1);
const qbs::ProductData product = projectData.allProducts().first();
- QCOMPARE(product.profile(), QLatin1String("qbs_autotests"));
+ QCOMPARE(product.profile(), profileName());
QCOMPARE(product.groups().count(), 1);
const qbs::GroupData group = product.groups().first();
QCOMPARE(group.allFilePaths().count(), 1);
}
+void TestApi::subProjects()
+{
+ const qbs::SetupProjectParameters params
+ = defaultSetupParameters("subprojects/toplevelproject.qbs");
+ removeBuildDir(params);
+
+ // Check all three types of subproject creation, plus property overrides.
+ qbs::ErrorInfo errorInfo = doBuildProject("subprojects/toplevelproject.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ // Disabling both the project with the dependency and the one with the dependent
+ // should not cause an error.
+ waitForNewTimestamp();
+ QFile f(params.projectFilePath());
+ QVERIFY(f.open(QIODevice::ReadWrite));
+ QByteArray contents = f.readAll();
+ contents.replace("condition: true", "condition: false");
+ f.resize(0);
+ f.write(contents);
+ f.close();
+ f.setFileName(params.buildRoot() + "/subproject2/subproject2.qbs");
+ QVERIFY(f.open(QIODevice::ReadWrite));
+ contents = f.readAll();
+ contents.replace("condition: true", "condition: false");
+ f.resize(0);
+ f.write(contents);
+ f.close();
+ errorInfo = doBuildProject("subprojects/toplevelproject.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ // Disabling the project with the dependency only is an error.
+ // This tests also whether changes in sub-projects are detected.
+ waitForNewTimestamp();
+ f.setFileName(params.projectFilePath());
+ QVERIFY(f.open(QIODevice::ReadWrite));
+ contents = f.readAll();
+ contents.replace("condition: false", "condition: true");
+ f.resize(0);
+ f.write(contents);
+ f.close();
+ errorInfo = doBuildProject("subprojects/toplevelproject.qbs");
+ QVERIFY(errorInfo.hasError());
+ QVERIFY2(errorInfo.toString().contains("Product dependency 'testLib' not found"),
+ qPrintable(errorInfo.toString()));
+}
+
+void TestApi::trackAddQObjectHeader()
+{
+ const qbs::SetupProjectParameters params
+ = defaultSetupParameters("missing-qobject-header/missingheader.qbs");
+ QFile qbsFile(params.projectFilePath());
+ QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
+ qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n"
+ " files: ['main.cpp', 'myobject.cpp']\n}");
+ qbsFile.close();
+ ProcessResultReceiver receiver;
+ qbs::ErrorInfo errorInfo
+ = doBuildProject("missing-qobject-header/missingheader.qbs", 0, &receiver);
+ QVERIFY(errorInfo.hasError());
+ QVERIFY2(isAboutUndefinedSymbols(receiver.output), qPrintable(receiver.output));
+
+ waitForNewTimestamp();
+ QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
+ qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n"
+ " files: ['main.cpp', 'myobject.cpp','myobject.h']\n}");
+ qbsFile.close();
+ errorInfo = doBuildProject("missing-qobject-header/missingheader.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::trackRemoveQObjectHeader()
+{
+ const qbs::SetupProjectParameters params
+ = defaultSetupParameters("missing-qobject-header/missingheader.qbs");
+ removeBuildDir(params);
+ QFile qbsFile(params.projectFilePath());
+ QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
+ qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n"
+ " files: ['main.cpp', 'myobject.cpp','myobject.h']\n}");
+ qbsFile.close();
+ qbs::ErrorInfo errorInfo = doBuildProject("missing-qobject-header/missingheader.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+
+ waitForNewTimestamp();
+ QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
+ qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n"
+ " files: ['main.cpp', 'myobject.cpp']\n}");
+ qbsFile.close();
+ ProcessResultReceiver receiver;
+ errorInfo = doBuildProject("missing-qobject-header/missingheader.qbs", 0, &receiver);
+ QVERIFY(errorInfo.hasError());
+ QVERIFY2(isAboutUndefinedSymbols(receiver.output), qPrintable(receiver.output));
+}
+
+void TestApi::transformers()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("transformers/transformers.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+void TestApi::typeChange()
+{
+ BuildDescriptionReceiver receiver;
+ qbs::ErrorInfo errorInfo = doBuildProject("type-change/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(!receiver.descriptions.contains("compiling"), qPrintable(receiver.descriptions));
+
+ waitForNewTimestamp();
+ QFile projectFile("project.qbs");
+ QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
+ QByteArray content = projectFile.readAll();
+ content.replace("//", "");
+ projectFile.resize(0);
+ projectFile.write(content);
+ projectFile.close();
+ errorInfo = doBuildProject("type-change/project.qbs", &receiver);
+ VERIFY_NO_ERROR(errorInfo);
+ QVERIFY2(receiver.descriptions.contains("compiling"), qPrintable(receiver.descriptions));
+}
+
+void TestApi::uic()
+{
+ const qbs::ErrorInfo errorInfo = doBuildProject("uic/uic.qbs");
+ VERIFY_NO_ERROR(errorInfo);
+}
+
+
+qbs::ErrorInfo TestApi::doBuildProject(const QString &projectFilePath,
+ QObject *buildDescriptionReceiver, QObject *procResultReceiver, QObject *taskReceiver,
+ const qbs::BuildOptions &options)
+{
+ qbs::SetupProjectParameters params = defaultSetupParameters(projectFilePath);
+ params.setDryRun(options.dryRun());
+ const QScopedPointer<qbs::SetupProjectJob> setupJob(qbs::Project().setupProject(params,
+ m_logSink, 0));
+ if (taskReceiver) {
+ connect(setupJob.data(), SIGNAL(taskStarted(QString,int,qbs::AbstractJob*)), taskReceiver,
+ SLOT(handleTaskStart(QString)));
+ }
+ waitForFinished(setupJob.data());
+ if (setupJob->error().hasError())
+ return setupJob->error();
+ const QScopedPointer<qbs::BuildJob> buildJob(setupJob->project().buildAllProducts(options));
+ if (buildDescriptionReceiver) {
+ connect(buildJob.data(), SIGNAL(reportCommandDescription(QString,QString)),
+ buildDescriptionReceiver, SLOT(handleDescription(QString,QString)));
+ }
+ if (procResultReceiver) {
+ connect(buildJob.data(), SIGNAL(reportProcessResult(qbs::ProcessResult)),
+ procResultReceiver, SLOT(handleProcessResult(qbs::ProcessResult)));
+ }
+ waitForFinished(buildJob.data());
+ return buildJob->error();
+}
+
QTEST_MAIN(TestApi)
#include "tst_api.moc"
diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h
index 3160c6bf4..098bbf0ed 100644
--- a/tests/auto/api/tst_api.h
+++ b/tests/auto/api/tst_api.h
@@ -30,9 +30,14 @@
#ifndef QBS_TST_API_H
#define QBS_TST_API_H
+#include <tools/buildoptions.h>
+
#include <QObject>
-namespace qbs { class SetupProjectParameters; }
+namespace qbs {
+class ErrorInfo;
+class SetupProjectParameters;
+}
class LogSink;
@@ -47,29 +52,76 @@ public:
private slots:
void initTestCase();
+ void addQObjectMacroToCppFile();
+ void addedFilePersistent();
+ void baseProperties();
void buildGraphLocking();
+ void buildProject();
+ void buildProject_data();
+ void buildProjectDryRun();
+ void buildProjectDryRun_data();
void buildSingleFile();
#ifdef QBS_ENABLE_PROJECT_FILE_UPDATES
void changeContent();
#endif
+ void changeDependentLib();
void disabledInstallGroup();
+ void disabledProduct();
+ void disabledProject();
+ void disableProduct();
+ void duplicateProductNames();
+ void duplicateProductNames_data();
+ void dynamicLibs();
+ void emptyFileTagList();
+ void emptySubmodulesList();
+ void explicitlyDependsOn();
+ void exportSimple();
+ void exportWithRecursiveDepends();
+ void fileTagger();
void fileTagsFilterOverride();
void infiniteLoopBuilding();
void infiniteLoopBuilding_data();
void infiniteLoopResolving();
+ void inheritQbsSearchPaths();
void installableFiles();
void isRunnable();
void listBuildSystemFiles();
+ void mocCppIncluded();
void multiArch();
+ void newOutputArtifactInDependency();
+ void newPatternMatch();
void nonexistingProjectPropertyFromProduct();
void nonexistingProjectPropertyFromCommandLine();
+ void objC();
void projectInvalidation();
void projectLocking();
+ void projectWithPropertiesItem();
+ void propertiesBlocks();
+ void rc();
void references();
+ void renameProduct();
+ void renameTargetArtifact();
+ void removeFileDependency();
+ void resolveProject();
+ void resolveProject_data();
+ void resolveProjectDryRun();
+ void resolveProjectDryRun_data();
+ void softDependency();
void sourceFileInBuildDir();
+ void subProjects();
+ void trackAddQObjectHeader();
+ void trackRemoveQObjectHeader();
+ void transformers();
+ void typeChange();
+ void uic();
private:
qbs::SetupProjectParameters defaultSetupParameters(const QString &projectFilePath) const;
+ qbs::ErrorInfo doBuildProject(const QString &projectFilePath,
+ QObject *buildDescriptionReceiver = 0,
+ QObject *procResultReceiver = 0,
+ QObject *taskReceiver = 0,
+ const qbs::BuildOptions &options = qbs::BuildOptions());
LogSink * const m_logSink;
const QString m_sourceDataDir;
diff --git a/tests/auto/blackbox/testdata/subprojects/resources/imports/LibraryType/type.js b/tests/auto/blackbox/testdata/subprojects/resources/imports/LibraryType/type.js
deleted file mode 100644
index cb07f8e5b..000000000
--- a/tests/auto/blackbox/testdata/subprojects/resources/imports/LibraryType/type.js
+++ /dev/null
@@ -1 +0,0 @@
-function type() { return "dynamiclibrary"; }
diff --git a/tests/auto/blackbox/testdata/subprojects/resources/modules/QtCoreDepender/qtcoredepender.qbs b/tests/auto/blackbox/testdata/subprojects/resources/modules/QtCoreDepender/qtcoredepender.qbs
deleted file mode 100644
index 03d649309..000000000
--- a/tests/auto/blackbox/testdata/subprojects/resources/modules/QtCoreDepender/qtcoredepender.qbs
+++ /dev/null
@@ -1,5 +0,0 @@
-import qbs
-
-Module {
- Depends { name: "Qt.core" }
-}
diff --git a/tests/auto/blackbox/testdata/subprojects/subproject1/main.cpp b/tests/auto/blackbox/testdata/subprojects/subproject1/main.cpp
deleted file mode 100644
index 6a0bac9f1..000000000
--- a/tests/auto/blackbox/testdata/subprojects/subproject1/main.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-void f();
-
-int main()
-{
- f();
-}
diff --git a/tests/auto/blackbox/testdata/subprojects/subproject2/subproject2.qbs b/tests/auto/blackbox/testdata/subprojects/subproject2/subproject2.qbs
deleted file mode 100644
index 183df4dac..000000000
--- a/tests/auto/blackbox/testdata/subprojects/subproject2/subproject2.qbs
+++ /dev/null
@@ -1,15 +0,0 @@
-import qbs
-
-Project {
- name: "subproject2"
- property string libNamePrefix: "test"
- SubProject {
- filePath: "subproject3/subproject3.qbs"
- inheritProperties: true
- Properties {
- name: "overridden name"
- condition: true
- libNameSuffix: "Lib"
- }
- }
-}
diff --git a/tests/auto/blackbox/testdata/subprojects/subproject2/subproject3/subproject3.qbs b/tests/auto/blackbox/testdata/subprojects/subproject2/subproject3/subproject3.qbs
deleted file mode 100644
index acdf1d7e6..000000000
--- a/tests/auto/blackbox/testdata/subprojects/subproject2/subproject3/subproject3.qbs
+++ /dev/null
@@ -1,16 +0,0 @@
-import qbs
-import LibraryType
-
-Project {
- condition: false
- property string libNameSuffix: "blubb"
- Product {
- name: project.libNamePrefix + project.libNameSuffix
- type: LibraryType.type()
- Depends { name: "cpp" }
- Depends { name: "QtCoreDepender" }
- cpp.defines: "MY_EXPORT=Q_DECL_EXPORT"
- files: "testlib.cpp"
- Export { Depends { name: "Qt.core" } }
- }
-}
diff --git a/tests/auto/blackbox/testdata/subprojects/subproject2/subproject3/testlib.cpp b/tests/auto/blackbox/testdata/subprojects/subproject2/subproject3/testlib.cpp
deleted file mode 100644
index 398034cb3..000000000
--- a/tests/auto/blackbox/testdata/subprojects/subproject2/subproject3/testlib.cpp
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <QtGlobal>
-
-MY_EXPORT void f() {}
diff --git a/tests/auto/blackbox/testdata/subprojects/toplevelproject.qbs b/tests/auto/blackbox/testdata/subprojects/toplevelproject.qbs
deleted file mode 100644
index f167ccabc..000000000
--- a/tests/auto/blackbox/testdata/subprojects/toplevelproject.qbs
+++ /dev/null
@@ -1,19 +0,0 @@
-import qbs
-
-Project {
- name: "top level project"
- references: ["subproject2"]
-
- Project {
- condition: true
- name: "app-project"
- CppApplication {
- name: "app"
- Depends { name: "testLib" }
- cpp.defines: "MY_EXPORT="
- files: "subproject1/main.cpp"
- }
- }
-
- qbsSearchPaths: ["resources"]
-}
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 3f48f0103..667583ec6 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -54,12 +54,6 @@ using qbs::Internal::removeDirectoryWithContents;
using qbs::Profile;
using qbs::Settings;
-static bool regularFileExists(const QString &filePath)
-{
- const QFileInfo fi(filePath);
- return fi.exists() && fi.isFile();
-}
-
static QString initQbsExecutableFilePath()
{
QString filePath = QCoreApplication::applicationDirPath() + QLatin1String("/qbs");
@@ -71,10 +65,7 @@ TestBlackbox::TestBlackbox()
: testDataDir(QCoreApplication::applicationDirPath() + "/../tests/auto/blackbox/testWorkDir"),
testSourceDir(QDir::cleanPath(SRCDIR "/testdata")),
qbsExecutableFilePath(initQbsExecutableFilePath()),
- buildProfileName(QLatin1String("qbs_autotests")),
- buildDir(buildProfileName + QLatin1String("-debug")),
- defaultInstallRoot(buildDir + QLatin1Char('/') + InstallOptions::defaultInstallRoot()),
- buildGraphPath(buildDir + QLatin1Char('/') + buildDir + QLatin1String(".bg"))
+ defaultInstallRoot(relativeBuildDir() + QLatin1Char('/') + InstallOptions::defaultInstallRoot())
{
QLocale::setDefault(QLocale::c());
}
@@ -92,7 +83,7 @@ int TestBlackbox::runQbs(const QbsRunParameters &params)
}
args << params.arguments;
if (params.useProfile)
- args.append(QLatin1String("profile:") + buildProfileName);
+ args.append(QLatin1String("profile:") + profileName());
QString cmdLine = qbsExecutableFilePath;
foreach (const QString &str, args)
cmdLine += QLatin1String(" \"") + str + QLatin1Char('"');
@@ -178,17 +169,17 @@ void TestBlackbox::initTestCase()
QVERIFY(regularFileExists(qbsExecutableFilePath));
Settings settings((QString()));
- if (!settings.profiles().contains(buildProfileName))
- QFAIL(QByteArray("The build profile '" + buildProfileName.toLocal8Bit() +
+ if (!settings.profiles().contains(profileName()))
+ QFAIL(QByteArray("The build profile '" + profileName().toLocal8Bit() +
"' could not be found. Please set it up on your machine."));
- Profile buildProfile(buildProfileName, &settings);
+ Profile buildProfile(profileName(), &settings);
QVariant qtBinPath = buildProfile.value(QLatin1String("Qt.core.binPath"));
if (!qtBinPath.isValid())
- QFAIL(QByteArray("The build profile '" + buildProfileName.toLocal8Bit() +
+ QFAIL(QByteArray("The build profile '" + profileName().toLocal8Bit() +
"' is not a valid Qt profile."));
if (!QFile::exists(qtBinPath.toString()))
- QFAIL(QByteArray("The build profile '" + buildProfileName.toLocal8Bit() +
+ QFAIL(QByteArray("The build profile '" + profileName().toLocal8Bit() +
"' points to an invalid Qt path."));
// Initialize the test data directory.
@@ -198,192 +189,22 @@ void TestBlackbox::initTestCase()
ccp(testSourceDir, testDataDir);
}
-void TestBlackbox::addedFilePersistent()
-{
- QDir::setCurrent(testDataDir + QLatin1String("/added-file-persistent"));
-
- // On the initial run, linking will fail.
- QbsRunParameters failedRunParams;
- failedRunParams.expectFailure = true;
- QVERIFY(runQbs(failedRunParams) != 0);
-
- // Add a file. qbs must schedule it for rule application on the next build.
- waitForNewTimestamp();
- QFile projectFile("project.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- const QByteArray originalContent = projectFile.readAll();
- QByteArray addedFileContent = originalContent;
- addedFileContent.replace("/* 'file.cpp' */", "'file.cpp'");
- projectFile.resize(0);
- projectFile.write(addedFileContent);
- projectFile.flush();
- QCOMPARE(runQbs(QbsRunParameters("resolve")), 0);
-
- // Remove the file again. qbs must unschedule the rule application again.
- // Consequently, the linking step must fail as in the initial run.
- waitForNewTimestamp();
- projectFile.resize(0);
- projectFile.write(originalContent);
- projectFile.flush();
- QVERIFY(runQbs(failedRunParams) != 0);
-
- // Add the file again. qbs must schedule it for rule application on the next build.
- waitForNewTimestamp();
- projectFile.resize(0);
- projectFile.write(addedFileContent);
- projectFile.close();
- QCOMPARE(runQbs(QbsRunParameters("resolve")), 0);
-
- // qbs must remember that a file was scheduled for rule application. The build must then
- // succeed, as now all necessary symbols are linked in.
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::addQObjectMacroToCppFile()
-{
- QDir::setCurrent(testDataDir + QLatin1String("/add-qobject-macro-to-cpp-file"));
- QCOMPARE(runQbs(), 0);
-
- waitForNewTimestamp();
- QFile cppFile("object.cpp");
- QVERIFY2(cppFile.open(QIODevice::ReadWrite), qPrintable(cppFile.errorString()));
- QByteArray contents = cppFile.readAll();
- contents.replace("// ", "");
- cppFile.resize(0);
- cppFile.write(contents);
- cppFile.close();
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::baseProperties()
-{
- QDir::setCurrent(testDataDir + QLatin1String("/baseProperties"));
- QCOMPARE(runQbs(), 0);
-}
-
void TestBlackbox::buildDirectories()
{
const QString projectDir
= QDir::cleanPath(testDataDir + QLatin1String("/build-directories"));
- const QString projectBuildDir = projectDir + '/' + buildDir;
+ const QString projectBuildDir = projectDir + '/' + relativeBuildDir();
QDir::setCurrent(projectDir);
QCOMPARE(runQbs(QStringList("-qq")), 0);
const QStringList outputLines
= QString::fromLocal8Bit(m_qbsStderr.trimmed()).split('\n', QString::SkipEmptyParts);
QCOMPARE(outputLines.count(), 4);
- QCOMPARE(outputLines.at(0).trimmed(), projectDir + '/' + productBuildDir("p1"));
- QCOMPARE(outputLines.at(1).trimmed(), projectDir + '/' + productBuildDir("p2"));
+ QCOMPARE(outputLines.at(0).trimmed(), projectDir + '/' + relativeProductBuildDir("p1"));
+ QCOMPARE(outputLines.at(1).trimmed(), projectDir + '/' + relativeProductBuildDir("p2"));
QCOMPARE(outputLines.at(2).trimmed(), projectBuildDir);
QCOMPARE(outputLines.at(3).trimmed(), projectDir);
}
-void TestBlackbox::build_project_data()
-{
- QTest::addColumn<QString>("projectSubDir");
- QTest::addColumn<QString>("productFileName");
- QTest::newRow("BPs in Sources")
- << QString("buildproperties_source")
- << executableFilePath("HelloWorld");
- QTest::newRow("code generator")
- << QString("codegen")
- << executableFilePath("codegen");
- QTest::newRow("link static libs")
- << QString("link_staticlib")
- << executableFilePath("HelloWorld");
- QTest::newRow("precompiled header")
- << QString("precompiledHeader")
- << executableFilePath("MyApp");
- QTest::newRow("lots of dots")
- << QString("lotsofdots")
- << executableFilePath("lots.of.dots");
- QTest::newRow("Qt5 plugin")
- << QString("qt5plugin")
- << productBuildDir("echoplugin") + '/' + HostOsInfo::dynamicLibraryName("echoplugin");
- QTest::newRow("Q_OBJECT in source")
- << QString("moc_cpp")
- << executableFilePath("moc_cpp");
- QTest::newRow("Q_OBJECT in header")
- << QString("moc_hpp")
- << executableFilePath("moc_hpp");
- QTest::newRow("Q_OBJECT in header, moc_XXX.cpp included")
- << QString("moc_hpp_included")
- << executableFilePath("moc_hpp_included");
- QTest::newRow("app and lib with same source file")
- << QString("lib_samesource")
- << executableFilePath("HelloWorldApp");
- QTest::newRow("source files with the same base name but different extensions")
- << QString("sameBaseName")
- << executableFilePath("basename");
- QTest::newRow("static library dependencies")
- << QString("staticLibDeps")
- << executableFilePath("staticLibDeps");
- QTest::newRow("simple probes")
- << QString("simpleProbe")
- << executableFilePath("MyApp");
- QTest::newRow("application without sources")
- << QString("appWithoutSources")
- << executableFilePath("appWithoutSources");
-}
-
-void TestBlackbox::build_project()
-{
- QFETCH(QString, projectSubDir);
- QFETCH(QString, productFileName);
- if (!projectSubDir.startsWith('/'))
- projectSubDir.prepend('/');
- QVERIFY2(QFile::exists(testDataDir + projectSubDir), qPrintable(testDataDir + projectSubDir));
- QDir::setCurrent(testDataDir + projectSubDir);
- rmDirR(buildDir);
-
- QCOMPARE(runQbs(), 0);
- QVERIFY2(regularFileExists(productFileName), qPrintable(productFileName));
- QVERIFY(regularFileExists(buildGraphPath));
- QVERIFY2(QFile::remove(productFileName), qPrintable(productFileName));
- waitForNewTimestamp();
- QCOMPARE(runQbs(QbsRunParameters(QStringList("--check-timestamps"))), 0);
- QVERIFY2(regularFileExists(productFileName), qPrintable(productFileName));
- QVERIFY(regularFileExists(buildGraphPath));
-}
-
-void TestBlackbox::build_project_dry_run_data()
-{
- build_project_data();
-}
-
-void TestBlackbox::build_project_dry_run()
-{
- QFETCH(QString, projectSubDir);
- QFETCH(QString, productFileName);
- if (!projectSubDir.startsWith('/'))
- projectSubDir.prepend('/');
- QVERIFY2(QFile::exists(testDataDir + projectSubDir), qPrintable(testDataDir + projectSubDir));
- QDir::setCurrent(testDataDir + projectSubDir);
- rmDirR(buildDir);
-
- QCOMPARE(runQbs(QbsRunParameters(QStringList("-n"))), 0);
- const QStringList &buildDirContents
- = QDir(buildDir).entryList(QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
- QVERIFY2(buildDirContents.isEmpty(), qPrintable(buildDirContents.join(" ")));
-}
-
-void TestBlackbox::changeDependentLib()
-{
- QDir::setCurrent(testDataDir + "/change-dependent-lib");
- QCOMPARE(runQbs(), 0);
- waitForNewTimestamp();
- const QString qbsFileName("change-dependent-lib.qbs");
- QFile qbsFile(qbsFileName);
- QVERIFY(qbsFile.open(QIODevice::ReadWrite));
- const QByteArray content1 = qbsFile.readAll();
- QByteArray content2 = content1;
- content2.replace("cpp.defines: [\"XXXX\"]", "cpp.defines: [\"ABCD\"]");
- QVERIFY(content1 != content2);
- qbsFile.seek(0);
- qbsFile.write(content2);
- qbsFile.close();
- QCOMPARE(runQbs(), 0);
-}
-
void TestBlackbox::changedFiles_data()
{
QTest::addColumn<bool>("useChangedFilesForInitialBuild");
@@ -396,7 +217,7 @@ void TestBlackbox::changedFiles()
QFETCH(bool, useChangedFilesForInitialBuild);
QDir::setCurrent(testDataDir + "/changed-files");
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
const QString changedFile = QDir::cleanPath(QDir::currentPath() + "/file1.cpp");
QbsRunParameters params1;
if (useChangedFilesForInitialBuild)
@@ -424,7 +245,7 @@ void TestBlackbox::dependenciesProperty()
{
QDir::setCurrent(testDataDir + QLatin1String("/dependenciesProperty"));
QCOMPARE(runQbs(), 0);
- QFile depsFile(productBuildDir("product1") + QLatin1String("/product1.deps"));
+ QFile depsFile(relativeProductBuildDir("product1") + QLatin1String("/product1.deps"));
QVERIFY(depsFile.open(QFile::ReadOnly));
QString deps = QString::fromLatin1(depsFile.readAll());
QVERIFY(!deps.isEmpty());
@@ -465,68 +286,11 @@ void TestBlackbox::dependenciesProperty()
QCOMPARE(product2_cpp.property("defines").toString(), QLatin1String("SMURF"));
}
-void TestBlackbox::resolve_project_data()
-{
- return build_project_data();
-}
-
-void TestBlackbox::resolve_project()
-{
- QFETCH(QString, projectSubDir);
- QFETCH(QString, productFileName);
- if (!projectSubDir.startsWith('/'))
- projectSubDir.prepend('/');
- QVERIFY2(QFile::exists(testDataDir + projectSubDir), qPrintable(testDataDir + projectSubDir));
- QDir::setCurrent(testDataDir + projectSubDir);
- rmDirR(buildDir);
-
- QCOMPARE(runQbs(QbsRunParameters("resolve")), 0);
- QVERIFY2(!QFile::exists(productFileName), qPrintable(productFileName));
- QVERIFY(regularFileExists(buildGraphPath));
-}
-
-void TestBlackbox::resolve_project_dry_run_data()
-{
- return resolve_project_data();
-}
-
-void TestBlackbox::resolve_project_dry_run()
-{
- QFETCH(QString, projectSubDir);
- QFETCH(QString, productFileName);
- if (!projectSubDir.startsWith('/'))
- projectSubDir.prepend('/');
- QVERIFY2(QFile::exists(testDataDir + projectSubDir), qPrintable(testDataDir + projectSubDir));
- QDir::setCurrent(testDataDir + projectSubDir);
- rmDirR(buildDir);
-
- QCOMPARE(runQbs(QbsRunParameters(QLatin1String("resolve"), QStringList("-n"))), 0);
- QVERIFY2(!QFile::exists(productFileName), qPrintable(productFileName));
- QVERIFY2(!QFile::exists(buildGraphPath), qPrintable(buildGraphPath));
-}
-
-void TestBlackbox::typeChange()
-{
- QDir::setCurrent(testDataDir + "/type-change");
- QCOMPARE(runQbs(), 0);
- QVERIFY2(!m_qbsStdout.contains("compiling"), m_qbsStdout.constData());
- waitForNewTimestamp();
- QFile projectFile("project.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- QByteArray content = projectFile.readAll();
- content.replace("//", "");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
- QCOMPARE(runQbs(), 0);
- QVERIFY2(m_qbsStdout.contains("compiling"), m_qbsStdout.constData());
-}
-
void TestBlackbox::usingsAsSoleInputsNonMultiplexed()
{
QDir::setCurrent(testDataDir + QLatin1String("/usings-as-sole-inputs-non-multiplexed"));
QCOMPARE(runQbs(), 0);
- const QString p3BuildDir = productBuildDir("p3");
+ const QString p3BuildDir = relativeProductBuildDir("p3");
QVERIFY(regularFileExists(p3BuildDir + "/custom1.out.plus"));
QVERIFY(regularFileExists(p3BuildDir + "/custom2.out.plus"));
}
@@ -538,10 +302,10 @@ static bool symlinkExists(const QString &linkFilePath)
void TestBlackbox::clean()
{
- const QString appObjectFilePath = productBuildDir("app") + "/.obj/main.cpp" + QTC_HOST_OBJECT_SUFFIX;
- const QString appExeFilePath = executableFilePath("app");
- const QString depObjectFilePath = productBuildDir("dep") + "/.obj/dep.cpp" + QTC_HOST_OBJECT_SUFFIX;
- const QString depLibBase = productBuildDir("dep") + '/' + QTC_HOST_DYNAMICLIB_PREFIX + "dep";
+ const QString appObjectFilePath = relativeProductBuildDir("app") + "/.obj/main.cpp" + QTC_HOST_OBJECT_SUFFIX;
+ const QString appExeFilePath = relativeExecutableFilePath("app");
+ const QString depObjectFilePath = relativeProductBuildDir("dep") + "/.obj/dep.cpp" + QTC_HOST_OBJECT_SUFFIX;
+ const QString depLibBase = relativeProductBuildDir("dep") + '/' + QTC_HOST_DYNAMICLIB_PREFIX + "dep";
QString depLibFilePath;
QStringList symlinks;
if (qbs::Internal::HostOsInfo::isOsxHost()) {
@@ -634,47 +398,6 @@ void TestBlackbox::clean()
QVERIFY2(symlinkExists(symLink), qPrintable(symLink));
}
-void TestBlackbox::exportSimple()
-{
- QDir::setCurrent(testDataDir + "/exportSimple");
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::exportWithRecursiveDepends()
-{
- QDir::setCurrent(testDataDir + "/exportWithRecursiveDepends");
- QEXPECT_FAIL("", "currently broken", Abort);
- QbsRunParameters params;
- params.expectFailure = true; // Remove when test no longer fails.
- QCOMPARE(runQbs(params), 0);
-}
-
-void TestBlackbox::fileTagger()
-{
- QDir::setCurrent(testDataDir + "/fileTagger");
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("moc bla.cpp"));
-}
-
-void TestBlackbox::rc()
-{
- QDir::setCurrent(testDataDir + "/rc");
- QCOMPARE(runQbs(), 0);
- const bool rcFileWasCompiled = m_qbsStdout.contains("compiling test.rc");
- QCOMPARE(rcFileWasCompiled, HostOsInfo::isWindowsHost());
-}
-
-void TestBlackbox::removeFileDependency()
-{
- QDir::setCurrent(testDataDir + "/removeFileDependency");
- QCOMPARE(runQbs(), 0);
- QFile::remove("someheader.h");
- QbsRunParameters params;
- params.expectFailure = true;
- QVERIFY(runQbs(params) != 0);
- QVERIFY(m_qbsStdout.contains("compiling main.cpp"));
-}
-
void TestBlackbox::renameDependency()
{
QDir::setCurrent(testDataDir + "/renameDependency");
@@ -695,114 +418,11 @@ void TestBlackbox::renameDependency()
QVERIFY(m_qbsStdout.contains("compiling main.cpp"));
}
-void TestBlackbox::renameProduct()
-{
- QDir::setCurrent(testDataDir + "/renameProduct");
-
- // Initial run.
- QCOMPARE(runQbs(), 0);
-
- // Rename lib and adapt Depends item.
- waitForNewTimestamp();
- QFile f("rename.qbs");
- QVERIFY(f.open(QIODevice::ReadWrite));
- QByteArray contents = f.readAll();
- contents.replace("TheLib", "thelib");
- f.resize(0);
- f.write(contents);
- f.close();
- QCOMPARE(runQbs(), 0);
-
- // Rename lib and don't adapt Depends item.
- waitForNewTimestamp();
- QVERIFY(f.open(QIODevice::ReadWrite));
- contents = f.readAll();
- const int libNameIndex = contents.lastIndexOf("thelib");
- QVERIFY(libNameIndex != -1);
- contents.replace(libNameIndex, 6, "TheLib");
- f.resize(0);
- f.write(contents);
- f.close();
- QbsRunParameters params;
- params.expectFailure = true;
- QVERIFY(runQbs(params) != 0);
-}
-
-void TestBlackbox::renameTargetArtifact()
-{
- QDir::setCurrent(testDataDir + "/renameTargetArtifact");
-
- // Initial run.
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("compiling"));
- QCOMPARE(m_qbsStdout.count("linking"), 2);
-
- // Rename library file name.
- waitForNewTimestamp();
- QFile f("rename.qbs");
- QVERIFY(f.open(QIODevice::ReadWrite));
- QByteArray contents = f.readAll();
- contents.replace("the_lib", "TheLib");
- f.resize(0);
- f.write(contents);
- f.close();
- QCOMPARE(runQbs(), 0);
- QVERIFY(!m_qbsStdout.contains("compiling"));
- QCOMPARE(m_qbsStdout.count("linking"), 2);
-}
-
-void TestBlackbox::softDependency()
-{
- QDir::setCurrent(testDataDir + "/soft-dependency");
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::subProjects()
-{
- QDir::setCurrent(testDataDir + "/subprojects");
-
- // Check all three types of subproject creation, plus property overrides.
- QCOMPARE(runQbs(), 0);
-
- // Disabling both the project with the dependency and the one with the dependent
- // should not cause an error.
- waitForNewTimestamp();
- QFile f(testDataDir + "/subprojects/toplevelproject.qbs");
- QVERIFY(f.open(QIODevice::ReadWrite));
- QByteArray contents = f.readAll();
- contents.replace("condition: true", "condition: false");
- f.resize(0);
- f.write(contents);
- f.close();
- f.setFileName(testDataDir + "/subprojects/subproject2/subproject2.qbs");
- QVERIFY(f.open(QIODevice::ReadWrite));
- contents = f.readAll();
- contents.replace("condition: true", "condition: false");
- f.resize(0);
- f.write(contents);
- f.close();
- QCOMPARE(runQbs(), 0);
-
- // Disabling the project with the dependency only is an error.
- // This tests also whether changes in sub-projects are detected.
- waitForNewTimestamp();
- f.setFileName(testDataDir + "/subprojects/toplevelproject.qbs");
- QVERIFY(f.open(QIODevice::ReadWrite));
- contents = f.readAll();
- contents.replace("condition: false", "condition: true");
- f.resize(0);
- f.write(contents);
- f.close();
- QbsRunParameters params;
- params.expectFailure = true;
- QVERIFY(runQbs(params) != 0);
-}
-
void TestBlackbox::track_qrc()
{
QDir::setCurrent(testDataDir + "/qrc");
QCOMPARE(runQbs(), 0);
- const QString fileName = executableFilePath("i");
+ const QString fileName = relativeExecutableFilePath("i");
QVERIFY2(regularFileExists(fileName), qPrintable(fileName));
QDateTime dt = QFileInfo(fileName).lastModified();
QTest::qSleep(2020);
@@ -823,9 +443,9 @@ void TestBlackbox::track_qobject_change()
QDir::setCurrent(testDataDir + "/trackQObjChange");
copyFileAndUpdateTimestamp("bla_qobject.h", "bla.h");
QCOMPARE(runQbs(), 0);
- const QString productFilePath = executableFilePath("i");
+ const QString productFilePath = relativeExecutableFilePath("i");
QVERIFY2(regularFileExists(productFilePath), qPrintable(productFilePath));
- QString moc_bla_objectFileName = productBuildDir("i")
+ QString moc_bla_objectFileName = relativeProductBuildDir("i")
+ "/.obj/GeneratedFiles/moc_bla.cpp" QTC_HOST_OBJECT_SUFFIX;
QVERIFY2(regularFileExists(moc_bla_objectFileName), qPrintable(moc_bla_objectFileName));
@@ -848,14 +468,14 @@ void TestBlackbox::trackAddFile()
QDir::setCurrent(testDataDir + "/trackAddFile/work");
QCOMPARE(runQbs(), 0);
- process.start(executableFilePath("someapp"));
+ process.start(relativeExecutableFilePath("someapp"));
QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
QVERIFY2(process.waitForFinished(), qPrintable(process.errorString()));
QCOMPARE(process.exitCode(), 0);
output = process.readAllStandardOutput().split('\n');
QCOMPARE(output.takeFirst().trimmed().constData(), "Hello World!");
QCOMPARE(output.takeFirst().trimmed().constData(), "NARF!");
- QString unchangedObjectFile = buildDir + "/someapp/narf.cpp" QTC_HOST_OBJECT_SUFFIX;
+ QString unchangedObjectFile = relativeBuildDir() + "/someapp/narf.cpp" QTC_HOST_OBJECT_SUFFIX;
QDateTime unchangedObjectFileTime1 = QFileInfo(unchangedObjectFile).lastModified();
waitForNewTimestamp();
@@ -864,7 +484,7 @@ void TestBlackbox::trackAddFile()
touch("main.cpp");
QCOMPARE(runQbs(), 0);
- process.start(executableFilePath("someapp"));
+ process.start(relativeExecutableFilePath("someapp"));
QVERIFY(process.waitForStarted());
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitCode(), 0);
@@ -895,7 +515,7 @@ void TestBlackbox::trackExternalProductChanges()
QVERIFY(!m_qbsStdout.contains("compiling jsFileChange.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling fileExists.cpp"));
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
QCOMPARE(runQbs(), 0);
QVERIFY(m_qbsStdout.contains("compiling main.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling environmentChange.cpp"));
@@ -916,7 +536,7 @@ void TestBlackbox::trackExternalProductChanges()
QVERIFY(m_qbsStdout.contains("compiling jsFileChange.cpp"));
QVERIFY(!m_qbsStdout.contains("compiling fileExists.cpp"));
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
QVERIFY(jsFile.open(QIODevice::ReadWrite));
jsCode = jsFile.readAll();
jsCode.replace("['jsFileChange.cpp']", "[]");
@@ -953,7 +573,7 @@ void TestBlackbox::trackRemoveFile()
QDir::setCurrent(testDataDir + "/trackAddFile/work");
QCOMPARE(runQbs(), 0);
- process.start(executableFilePath("someapp"));
+ process.start(relativeExecutableFilePath("someapp"));
QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
QVERIFY2(process.waitForFinished(), qPrintable(process.errorString()));
QCOMPARE(process.exitCode(), 0);
@@ -961,7 +581,7 @@ void TestBlackbox::trackRemoveFile()
QCOMPARE(output.takeFirst().trimmed().constData(), "Hello World!");
QCOMPARE(output.takeFirst().trimmed().constData(), "NARF!");
QCOMPARE(output.takeFirst().trimmed().constData(), "ZORT!");
- QString unchangedObjectFile = buildDir + "/someapp/narf.cpp" QTC_HOST_OBJECT_SUFFIX;
+ QString unchangedObjectFile = relativeBuildDir() + "/someapp/narf.cpp" QTC_HOST_OBJECT_SUFFIX;
QDateTime unchangedObjectFileTime1 = QFileInfo(unchangedObjectFile).lastModified();
waitForNewTimestamp();
@@ -977,7 +597,7 @@ void TestBlackbox::trackRemoveFile()
touch("project.qbs");
QCOMPARE(runQbs(), 0);
- process.start(executableFilePath("someapp"));
+ process.start(relativeExecutableFilePath("someapp"));
QVERIFY(process.waitForStarted());
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitCode(), 0);
@@ -990,7 +610,7 @@ void TestBlackbox::trackRemoveFile()
QCOMPARE(unchangedObjectFileTime1, unchangedObjectFileTime2);
// the object file for the removed cpp file should have vanished too
- QCOMPARE(regularFileExists(buildDir + "/someapp/zort.cpp" QTC_HOST_OBJECT_SUFFIX), false);
+ QCOMPARE(regularFileExists(relativeBuildDir() + "/someapp/zort.cpp" QTC_HOST_OBJECT_SUFFIX), false);
}
void TestBlackbox::trackAddFileTag()
@@ -1005,7 +625,7 @@ void TestBlackbox::trackAddFileTag()
QDir::setCurrent(testDataDir + "/trackFileTags/work");
QCOMPARE(runQbs(), 0);
- process.start(executableFilePath("someapp"));
+ process.start(relativeExecutableFilePath("someapp"));
QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
QVERIFY2(process.waitForFinished(), qPrintable(process.errorString()));
QCOMPARE(process.exitCode(), 0);
@@ -1018,7 +638,7 @@ void TestBlackbox::trackAddFileTag()
touch("project.qbs");
QCOMPARE(runQbs(), 0);
- process.start(executableFilePath("someapp"));
+ process.start(relativeExecutableFilePath("someapp"));
QVERIFY(process.waitForStarted());
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitCode(), 0);
@@ -1039,12 +659,12 @@ void TestBlackbox::trackRemoveFileTag()
QCOMPARE(runQbs(), 0);
// check if the artifacts are here that will become stale in the 2nd step
- QVERIFY(regularFileExists(productBuildDir("someapp")
+ QVERIFY(regularFileExists(relativeProductBuildDir("someapp")
+ "/.obj/main_foo.cpp" QTC_HOST_OBJECT_SUFFIX));
- QVERIFY(regularFileExists(productBuildDir("someapp") + "/main_foo.cpp"));
- QVERIFY(regularFileExists(productBuildDir("someapp") + "/main.foo"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("someapp") + "/main_foo.cpp"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("someapp") + "/main.foo"));
- process.start(executableFilePath("someapp"));
+ process.start(relativeExecutableFilePath("someapp"));
QVERIFY(process.waitForStarted());
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitCode(), 0);
@@ -1057,7 +677,7 @@ void TestBlackbox::trackRemoveFileTag()
touch("project.qbs");
QCOMPARE(runQbs(), 0);
- process.start(executableFilePath("someapp"));
+ process.start(relativeExecutableFilePath("someapp"));
QVERIFY(process.waitForStarted());
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitCode(), 0);
@@ -1065,9 +685,9 @@ void TestBlackbox::trackRemoveFileTag()
QCOMPARE(output.takeFirst().trimmed().constData(), "there's no foo here");
// check if stale artifacts have been removed
- QCOMPARE(regularFileExists(productBuildDir("someapp") + "/.obj/main_foo.cpp" QTC_HOST_OBJECT_SUFFIX), false);
- QCOMPARE(regularFileExists(productBuildDir("someapp") + "/main_foo.cpp"), false);
- QCOMPARE(regularFileExists(productBuildDir("someapp") + "/main.foo"), false);
+ QCOMPARE(regularFileExists(relativeProductBuildDir("someapp") + "/.obj/main_foo.cpp" QTC_HOST_OBJECT_SUFFIX), false);
+ QCOMPARE(regularFileExists(relativeProductBuildDir("someapp") + "/main_foo.cpp"), false);
+ QCOMPARE(regularFileExists(relativeProductBuildDir("someapp") + "/main.foo"), false);
}
void TestBlackbox::trackAddMocInclude()
@@ -1147,18 +767,6 @@ void TestBlackbox::trackRemoveProduct()
QVERIFY(!m_qbsStdout.contains("linking product3"));
}
-void TestBlackbox::transformers()
-{
- QDir::setCurrent(testDataDir + "/transformers");
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::uic()
-{
- QDir::setCurrent(testDataDir + "/uic");
- QCOMPARE(runQbs(), 0);
-}
-
void TestBlackbox::wildcardRenaming()
{
QDir::setCurrent(testDataDir + "/wildcard_renaming");
@@ -1196,10 +804,10 @@ void TestBlackbox::ruleConditions()
{
QDir::setCurrent(testDataDir + "/ruleConditions");
QCOMPARE(runQbs(), 0);
- QVERIFY(QFileInfo(executableFilePath("zorted")).exists());
- QVERIFY(QFileInfo(executableFilePath("unzorted")).exists());
- QVERIFY(QFileInfo(productBuildDir("zorted") + "/zorted.foo.narf.zort").exists());
- QVERIFY(!QFileInfo(productBuildDir("unzorted") + "/unzorted.foo.narf.zort").exists());
+ QVERIFY(QFileInfo(relativeExecutableFilePath("zorted")).exists());
+ QVERIFY(QFileInfo(relativeExecutableFilePath("unzorted")).exists());
+ QVERIFY(QFileInfo(relativeProductBuildDir("zorted") + "/zorted.foo.narf.zort").exists());
+ QVERIFY(!QFileInfo(relativeProductBuildDir("unzorted") + "/unzorted.foo.narf.zort").exists());
}
void TestBlackbox::ruleCycle()
@@ -1211,47 +819,6 @@ void TestBlackbox::ruleCycle()
QVERIFY(m_qbsStderr.contains("Cycle detected in rule dependencies"));
}
-void TestBlackbox::trackAddQObjectHeader()
-{
- QDir::setCurrent(testDataDir + "/missingqobjectheader");
- const QString qbsFileName("missingheader.qbs");
- QFile qbsFile(qbsFileName);
- QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
- qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n"
- " files: ['main.cpp', 'myobject.cpp']\n}");
- qbsFile.close();
- QbsRunParameters params;
- params.expectFailure = true;
- QVERIFY(runQbs(params) != 0);
- waitForNewTimestamp();
- QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
- qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n"
- " files: ['main.cpp', 'myobject.cpp','myobject.h']\n}");
- qbsFile.close();
- params.expectFailure = false;
- QCOMPARE(runQbs(params), 0);
-}
-
-void TestBlackbox::trackRemoveQObjectHeader()
-{
- QDir::setCurrent(testDataDir + "/missingqobjectheader");
- const QString qbsFileName("missingheader.qbs");
- QFile qbsFile(qbsFileName);
- QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
- qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n"
- " files: ['main.cpp', 'myobject.cpp','myobject.h']\n}");
- qbsFile.close();
- QbsRunParameters params;
- QCOMPARE(runQbs(params), 0);
- waitForNewTimestamp();
- QVERIFY(qbsFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
- qbsFile.write("import qbs.base 1.0\nCppApplication {\n Depends { name: 'Qt.core' }\n"
- " files: ['main.cpp', 'myobject.cpp']\n}");
- qbsFile.close();
- params.expectFailure = true;
- QVERIFY(runQbs(params) != 0);
-}
-
void TestBlackbox::overrideProjectProperties()
{
QDir::setCurrent(testDataDir + "/overrideProjectProperties");
@@ -1263,14 +830,14 @@ void TestBlackbox::overrideProjectProperties()
<< QLatin1String("project.someInt:156")
<< QLatin1String("project.someStringList:one")
<< QLatin1String("MyAppForYou.mainFile:main.cpp"))), 0);
- QVERIFY(regularFileExists(executableFilePath("MyAppForYou")));
- QVERIFY(QFile::remove(buildGraphPath));
+ QVERIFY(regularFileExists(relativeExecutableFilePath("MyAppForYou")));
+ QVERIFY(QFile::remove(relativeBuildGraphFilePath()));
QbsRunParameters params;
params.arguments << QLatin1String("-f") << QLatin1String("project_using_helper_lib.qbs");
params.expectFailure = true;
QVERIFY(runQbs(params) != 0);
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
params.arguments = QStringList() << QLatin1String("-f")
<< QLatin1String("project_using_helper_lib.qbs")
<< QLatin1String("project.linkSuccessfully:true");
@@ -1283,7 +850,7 @@ void TestBlackbox::productProperties()
QDir::setCurrent(testDataDir + "/productproperties");
QCOMPARE(runQbs(QbsRunParameters(QStringList() << QLatin1String("-f")
<< QLatin1String("project.qbs"))), 0);
- QVERIFY(regularFileExists(executableFilePath("blubb_user")));
+ QVERIFY(regularFileExists(relativeExecutableFilePath("blubb_user")));
}
void TestBlackbox::propertyChanges()
@@ -1301,7 +868,7 @@ void TestBlackbox::propertyChanges()
QVERIFY(m_qbsStdout.contains("linking product 1.debug"));
QVERIFY(m_qbsStdout.contains("generated.txt"));
QVERIFY(m_qbsStdout.contains("Making output from input"));
- QFile generatedFile(productBuildDir("generated text file") + "/generated.txt");
+ QFile generatedFile(relativeProductBuildDir("generated text file") + "/generated.txt");
QVERIFY(generatedFile.open(QIODevice::ReadOnly));
QCOMPARE(generatedFile.readAll(), QByteArray("prefix 1contents 1suffix 1"));
generatedFile.close();
@@ -1504,64 +1071,12 @@ void TestBlackbox::propertyChanges()
QVERIFY(m_qbsStdout.contains("Making output from input"));
}
-void TestBlackbox::disabledProduct()
-{
- QDir::setCurrent(testDataDir + "/disabledProduct");
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::disabledProject()
-{
- QDir::setCurrent(testDataDir + "/disabledProject");
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::disableProduct()
-{
- QDir::setCurrent(testDataDir + "/disable-product");
- QCOMPARE(runQbs(), 0);
- waitForNewTimestamp();
- QFile projectFile("project.qbs");
- QVERIFY(projectFile.open(QIODevice::ReadWrite));
- QByteArray content = projectFile.readAll();
- content.replace("// condition: false", "condition: false");
- projectFile.resize(0);
- projectFile.write(content);
- projectFile.close();
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::duplicateProductNames()
-{
- QDir::setCurrent(testDataDir + "/duplicateProductNames");
- QFETCH(QString, projectFileName);
- QbsRunParameters params;
- params.expectFailure = true;
- params.arguments = QStringList() << "-f" << projectFileName;
- QVERIFY(runQbs(params) != 0);
- QVERIFY(m_qbsStderr.contains("Duplicate product name"));
-}
-
-void TestBlackbox::duplicateProductNames_data()
-{
- QTest::addColumn<QString>("projectFileName");
- QTest::newRow("Names explicitly set") << QString("explicit.qbs");
- QTest::newRow("Unnamed products in same file") << QString("implicit.qbs");
- QTest::newRow("Unnamed products in files of the same name") << QString("implicit-indirect.qbs");
-}
-
-void TestBlackbox::dynamicLibs()
-{
- QDir::setCurrent(testDataDir + "/dynamicLibs");
- QCOMPARE(runQbs(), 0);
-}
-
void TestBlackbox::dynamicMultiplexRule()
{
const QString testDir = testDataDir + "/dynamicMultiplexRule";
QDir::setCurrent(testDir);
QCOMPARE(runQbs(), 0);
- const QString outputFilePath = productBuildDir("dynamicMultiplexRule") + "/stuff-from-3-inputs";
+ const QString outputFilePath = relativeProductBuildDir("dynamicMultiplexRule") + "/stuff-from-3-inputs";
QVERIFY(regularFileExists(outputFilePath));
waitForNewTimestamp();
touch("two.txt");
@@ -1580,10 +1095,10 @@ void TestBlackbox::dynamicRuleOutputs()
QDir::setCurrent(testDir + "/work");
QCOMPARE(runQbs(), 0);
- const QString appFile = executableFilePath("genlexer");
- const QString headerFile1 = productBuildDir("genlexer") + "/GeneratedFiles/numberscanner.h";
- const QString sourceFile1 = productBuildDir("genlexer") + "/GeneratedFiles/numberscanner.c";
- const QString sourceFile2 = productBuildDir("genlexer") + "/GeneratedFiles/lex.yy.c";
+ const QString appFile = relativeExecutableFilePath("genlexer");
+ const QString headerFile1 = relativeProductBuildDir("genlexer") + "/GeneratedFiles/numberscanner.h";
+ const QString sourceFile1 = relativeProductBuildDir("genlexer") + "/GeneratedFiles/numberscanner.c";
+ const QString sourceFile2 = relativeProductBuildDir("genlexer") + "/GeneratedFiles/lex.yy.c";
// Check build #1: source and header file name are specified in numbers.l
QVERIFY(regularFileExists(appFile));
@@ -1617,18 +1132,6 @@ void TestBlackbox::dynamicRuleOutputs()
QVERIFY(!QFile::exists(sourceFile2));
}
-void TestBlackbox::emptyFileTagList()
-{
- QDir::setCurrent(testDataDir + "/empty-filetag-list");
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::emptySubmodulesList()
-{
- QDir::setCurrent(testDataDir + "/empty-submodules-list");
- QCOMPARE(runQbs(), 0);
-}
-
void TestBlackbox::erroneousFiles_data()
{
QTest::addColumn<QString>("errorMessage");
@@ -1651,27 +1154,14 @@ void TestBlackbox::erroneousFiles()
}
}
-void TestBlackbox::explicitlyDependsOn()
-{
- QDir::setCurrent(testDataDir + "/explicitlyDependsOn");
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("Creating output artifact"));
- QCOMPARE(runQbs(), 0);
- QVERIFY(!m_qbsStdout.contains("Creating output artifact"));
- waitForNewTimestamp();
- touch("dependency.txt");
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("Creating output artifact"));
-}
-
void TestBlackbox::fileDependencies()
{
QDir::setCurrent(testDataDir + "/fileDependencies");
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
QCOMPARE(runQbs(), 0);
QVERIFY(m_qbsStdout.contains("compiling narf.cpp"));
QVERIFY(m_qbsStdout.contains("compiling zort.cpp"));
- const QString productFileName = executableFilePath("myapp");
+ const QString productFileName = relativeExecutableFilePath("myapp");
QVERIFY2(regularFileExists(productFileName), qPrintable(productFileName));
// Incremental build without changes.
@@ -1809,77 +1299,6 @@ void TestBlackbox::jsExtensionsTextFile()
QCOMPARE(lines.at(4).trimmed().constData(), "true");
}
-void TestBlackbox::inheritQbsSearchPaths()
-{
- QDir::setCurrent(testDataDir + "/inheritQbsSearchPaths");
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::mocCppIncluded()
-{
- QDir::setCurrent(testDataDir + "/moc_hpp_included");
- QCOMPARE(runQbs(), 0); // Initial build.
-
- // Touch header and try again.
- waitForNewTimestamp();
- QFile headerFile("object.h");
- QVERIFY2(headerFile.open(QIODevice::WriteOnly | QIODevice::Append),
- qPrintable(headerFile.errorString()));
- headerFile.write("\n");
- headerFile.close();
- QCOMPARE(runQbs(), 0);
-
- // Touch cpp file and try again.
- waitForNewTimestamp();
- QFile cppFile("object.cpp");
- QVERIFY2(cppFile.open(QIODevice::WriteOnly | QIODevice::Append),
- qPrintable(cppFile.errorString()));
- cppFile.write("\n");
- cppFile.close();
- QCOMPARE(runQbs(), 0);
-}
-
-void TestBlackbox::newOutputArtifactInDependency()
-{
- QDir::setCurrent(testDataDir + "/new-output-artifact-in-dependency");
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("linking app"));
- const QByteArray linkingLibString = QByteArray("linking ")
- + HostOsInfo::dynamicLibraryName("lib").toLatin1();
- QVERIFY(!m_qbsStdout.contains(linkingLibString));
-
- waitForNewTimestamp();
- QFile projectFile("project.qbs");
- QVERIFY2(projectFile.open(QIODevice::ReadWrite), qPrintable(projectFile.errorString()));
- QByteArray contents = projectFile.readAll();
- contents.replace("//Depends", "Depends");
- projectFile.resize(0);
- projectFile.write(contents);
- projectFile.close();
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("linking app"));
- QVERIFY(m_qbsStdout.contains(linkingLibString));
-}
-
-void TestBlackbox::newPatternMatch()
-{
- QDir::setCurrent(testDataDir + "/new-pattern-match");
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("Resolving"));
- QCOMPARE(runQbs(), 0);
- QVERIFY(!m_qbsStdout.contains("Resolving"));
- QFile f("test.txt");
- QVERIFY2(f.open(QIODevice::WriteOnly), qPrintable(f.errorString()));
- f.close();
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("Resolving"));
- QCOMPARE(runQbs(), 0);
- QVERIFY(!m_qbsStdout.contains("Resolving"));
- f.remove();
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("Resolving"));
-}
-
void TestBlackbox::nonBrokenFilesInBrokenProduct()
{
QDir::setCurrent(testDataDir + "/non-broken-files-in-broken-product");
@@ -1891,18 +1310,12 @@ void TestBlackbox::nonBrokenFilesInBrokenProduct()
QVERIFY(!m_qbsStdout.contains("fine.cpp")); // The non-broken file must not be recompiled.
}
-void TestBlackbox::objC()
-{
- QDir::setCurrent(testDataDir + "/objc");
- QCOMPARE(runQbs(), 0);
-}
-
void TestBlackbox::qmlDebugging()
{
QDir::setCurrent(testDataDir + "/qml-debugging");
QCOMPARE(runQbs(), 0);
QProcess nm;
- nm.start("nm", QStringList(executableFilePath("debuggable-app")));
+ nm.start("nm", QStringList(relativeExecutableFilePath("debuggable-app")));
if (nm.waitForStarted()) { // Let's ignore hosts without nm.
QVERIFY2(nm.waitForFinished(), qPrintable(nm.errorString()));
QVERIFY2(nm.exitCode() == 0, nm.readAllStandardError().constData());
@@ -1911,12 +1324,6 @@ void TestBlackbox::qmlDebugging()
}
}
-void TestBlackbox::projectWithPropertiesItem()
-{
- QDir::setCurrent(testDataDir + "/project-with-properties-item");
- QCOMPARE(runQbs(), 0);
-}
-
void TestBlackbox::properQuoting()
{
QDir::setCurrent(testDataDir + "/proper quoting");
@@ -1929,12 +1336,6 @@ void TestBlackbox::properQuoting()
QCOMPARE(unifiedLineEndings(m_qbsStdout).constData(), expectedOutput);
}
-void TestBlackbox::propertiesBlocks()
-{
- QDir::setCurrent(testDataDir + "/propertiesBlocks");
- QCOMPARE(runQbs(), 0);
-}
-
void TestBlackbox::radAfterIncompleteBuild_data()
{
QTest::addColumn<QString>("projectFileName");
@@ -1945,7 +1346,7 @@ void TestBlackbox::radAfterIncompleteBuild_data()
void TestBlackbox::radAfterIncompleteBuild()
{
QDir::setCurrent(testDataDir + "/rad-after-incomplete-build");
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
QFETCH(QString, projectFileName);
// Step 1: Have a directory where a file used to be.
@@ -2054,7 +1455,7 @@ void TestBlackbox::installedApp()
QCOMPARE(runQbs(QbsRunParameters(QLatin1String("install"))), 0);
QVERIFY(regularFileExists(defaultInstallRoot + QLatin1String("/usr/local/source/main.cpp")));
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
QbsRunParameters params;
params.command = "install";
params.arguments << "--no-build";
@@ -2125,7 +1526,7 @@ void TestBlackbox::missingProfile()
void TestBlackbox::testAssembly()
{
Settings settings((QString()));
- Profile profile(buildProfileName, &settings);
+ Profile profile(profileName(), &settings);
bool haveGcc = profile.value("qbs.toolchain").toStringList().contains("gcc");
QDir::setCurrent(testDataDir + "/assembly");
QVERIFY(runQbs() == 0);
@@ -2168,7 +1569,7 @@ void TestBlackbox::testNsis()
}
Settings settings((QString()));
- Profile profile(buildProfileName, &settings);
+ Profile profile(profileName(), &settings);
bool targetIsWindows = profile.value("qbs.targetOS").toStringList().contains("windows");
QDir::setCurrent(testDataDir + "/nsis");
QVERIFY(runQbs() == 0);
@@ -2239,7 +1640,7 @@ void TestBlackbox::testWiX()
}
Settings settings((QString()));
- Profile profile(buildProfileName, &settings);
+ Profile profile(profileName(), &settings);
const QByteArray arch = profile.value("qbs.architecture").toString().toLatin1();
QDir::setCurrent(testDataDir + "/wix");
@@ -2248,8 +1649,8 @@ void TestBlackbox::testWiX()
QVERIFY(m_qbsStdout.contains("compiling QbsBootstrapper.wxs"));
QVERIFY(m_qbsStdout.contains("linking qbs-" + arch + ".msi"));
QVERIFY(m_qbsStdout.contains("linking qbs-setup-" + arch + ".exe"));
- QVERIFY(regularFileExists(productBuildDir("QbsSetup") + "/qbs-" + arch + ".msi"));
- QVERIFY(regularFileExists(productBuildDir("QbsBootstrapper") + "/qbs-setup-" + arch + ".exe"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("QbsSetup") + "/qbs-" + arch + ".msi"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("QbsBootstrapper") + "/qbs-setup-" + arch + ".exe"));
}
static QString findExecutable(const QStringList &fileNames)
@@ -2289,7 +1690,7 @@ void TestBlackbox::testNodeJs()
params.command = QLatin1String("run");
QCOMPARE(runQbs(params), 0);
QVERIFY((bool)m_qbsStdout.contains("hello world"));
- QVERIFY(regularFileExists(productBuildDir("hello") + "/hello.js"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("hello") + "/hello.js"));
}
void TestBlackbox::testTypeScript()
@@ -2306,9 +1707,9 @@ void TestBlackbox::testTypeScript()
params.arguments = QStringList() << "-p" << "animals";
QCOMPARE(runQbs(params), 0);
- QVERIFY(regularFileExists(productBuildDir("animals") + "/animals.js"));
- QVERIFY(regularFileExists(productBuildDir("animals") + "/extra.js"));
- QVERIFY(regularFileExists(productBuildDir("animals") + "/main.js"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("animals") + "/animals.js"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("animals") + "/extra.js"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("animals") + "/main.js"));
}
void TestBlackbox::testIconset()
@@ -2323,7 +1724,7 @@ void TestBlackbox::testIconset()
QCOMPARE(runQbs(params), 0);
QVERIFY((bool)m_qbsStdout.contains("warning")); // because some images are missing
- QVERIFY(regularFileExists(productBuildDir("iconset") + "/white.icns"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("iconset") + "/white.icns"));
}
void TestBlackbox::testIconsetApp()
@@ -2338,7 +1739,7 @@ void TestBlackbox::testIconsetApp()
QCOMPARE(runQbs(params), 0);
QVERIFY((bool)m_qbsStdout.contains("warning")); // because some images are missing
- QVERIFY(regularFileExists(productBuildDir("iconsetapp") + "/iconsetapp.app/Contents/Resources/white.icns"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("iconsetapp") + "/iconsetapp.app/Contents/Resources/white.icns"));
}
void TestBlackbox::testAssetCatalog()
@@ -2360,48 +1761,33 @@ void TestBlackbox::testAssetCatalog()
QVERIFY((bool)m_qbsStdout.contains("actool"));
// should not produce a CAR since minimumOsxVersion will be < 10.9
- QVERIFY(!regularFileExists(productBuildDir("assetcatalogempty") + "/assetcatalogempty.app/Contents/Resources/Assets.car"));
+ QVERIFY(!regularFileExists(relativeProductBuildDir("assetcatalogempty") + "/assetcatalogempty.app/Contents/Resources/Assets.car"));
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
params.arguments.append("cpp.minimumOsxVersion:10.9"); // force CAR generation
QCOMPARE(runQbs(params), 0);
// empty asset catalogs must still produce output
QVERIFY((bool)m_qbsStdout.contains("actool"));
- QVERIFY(regularFileExists(productBuildDir("assetcatalogempty") + "/assetcatalogempty.app/Contents/Resources/Assets.car"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("assetcatalogempty") + "/assetcatalogempty.app/Contents/Resources/Assets.car"));
// this asset catalog happens to have an embedded icon set,
// but this should NOT be built since it is not in the files list
QVERIFY(!(bool)m_qbsStdout.contains("iconutil"));
// now we'll add the iconset
- rmDirR(buildDir);
+ rmDirR(relativeBuildDir());
params.arguments.append("project.includeIconset:true");
QCOMPARE(runQbs(params), 0);
QVERIFY((bool)m_qbsStdout.contains("actool"));
QVERIFY((bool)m_qbsStdout.contains("iconutil"));
// make sure the nibs/storyboards are in there
- QVERIFY(regularFileExists(productBuildDir("assetcatalogempty") + "/assetcatalogempty.app/Contents/Resources/MainMenu.nib"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("assetcatalogempty") + "/assetcatalogempty.app/Contents/Resources/MainMenu.nib"));
#ifdef Q_OS_MAC
if (QSysInfo::macVersion() >= Q_MV_OSX(10, 10))
#endif
- QVERIFY(regularFileExists(productBuildDir("assetcatalogempty") + "/assetcatalogempty.app/Contents/Resources/Storyboard.storyboardc"));
-}
-
-QString TestBlackbox::uniqueProductName(const QString &productName) const
-{
- return productName + '.' + buildProfileName;
-}
-
-QString TestBlackbox::productBuildDir(const QString &productName) const
-{
- return buildDir + '/' + uniqueProductName(productName);
-}
-
-QString TestBlackbox::executableFilePath(const QString &productName) const
-{
- return productBuildDir(productName) + '/' + HostOsInfo::appendExecutableSuffix(productName);
+ QVERIFY(regularFileExists(relativeProductBuildDir("assetcatalogempty") + "/assetcatalogempty.app/Contents/Resources/Storyboard.storyboardc"));
}
QTEST_MAIN(TestBlackbox)
diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h
index 1ce6003c3..8ebf712f9 100644
--- a/tests/auto/blackbox/tst_blackbox.h
+++ b/tests/auto/blackbox/tst_blackbox.h
@@ -77,10 +77,7 @@ class TestBlackbox : public QObject
const QString testDataDir;
const QString testSourceDir;
const QString qbsExecutableFilePath;
- const QString buildProfileName;
- const QString buildDir;
const QString defaultInstallRoot;
- const QString buildGraphPath;
public:
TestBlackbox();
@@ -95,66 +92,28 @@ public slots:
void initTestCase();
private slots:
- void addedFilePersistent();
- void addQObjectMacroToCppFile();
- void baseProperties();
void buildDirectories();
- void build_project_data();
- void build_project();
- void build_project_dry_run_data();
- void build_project_dry_run();
- void changeDependentLib();
void changedFiles_data();
void changedFiles();
void dependenciesProperty();
- void disabledProduct();
- void disabledProject();
- void disableProduct();
- void duplicateProductNames();
- void duplicateProductNames_data();
- void dynamicLibs();
void dynamicMultiplexRule();
void dynamicRuleOutputs();
- void emptyFileTagList();
- void emptySubmodulesList();
void erroneousFiles_data();
void erroneousFiles();
- void explicitlyDependsOn();
void fileDependencies();
void jsExtensionsFile();
void jsExtensionsFileInfo();
void jsExtensionsProcess();
void jsExtensionsPropertyList();
void jsExtensionsTextFile();
- void inheritQbsSearchPaths();
- void mocCppIncluded();
- void newOutputArtifactInDependency();
- void newPatternMatch();
void nonBrokenFilesInBrokenProduct();
- void objC();
void qmlDebugging();
- void projectWithPropertiesItem();
void properQuoting();
- void propertiesBlocks();
void radAfterIncompleteBuild_data();
void radAfterIncompleteBuild();
- void resolve_project_data();
- void resolve_project();
- void resolve_project_dry_run_data();
- void resolve_project_dry_run();
- void typeChange();
void usingsAsSoleInputsNonMultiplexed();
void clean();
- void exportSimple();
- void exportWithRecursiveDepends();
- void fileTagger();
- void rc();
- void removeFileDependency();
void renameDependency();
- void renameProduct();
- void renameTargetArtifact();
- void softDependency();
- void subProjects();
void track_qrc();
void track_qobject_change();
void trackAddFile();
@@ -165,15 +124,11 @@ private slots:
void trackAddMocInclude();
void trackAddProduct();
void trackRemoveProduct();
- void transformers();
- void uic();
void wildcardRenaming();
void recursiveRenaming();
void recursiveWildcards();
void ruleConditions();
void ruleCycle();
- void trackAddQObjectHeader();
- void trackRemoveQObjectHeader();
void overrideProjectProperties();
void productProperties();
void propertyChanges();
@@ -192,10 +147,6 @@ private slots:
void testAssetCatalog();
private:
- QString uniqueProductName(const QString &productName) const;
- QString productBuildDir(const QString &productName) const;
- QString executableFilePath(const QString &productName) const;
-
QByteArray m_qbsStderr;
QByteArray m_qbsStdout;
};
diff --git a/tests/auto/shared.h b/tests/auto/shared.h
index 66fc1b80c..7ec6ed5ea 100644
--- a/tests/auto/shared.h
+++ b/tests/auto/shared.h
@@ -32,6 +32,7 @@
#include <tools/hostosinfo.h>
#include <QFile>
+#include <QFileInfo>
#include <QtTest>
#include <ctime>
@@ -42,6 +43,35 @@
#define SKIP_TEST(message) QSKIP(message, SkipAll)
#endif
+inline QString profileName() { return QLatin1String("qbs_autotests"); }
+inline QString relativeBuildDir() { return profileName() + QLatin1String("-debug"); }
+
+inline QString relativeBuildGraphFilePath() {
+ return relativeBuildDir() + QLatin1Char('/') + relativeBuildDir() + QLatin1String(".bg");
+}
+
+inline bool regularFileExists(const QString &filePath)
+{
+ const QFileInfo fi(filePath);
+ return fi.exists() && fi.isFile();
+}
+
+inline QString uniqueProductName(const QString &productName)
+{
+ return productName + '.' + profileName();
+}
+
+inline QString relativeProductBuildDir(const QString &productName)
+{
+ return relativeBuildDir() + '/' + uniqueProductName(productName);
+}
+
+inline QString relativeExecutableFilePath(const QString &productName)
+{
+ return relativeProductBuildDir(productName) + '/'
+ + qbs::Internal::HostOsInfo::appendExecutableSuffix(productName);
+}
+
inline void waitForNewTimestamp()
{
// Waits for the time that corresponds to the host file system's time stamp granularity.