KUrl ContextBuilder::findModulePath(const QString& name) { QStringList modulePath = name.split("."); KUrl currentPath = currentContext()->url().toUrl(); Q_ASSERT(currentPath.url().length()); kDebug() << " >>>>>>>>> Got URL: " << currentPath.upUrl().url(KUrl::RemoveTrailingSlash); IProject* currentProject = ICore::self()->projectController()->findProjectForUrl(currentPath); if ( ! currentProject ) { kError() << "Cannot import module contexts without a project opened."; return KUrl(); } // easiest case: current directory KUrl filename(currentPath.directory(KUrl::AppendTrailingSlash) + modulePath.first() + ".py"); kDebug() << "filename url: " << filename; if ( currentProject->filesForUrl(filename).length() > 0 ) { ProjectFileItem* result = currentProject->filesForUrl(filename).first(); kDebug() << "Found! " << result->url(); return result->url(); } return KUrl(); }
void TestProjectModel::testCreateSimpleHierarchy() { QString folderName = QStringLiteral("rootfolder"); QString fileName = QStringLiteral("file"); QString targetName = QStringLiteral("testtarged"); QString cppFileName = QStringLiteral("file.cpp"); ProjectFolderItem* rootFolder = new ProjectFolderItem( nullptr, Path(QUrl::fromLocalFile("/"+folderName)) ); QCOMPARE(rootFolder->baseName(), folderName); ProjectFileItem* file = new ProjectFileItem( fileName, rootFolder ); QCOMPARE(file->baseName(), fileName); ProjectTargetItem* target = new ProjectTargetItem( nullptr, targetName ); rootFolder->appendRow( target ); ProjectFileItem* targetfile = new ProjectFileItem( nullptr, Path(rootFolder->path(), cppFileName), target ); model->appendRow( rootFolder ); QCOMPARE( model->rowCount(), 1 ); QModelIndex folderIdx = model->index( 0, 0, QModelIndex() ); QCOMPARE( model->data( folderIdx ).toString(), folderName ); QCOMPARE( model->rowCount( folderIdx ), 2 ); QCOMPARE( model->itemFromIndex( folderIdx ), rootFolder ); QVERIFY( rootFolder->hasFileOrFolder( fileName ) ); QModelIndex fileIdx = model->index( 0, 0, folderIdx ); QCOMPARE( model->data( fileIdx ).toString(), fileName ); QCOMPARE( model->rowCount( fileIdx ), 0 ); QCOMPARE( model->itemFromIndex( fileIdx ), file ); QModelIndex targetIdx = model->index( 1, 0, folderIdx ); QCOMPARE( model->data( targetIdx ).toString(), targetName ); QCOMPARE( model->rowCount( targetIdx ), 1 ); QCOMPARE( model->itemFromIndex( targetIdx ), target ); QModelIndex targetFileIdx = model->index( 0, 0, targetIdx ); QCOMPARE( model->data( targetFileIdx ).toString(), cppFileName ); QCOMPARE( model->rowCount( targetFileIdx ), 0 ); QCOMPARE( model->itemFromIndex( targetFileIdx ), targetfile ); rootFolder->removeRow( 1 ); QCOMPARE( model->rowCount( folderIdx ), 1 ); delete file; file = nullptr; // Check that we also find a folder with the fileName new ProjectFolderItem( fileName, rootFolder ); QVERIFY( rootFolder->hasFileOrFolder( fileName ) ); delete rootFolder; QCOMPARE( model->rowCount(), 0 ); }
void QuickOpenTest::testProjectFileFilter() { KTempDir dir; TestProject* project = new TestProject(KUrl(dir.name())); ProjectFolderItem* foo = createChild<ProjectFolderItem>(project->projectItem(), "foo"); createChild<ProjectFileItem>(foo, "bar"); createChild<ProjectFileItem>(foo, "asdf"); ProjectFolderItem* asdf = createChild<ProjectFolderItem>(project->projectItem(), "asdf"); createChild<ProjectFileItem>(asdf, "bar"); QTemporaryFile tmpFile; tmpFile.setFileName(dir.name() + "aaaa"); QVERIFY(tmpFile.open()); ProjectFileItem* aaaa = new ProjectFileItem(project, KUrl(tmpFile.fileName()), project->projectItem()); QCOMPARE(project->fileSet().size(), 4); ProjectFileDataProvider provider; QCOMPARE(provider.itemCount(), 0u); projectController->addProject(project); const QStringList original = QStringList() << "aaaa" << "asdf/bar" << "foo/asdf" << "foo/bar"; // lazy load QCOMPARE(provider.itemCount(), 0u); provider.reset(); QCOMPARE(items(provider), original); QCOMPARE(provider.itemText(provider.items().first()), aaaa->url().pathOrUrl()); QCOMPARE(provider.data(0)->text(), QString("aaaa")); // don't show opened file QVERIFY(core->documentController()->openDocument(KUrl(tmpFile.fileName()))); // lazy load again QCOMPARE(items(provider), original); provider.reset(); QCOMPARE(items(provider), QStringList() << "asdf/bar" << "foo/asdf" << "foo/bar"); // prefer files starting with filter provider.setFilterText("as"); qDebug() << items(provider); QCOMPARE(items(provider), QStringList() << "foo/asdf" << "asdf/bar"); // clear filter provider.reset(); QCOMPARE(items(provider), QStringList() << "asdf/bar" << "foo/asdf" << "foo/bar"); // update on document close, lazy load again core->documentController()->closeAllDocuments(); QCOMPARE(items(provider), QStringList() << "asdf/bar" << "foo/asdf" << "foo/bar"); provider.reset(); QCOMPARE(items(provider), original); ProjectFileItem* blub = createChild<ProjectFileItem>(project->projectItem(), "blub"); // lazy load QCOMPARE(provider.itemCount(), 4u); provider.reset(); QCOMPARE(provider.itemCount(), 5u); // ensure we don't add stuff multiple times QMetaObject::invokeMethod(&provider, "fileAddedToSet", Q_ARG(KDevelop::IProject*, project), Q_ARG(KDevelop::IndexedString, blub->indexedUrl())); QCOMPARE(provider.itemCount(), 5u); provider.reset(); QCOMPARE(provider.itemCount(), 5u); // lazy load in this implementation delete blub; QCOMPARE(provider.itemCount(), 5u); provider.reset(); QCOMPARE(provider.itemCount(), 4u); QCOMPARE(items(provider), original); projectController->closeProject(project); provider.reset(); QVERIFY(!provider.itemCount()); }