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();
}
示例#2
0
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 );
}
示例#3
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());
}