You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.6 KiB
85 lines
2.6 KiB
4 months ago
|
//
|
||
|
// Copyright 2011 The Android Open Source Project
|
||
|
//
|
||
|
#ifndef MOCKDIRECTORYWALKER_H
|
||
|
#define MOCKDIRECTORYWALKER_H
|
||
|
|
||
|
#include <utils/Vector.h>
|
||
|
#include <utils/String8.h>
|
||
|
#include <utility>
|
||
|
#include "DirectoryWalker.h"
|
||
|
|
||
|
using namespace android;
|
||
|
using std::pair;
|
||
|
|
||
|
// String8 Directory Walker
|
||
|
// This is an implementation of the Directory Walker abstraction that is built
|
||
|
// for testing.
|
||
|
// Instead of system calls it queries a private data structure for the directory
|
||
|
// entries. It takes a path and a map of filenames and their modification times.
|
||
|
// functions are inlined since they are short and simple
|
||
|
|
||
|
class StringDirectoryWalker : public DirectoryWalker {
|
||
|
public:
|
||
|
StringDirectoryWalker(String8& path, Vector< pair<String8,time_t> >& data)
|
||
|
: mPos(0), mBasePath(path), mData(data) {
|
||
|
//fprintf(stdout,"StringDW built to mimic %s with %d files\n",
|
||
|
// mBasePath.string());
|
||
|
};
|
||
|
// Default copy constructor, and destructor are fine
|
||
|
|
||
|
virtual bool openDir(String8 path) {
|
||
|
// If the user is trying to query the "directory" that this
|
||
|
// walker was initialized with, then return success. Else fail.
|
||
|
return path == mBasePath;
|
||
|
};
|
||
|
virtual bool openDir(const char* path) {
|
||
|
String8 p(path);
|
||
|
openDir(p);
|
||
|
return true;
|
||
|
};
|
||
|
// Advance to next entry in the Vector
|
||
|
virtual struct dirent* nextEntry() {
|
||
|
// Advance position and check to see if we're done
|
||
|
if (mPos >= mData.size())
|
||
|
return NULL;
|
||
|
|
||
|
// Place data in the entry descriptor. This class only returns files.
|
||
|
mEntry.d_type = DT_REG;
|
||
|
mEntry.d_ino = mPos;
|
||
|
// Copy chars from the string name to the entry name
|
||
|
size_t i = 0;
|
||
|
for (i; i < mData[mPos].first.size(); ++i)
|
||
|
mEntry.d_name[i] = mData[mPos].first[i];
|
||
|
mEntry.d_name[i] = '\0';
|
||
|
|
||
|
// Place data in stats
|
||
|
mStats.st_ino = mPos;
|
||
|
mStats.st_mtime = mData[mPos].second;
|
||
|
|
||
|
// Get ready to move to the next entry
|
||
|
mPos++;
|
||
|
|
||
|
return &mEntry;
|
||
|
};
|
||
|
// Get the stats for the current entry
|
||
|
virtual struct stat* entryStats() {
|
||
|
return &mStats;
|
||
|
};
|
||
|
// Nothing to do in clean up
|
||
|
virtual void closeDir() {
|
||
|
// Nothing to do
|
||
|
};
|
||
|
virtual DirectoryWalker* clone() {
|
||
|
return new StringDirectoryWalker(*this);
|
||
|
};
|
||
|
private:
|
||
|
// Current position in the Vector
|
||
|
size_t mPos;
|
||
|
// Base path
|
||
|
String8 mBasePath;
|
||
|
// Data to simulate a directory full of files.
|
||
|
Vector< pair<String8,time_t> > mData;
|
||
|
};
|
||
|
|
||
|
#endif // MOCKDIRECTORYWALKER_H
|