summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/filestatus.h25
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.cpp36
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.h44
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/filesystem.cpp13
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/filesystem.h1
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/filesysteminterface.h3
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h2
-rw-r--r--tests/unit/unittest/filestatuscache-test.cpp178
-rw-r--r--tests/unit/unittest/filesystemmock.h6
-rw-r--r--tests/unit/unittest/projectstorage-test.cpp24
10 files changed, 199 insertions, 133 deletions
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/filestatus.h b/src/plugins/qmldesigner/designercore/projectstorage/filestatus.h
index 9700c4aa9b..34a0b64839 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/filestatus.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/filestatus.h
@@ -27,8 +27,6 @@
#include "projectstorageids.h"
-#include <ctime>
-#include <sys/types.h>
#include <vector>
namespace QmlDesigner {
@@ -36,13 +34,13 @@ namespace QmlDesigner {
class FileStatus
{
public:
- explicit FileStatus(SourceId sourceId, off_t size, std::time_t lastModified)
+ explicit FileStatus(SourceId sourceId, long long size, long long lastModified)
: sourceId{sourceId}
, size{size}
, lastModified{lastModified}
{}
- explicit FileStatus(int sourceId, off_t size, std::time_t lastModified)
+ explicit FileStatus(int sourceId, long long size, long long lastModified)
: sourceId{sourceId}
, size{size}
, lastModified{lastModified}
@@ -54,15 +52,30 @@ public:
&& first.lastModified == second.lastModified;
}
+ friend bool operator!=(const FileStatus &first, const FileStatus &second)
+ {
+ return !(first == second);
+ }
+
friend bool operator<(const FileStatus &first, const FileStatus &second)
{
return first.sourceId < second.sourceId;
}
+ friend bool operator<(SourceId first, const FileStatus &second)
+ {
+ return first < second.sourceId;
+ }
+
+ friend bool operator<(const FileStatus &first, SourceId second)
+ {
+ return first.sourceId < second;
+ }
+
public:
SourceId sourceId;
- off_t size;
- std::time_t lastModified;
+ long long size;
+ long long lastModified;
};
using FileStatuses = std::vector<FileStatus>;
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.cpp b/src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.cpp
index 57e1d4cee1..725d71fdb2 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.cpp
+++ b/src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.cpp
@@ -36,20 +36,25 @@ namespace QmlDesigner {
long long FileStatusCache::lastModifiedTime(SourceId sourceId) const
{
- return findEntry(sourceId).lastModified;
+ return find(sourceId).lastModified;
+}
+
+long long FileStatusCache::fileSize(SourceId sourceId) const
+{
+ return find(sourceId).size;
}
void FileStatusCache::update(SourceId sourceId)
{
auto found = std::lower_bound(m_cacheEntries.begin(),
m_cacheEntries.end(),
- Internal::FileStatusCacheEntry{sourceId},
+ sourceId,
[](const auto &first, const auto &second) {
- return first.sourceId < second.sourceId;
+ return first < second;
});
if (found != m_cacheEntries.end() && found->sourceId == sourceId)
- found->lastModified = m_fileSystem.lastModified(sourceId);
+ *found = m_fileSystem.fileStatus(sourceId);
}
void FileStatusCache::update(SourceIds sourceIds)
@@ -59,7 +64,7 @@ void FileStatusCache::update(SourceIds sourceIds)
sourceIds.begin(),
sourceIds.end(),
Utils::make_iterator([&](auto &entry) {
- entry.lastModified = m_fileSystem.lastModified(entry.sourceId);
+ entry = m_fileSystem.fileStatus(entry.sourceId);
}));
}
@@ -73,14 +78,14 @@ SourceIds FileStatusCache::modified(SourceIds sourceIds) const
sourceIds.begin(),
sourceIds.end(),
Utils::make_iterator([&](auto &entry) {
- auto newLastModified = m_fileSystem.lastModified(entry.sourceId);
- if (newLastModified > entry.lastModified) {
+ auto fileStatus = m_fileSystem.fileStatus(entry.sourceId);
+ if (fileStatus != entry) {
modifiedSourceIds.push_back(entry.sourceId);
- entry.lastModified = newLastModified;
+ entry = fileStatus;
}
}));
- Internal::FileStatusCacheEntries newEntries;
+ FileStatuses newEntries;
newEntries.reserve(sourceIds.size());
std::set_difference(sourceIds.begin(),
@@ -88,13 +93,12 @@ SourceIds FileStatusCache::modified(SourceIds sourceIds) const
m_cacheEntries.begin(),
m_cacheEntries.end(),
Utils::make_iterator([&](SourceId newSourceId) {
- newEntries.emplace_back(newSourceId,
- m_fileSystem.lastModified(newSourceId));
+ newEntries.push_back(m_fileSystem.fileStatus(newSourceId));
modifiedSourceIds.push_back(newSourceId);
}));
if (newEntries.size()) {
- Internal::FileStatusCacheEntries mergedEntries;
+ FileStatuses mergedEntries;
mergedEntries.reserve(m_cacheEntries.size() + newEntries.size());
std::set_union(newEntries.begin(),
@@ -116,19 +120,19 @@ FileStatusCache::size_type FileStatusCache::size() const
return m_cacheEntries.size();
}
-Internal::FileStatusCacheEntry FileStatusCache::findEntry(SourceId sourceId) const
+const FileStatus &FileStatusCache::find(SourceId sourceId) const
{
auto found = std::lower_bound(m_cacheEntries.begin(),
m_cacheEntries.end(),
- Internal::FileStatusCacheEntry{sourceId},
+ sourceId,
[](const auto &first, const auto &second) {
- return first.sourceId < second.sourceId;
+ return first < second;
});
if (found != m_cacheEntries.end() && found->sourceId == sourceId)
return *found;
- auto inserted = m_cacheEntries.emplace(found, sourceId, m_fileSystem.lastModified(sourceId));
+ auto inserted = m_cacheEntries.insert(found, m_fileSystem.fileStatus(sourceId));
return *inserted;
}
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.h b/src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.h
index 55e9290387..3be9ba5767 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/filestatuscache.h
@@ -25,51 +25,19 @@
#pragma once
+#include "filestatus.h"
#include "filesysteminterface.h"
-#include "vector"
#include <QtGlobal>
QT_FORWARD_DECLARE_CLASS(QFileInfo)
namespace QmlDesigner {
-namespace Internal {
-class FileStatusCacheEntry
-{
-public:
- FileStatusCacheEntry(QmlDesigner::SourceId sourceId, long long lastModified = 0)
- : sourceId(sourceId)
- , lastModified(lastModified)
- {}
-
- friend bool operator<(FileStatusCacheEntry first, FileStatusCacheEntry second)
- {
- return first.sourceId < second.sourceId;
- }
-
- friend bool operator<(FileStatusCacheEntry first, SourceId second)
- {
- return first.sourceId < second;
- }
-
- friend bool operator<(SourceId first, FileStatusCacheEntry second)
- {
- return first < second.sourceId;
- }
-
-public:
- SourceId sourceId;
- long long lastModified;
-};
-
-using FileStatusCacheEntries = std::vector<FileStatusCacheEntry>;
-
-}
class FileStatusCache
{
public:
- using size_type = Internal::FileStatusCacheEntries::size_type;
+ using size_type = FileStatuses::size_type;
FileStatusCache(FileSystemInterface &fileSystem)
: m_fileSystem(fileSystem)
@@ -78,6 +46,9 @@ public:
FileStatusCache(const FileStatusCache &) = delete;
long long lastModifiedTime(SourceId sourceId) const;
+ long long fileSize(SourceId sourceId) const;
+ const FileStatus &find(SourceId sourceId) const;
+
void update(SourceId sourceId);
void update(SourceIds sourceIds);
SourceIds modified(SourceIds sourceIds) const;
@@ -85,10 +56,7 @@ public:
size_type size() const;
private:
- Internal::FileStatusCacheEntry findEntry(SourceId sourceId) const;
-
-private:
- mutable Internal::FileStatusCacheEntries m_cacheEntries;
+ mutable FileStatuses m_cacheEntries;
FileSystemInterface &m_fileSystem;
};
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/filesystem.cpp b/src/plugins/qmldesigner/designercore/projectstorage/filesystem.cpp
index 08ec31c707..803fb89915 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/filesystem.cpp
+++ b/src/plugins/qmldesigner/designercore/projectstorage/filesystem.cpp
@@ -64,6 +64,19 @@ long long FileSystem::lastModified(SourceId sourceId) const
return 0;
}
+FileStatus FileSystem::fileStatus(SourceId sourceId) const
+{
+ QFileInfo fileInfo(QString(m_sourcePathCache.sourcePath(sourceId)));
+
+ fileInfo.refresh();
+
+ if (fileInfo.exists()) {
+ return FileStatus{sourceId, fileInfo.size(), fileInfo.lastModified().toMSecsSinceEpoch()};
+ }
+
+ return FileStatus{sourceId, -1, -1};
+}
+
void FileSystem::remove(const SourceIds &sourceIds)
{
for (SourceId sourceId : sourceIds)
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/filesystem.h b/src/plugins/qmldesigner/designercore/projectstorage/filesystem.h
index 43b57ff38d..041090508e 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/filesystem.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/filesystem.h
@@ -52,6 +52,7 @@ public:
SourceIds directoryEntries(const QString &directoryPath) const override;
long long lastModified(SourceId sourceId) const override;
+ FileStatus fileStatus(SourceId sourceId) const override;
void remove(const SourceIds &sourceIds) override;
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/filesysteminterface.h b/src/plugins/qmldesigner/designercore/projectstorage/filesysteminterface.h
index 2f1809982b..01ea60baca 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/filesysteminterface.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/filesysteminterface.h
@@ -31,11 +31,14 @@
namespace QmlDesigner {
+class FileStatus;
+
class FileSystemInterface
{
public:
virtual SourceIds directoryEntries(const QString &directoryPath) const = 0;
virtual long long lastModified(SourceId sourceId) const = 0;
+ virtual FileStatus fileStatus(SourceId sourceId) const = 0;
virtual void remove(const SourceIds &sourceIds) = 0;
protected:
diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
index 9f8e8501cf..71d9f139e8 100644
--- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
+++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h
@@ -2181,7 +2181,7 @@ public:
"SELECT propertyDeclarationId FROM properties",
database};
mutable ReadStatement<3> selectAllFileStatusesStatement{
- "SELECT sourceId, size, lastModified FROM fileStatuses", database};
+ "SELECT sourceId, size, lastModified FROM fileStatuses ORDER BY sourceId", database};
mutable ReadStatement<3> selectFileStatusesForSourceIdsStatement{
"SELECT sourceId, size, lastModified FROM fileStatuses WHERE sourceId IN carray(?1) ORDER "
"BY sourceId",
diff --git a/tests/unit/unittest/filestatuscache-test.cpp b/tests/unit/unittest/filestatuscache-test.cpp
index c28faf4ffa..243bc80e14 100644
--- a/tests/unit/unittest/filestatuscache-test.cpp
+++ b/tests/unit/unittest/filestatuscache-test.cpp
@@ -35,6 +35,7 @@
namespace {
+using QmlDesigner::FileStatus;
using QmlDesigner::SourceId;
using QmlDesigner::SourceIds;
@@ -43,10 +44,14 @@ class FileStatusCache : public testing::Test
protected:
FileStatusCache()
{
- ON_CALL(fileSystem, lastModified(Eq(header))).WillByDefault(Return(headerLastModifiedTime));
- ON_CALL(fileSystem, lastModified(Eq(source))).WillByDefault(Return(sourceLastModifiedTime));
- ON_CALL(fileSystem, lastModified(Eq(header2))).WillByDefault(Return(header2LastModifiedTime));
- ON_CALL(fileSystem, lastModified(Eq(source2))).WillByDefault(Return(source2LastModifiedTime));
+ ON_CALL(fileSystem, fileStatus(Eq(header)))
+ .WillByDefault(Return(FileStatus{header, headerFileSize, headerLastModifiedTime}));
+ ON_CALL(fileSystem, fileStatus(Eq(source)))
+ .WillByDefault(Return(FileStatus{source, sourceFileSize, sourceLastModifiedTime}));
+ ON_CALL(fileSystem, fileStatus(Eq(header2)))
+ .WillByDefault(Return(FileStatus{header2, header2FileSize, header2LastModifiedTime}));
+ ON_CALL(fileSystem, fileStatus(Eq(source2)))
+ .WillByDefault(Return(FileStatus{source2, source2FileSize, source2LastModifiedTime}));
}
protected:
@@ -59,99 +64,123 @@ protected:
SourceIds entries{header, source, header2, source2};
long long headerLastModifiedTime = 100;
long long headerLastModifiedTime2 = 110;
+ long long headerFileSize = 1000;
+ long long headerFileSize2 = 1100;
long long header2LastModifiedTime = 300;
long long header2LastModifiedTime2 = 310;
+ long long header2FileSize = 3000;
+ long long header2FileSize2 = 3100;
long long sourceLastModifiedTime = 200;
long long source2LastModifiedTime = 400;
+ long long sourceFileSize = 2000;
+ long long source2FileSize = 4000;
};
TEST_F(FileStatusCache, CreateEntry)
{
- cache.lastModifiedTime(header);
+ cache.find(header);
ASSERT_THAT(cache, SizeIs(1));
}
TEST_F(FileStatusCache, AskCreatedEntryForLastModifiedTime)
{
- auto lastModified = cache.lastModifiedTime(header);
+ auto fileStatus = cache.find(header);
- ASSERT_THAT(lastModified, headerLastModifiedTime);
+ ASSERT_THAT(fileStatus, (FileStatus{header, headerFileSize, headerLastModifiedTime}));
}
-TEST_F(FileStatusCache, AskCachedEntryForLastModifiedTime)
+TEST_F(FileStatusCache, FindCachedEntry)
{
- cache.lastModifiedTime(header);
+ cache.find(header);
+
+ auto fileStatus = cache.find(header);
+
+ ASSERT_THAT(fileStatus, (FileStatus{header, headerFileSize, headerLastModifiedTime}));
+}
+
+TEST_F(FileStatusCache, LastModifiedTime)
+{
+ cache.find(header);
+
+ auto lastModifiedTime = cache.lastModifiedTime(header);
+
+ ASSERT_THAT(lastModifiedTime, headerLastModifiedTime);
+}
- auto lastModified = cache.lastModifiedTime(header);
+TEST_F(FileStatusCache, FileSize)
+{
+ cache.find(header);
+
+ auto fileSize = cache.fileSize(header);
- ASSERT_THAT(lastModified, headerLastModifiedTime);
+ ASSERT_THAT(fileSize, headerFileSize);
}
TEST_F(FileStatusCache, DontAddEntryTwice)
{
- cache.lastModifiedTime(header);
+ cache.find(header);
- cache.lastModifiedTime(header);
+ cache.find(header);
ASSERT_THAT(cache, SizeIs(1));
}
TEST_F(FileStatusCache, AddNewEntry)
{
- cache.lastModifiedTime(header);
+ cache.find(header);
- cache.lastModifiedTime(source);
+ cache.find(source);
ASSERT_THAT(cache, SizeIs(2));
}
TEST_F(FileStatusCache, AskNewEntryForLastModifiedTime)
{
- cache.lastModifiedTime(header);
+ cache.find(header);
- auto lastModified = cache.lastModifiedTime(source);
+ auto fileStatus = cache.find(source);
- ASSERT_THAT(lastModified, sourceLastModifiedTime);
+ ASSERT_THAT(fileStatus, (FileStatus{source, sourceFileSize, sourceLastModifiedTime}));
}
TEST_F(FileStatusCache, AddNewEntryReverseOrder)
{
- cache.lastModifiedTime(source);
+ cache.find(source);
- cache.lastModifiedTime(header);
+ cache.find(header);
ASSERT_THAT(cache, SizeIs(2));
}
TEST_F(FileStatusCache, AskNewEntryReverseOrderAddedForLastModifiedTime)
{
- cache.lastModifiedTime(source);
+ cache.find(source);
- auto lastModified = cache.lastModifiedTime(header);
+ auto fileStatus = cache.find(header);
- ASSERT_THAT(lastModified, headerLastModifiedTime);
+ ASSERT_THAT(fileStatus, (FileStatus{header, headerFileSize, headerLastModifiedTime}));
}
TEST_F(FileStatusCache, UpdateFile)
{
- EXPECT_CALL(fileSystem, lastModified(Eq(header)))
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header)))
.Times(2)
- .WillOnce(Return(headerLastModifiedTime))
- .WillOnce(Return(headerLastModifiedTime2));
+ .WillOnce(Return(FileStatus{header, headerFileSize, headerLastModifiedTime}))
+ .WillOnce(Return(FileStatus{header, headerFileSize2, headerLastModifiedTime2}));
cache.lastModifiedTime(header);
cache.update(header);
- ASSERT_THAT(cache.lastModifiedTime(header), headerLastModifiedTime2);
+ ASSERT_THAT(cache.find(header), (FileStatus{header, headerFileSize2, headerLastModifiedTime2}));
}
TEST_F(FileStatusCache, UpdateFileDoesNotChangeEntryCount)
{
- EXPECT_CALL(fileSystem, lastModified(Eq(header)))
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header)))
.Times(2)
- .WillOnce(Return(headerLastModifiedTime))
- .WillOnce(Return(headerLastModifiedTime2));
+ .WillOnce(Return(FileStatus{header, headerFileSize, headerLastModifiedTime}))
+ .WillOnce(Return(FileStatus{header, headerFileSize, headerLastModifiedTime2}));
cache.lastModifiedTime(header);
cache.update(header);
@@ -166,35 +195,36 @@ TEST_F(FileStatusCache, UpdateFileForNonExistingEntry)
ASSERT_THAT(cache, SizeIs(0));
}
-TEST_F(FileStatusCache, UpdateFiles)
+TEST_F(FileStatusCache, UpdateFileStats)
{
- EXPECT_CALL(fileSystem, lastModified(Eq(header)))
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header)))
.Times(2)
- .WillOnce(Return(headerLastModifiedTime))
- .WillOnce(Return(headerLastModifiedTime2));
- EXPECT_CALL(fileSystem, lastModified(Eq(header2)))
+ .WillOnce(Return(FileStatus{header, headerFileSize, headerLastModifiedTime}))
+ .WillOnce(Return(FileStatus{header, headerFileSize2, headerLastModifiedTime2}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header2)))
.Times(2)
- .WillOnce(Return(header2LastModifiedTime))
- .WillOnce(Return(header2LastModifiedTime2));
+ .WillOnce(Return(FileStatus{header2, header2FileSize, header2LastModifiedTime}))
+ .WillOnce(Return(FileStatus{header2, header2FileSize2, header2LastModifiedTime2}));
cache.lastModifiedTime(header);
cache.lastModifiedTime(header2);
cache.update(entries);
- ASSERT_THAT(cache.lastModifiedTime(header), headerLastModifiedTime2);
- ASSERT_THAT(cache.lastModifiedTime(header2), header2LastModifiedTime2);
+ ASSERT_THAT(cache.find(header), (FileStatus{header, headerFileSize2, headerLastModifiedTime2}));
+ ASSERT_THAT(cache.find(header2),
+ (FileStatus{header2, header2FileSize2, header2LastModifiedTime2}));
}
TEST_F(FileStatusCache, UpdateFilesDoesNotChangeEntryCount)
{
- EXPECT_CALL(fileSystem, lastModified(Eq(header)))
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header)))
.Times(2)
- .WillOnce(Return(headerLastModifiedTime))
- .WillOnce(Return(headerLastModifiedTime2));
- EXPECT_CALL(fileSystem, lastModified(Eq(header2)))
+ .WillOnce(Return(FileStatus{header, headerFileSize, headerLastModifiedTime}))
+ .WillOnce(Return(FileStatus{header, headerFileSize2, headerLastModifiedTime}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header2)))
.Times(2)
- .WillOnce(Return(header2LastModifiedTime))
- .WillOnce(Return(header2LastModifiedTime2));
+ .WillOnce(Return(FileStatus{header2, header2FileSize, header2LastModifiedTime}))
+ .WillOnce(Return(FileStatus{header2, header2FileSize2, header2LastModifiedTime}));
cache.lastModifiedTime(header);
cache.lastModifiedTime(header2);
@@ -237,18 +267,20 @@ TEST_F(FileStatusCache, SomeNewModifiedEntries)
TEST_F(FileStatusCache, SomeAlreadyExistingModifiedEntries)
{
- EXPECT_CALL(fileSystem, lastModified(Eq(header)))
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header)))
+ .Times(2)
+ .WillOnce(Return(FileStatus{header, headerFileSize, headerLastModifiedTime}))
+ .WillOnce(Return(FileStatus{header, headerFileSize2, headerLastModifiedTime}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header2)))
.Times(2)
- .WillOnce(Return(headerLastModifiedTime))
- .WillOnce(Return(headerLastModifiedTime2));
- EXPECT_CALL(fileSystem, lastModified(Eq(header2)))
+ .WillOnce(Return(FileStatus{header2, header2FileSize, header2LastModifiedTime}))
+ .WillOnce(Return(FileStatus{header2, header2FileSize2, header2LastModifiedTime}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(source)))
.Times(2)
- .WillOnce(Return(header2LastModifiedTime))
- .WillOnce(Return(header2LastModifiedTime2));
- EXPECT_CALL(fileSystem, lastModified(Eq(source))).Times(2).WillRepeatedly(Return(sourceLastModifiedTime));
- EXPECT_CALL(fileSystem, lastModified(Eq(source2)))
+ .WillRepeatedly(Return(FileStatus{source, sourceFileSize, sourceLastModifiedTime}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(source2)))
.Times(2)
- .WillRepeatedly(Return(source2LastModifiedTime));
+ .WillRepeatedly(Return(FileStatus{source2, source2FileSize, source2LastModifiedTime}));
cache.modified(entries);
auto modifiedIds = cache.modified(entries);
@@ -258,13 +290,17 @@ TEST_F(FileStatusCache, SomeAlreadyExistingModifiedEntries)
TEST_F(FileStatusCache, SomeAlreadyExistingAndSomeNewModifiedEntries)
{
- EXPECT_CALL(fileSystem, lastModified(Eq(header))).WillRepeatedly(Return(headerLastModifiedTime));
- EXPECT_CALL(fileSystem, lastModified(Eq(header2)))
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header)))
+ .WillRepeatedly(Return(FileStatus{header, headerFileSize, headerLastModifiedTime}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header2)))
.Times(2)
- .WillOnce(Return(header2LastModifiedTime))
- .WillOnce(Return(header2LastModifiedTime2));
- EXPECT_CALL(fileSystem, lastModified(Eq(source))).Times(2).WillRepeatedly(Return(sourceLastModifiedTime));
- EXPECT_CALL(fileSystem, lastModified(Eq(source2))).WillRepeatedly(Return(source2LastModifiedTime));
+ .WillOnce(Return(FileStatus{header2, header2FileSize, header2LastModifiedTime}))
+ .WillOnce(Return(FileStatus{header2, header2FileSize, header2LastModifiedTime2}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(source)))
+ .Times(2)
+ .WillRepeatedly(Return(FileStatus{source, sourceFileSize, sourceLastModifiedTime}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(source2)))
+ .WillRepeatedly(Return(FileStatus{source2, source2FileSize, source2LastModifiedTime}));
cache.modified({source, header2});
auto modifiedIds = cache.modified(entries);
@@ -274,23 +310,25 @@ TEST_F(FileStatusCache, SomeAlreadyExistingAndSomeNewModifiedEntries)
TEST_F(FileStatusCache, TimeIsUpdatedForSomeAlreadyExistingModifiedEntries)
{
- EXPECT_CALL(fileSystem, lastModified(Eq(header)))
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header)))
+ .Times(2)
+ .WillOnce(Return(FileStatus{header, headerFileSize, headerLastModifiedTime}))
+ .WillOnce(Return(FileStatus{header, headerFileSize2, headerLastModifiedTime2}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(header2)))
.Times(2)
- .WillOnce(Return(headerLastModifiedTime))
- .WillOnce(Return(headerLastModifiedTime2));
- EXPECT_CALL(fileSystem, lastModified(Eq(header2)))
+ .WillOnce(Return(FileStatus{header2, header2FileSize, header2LastModifiedTime}))
+ .WillOnce(Return(FileStatus{header2, header2FileSize2, header2LastModifiedTime2}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(source)))
.Times(2)
- .WillOnce(Return(header2LastModifiedTime))
- .WillOnce(Return(header2LastModifiedTime2));
- EXPECT_CALL(fileSystem, lastModified(Eq(source))).Times(2).WillRepeatedly(Return(sourceLastModifiedTime));
- EXPECT_CALL(fileSystem, lastModified(Eq(source2)))
+ .WillRepeatedly(Return(FileStatus{source, sourceFileSize, sourceLastModifiedTime}));
+ EXPECT_CALL(fileSystem, fileStatus(Eq(source2)))
.Times(2)
- .WillRepeatedly(Return(source2LastModifiedTime));
+ .WillRepeatedly(Return(FileStatus{source2, source2FileSize, source2LastModifiedTime}));
cache.modified(entries);
cache.modified(entries);
- ASSERT_THAT(cache.lastModifiedTime(header), headerLastModifiedTime2);
+ ASSERT_THAT(cache.find(header), (FileStatus{header, headerFileSize2, headerLastModifiedTime2}));
}
} // namespace
diff --git a/tests/unit/unittest/filesystemmock.h b/tests/unit/unittest/filesystemmock.h
index ffcf5e33a0..972f6af142 100644
--- a/tests/unit/unittest/filesystemmock.h
+++ b/tests/unit/unittest/filesystemmock.h
@@ -27,6 +27,7 @@
#include "googletest.h"
+#include <projectstorage/filestatus.h>
#include <projectstorage/filesysteminterface.h>
class FileSystemMock : public QmlDesigner::FileSystemInterface
@@ -36,6 +37,7 @@ public:
directoryEntries,
(const QString &directoryPath),
(const, override));
- MOCK_METHOD(long long, lastModified, (QmlDesigner::SourceId filePathId), (const, override));
- MOCK_METHOD(void, remove, (const QmlDesigner::SourceIds &filePathIds), (override));
+ MOCK_METHOD(long long, lastModified, (QmlDesigner::SourceId sourceId), (const, override));
+ MOCK_METHOD(QmlDesigner::FileStatus, fileStatus, (QmlDesigner::SourceId sourceId), (const, override));
+ MOCK_METHOD(void, remove, (const QmlDesigner::SourceIds &sourceIds), (override));
};
diff --git a/tests/unit/unittest/projectstorage-test.cpp b/tests/unit/unittest/projectstorage-test.cpp
index fa0218bad7..cacf69ff48 100644
--- a/tests/unit/unittest/projectstorage-test.cpp
+++ b/tests/unit/unittest/projectstorage-test.cpp
@@ -3915,4 +3915,28 @@ TEST_F(ProjectStorageSlowTest, ThrowForInvalidSourceId)
Sqlite::ConstraintPreventsModification);
}
+TEST_F(ProjectStorageSlowTest, FetchAllFileStatuses)
+{
+ setUpSourceIds();
+ FileStatus fileStatus1{sourceId1, 100, 100};
+ FileStatus fileStatus2{sourceId2, 101, 101};
+ storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus1, fileStatus2});
+
+ auto fileStatuses = convert(storage.fetchAllFileStatuses());
+
+ ASSERT_THAT(fileStatuses, ElementsAre(fileStatus1, fileStatus2));
+}
+
+TEST_F(ProjectStorageSlowTest, FetchAllFileStatusesReverse)
+{
+ setUpSourceIds();
+ FileStatus fileStatus1{sourceId1, 100, 100};
+ FileStatus fileStatus2{sourceId2, 101, 101};
+ storage.synchronize({}, {}, {}, {sourceId1, sourceId2}, {fileStatus2, fileStatus1});
+
+ auto fileStatuses = convert(storage.fetchAllFileStatuses());
+
+ ASSERT_THAT(fileStatuses, ElementsAre(fileStatus1, fileStatus2));
+}
+
} // namespace