1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// Copyright 2011 The Android Open Source Project 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski// 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/Vector.h> 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/KeyedVector.h> 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <iostream> 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <cassert> 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/String8.h> 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utility> 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "DirectoryWalker.h" 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "MockDirectoryWalker.h" 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include "FileFinder.h" 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing namespace android; 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing std::pair; 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing std::cout; 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiusing std::endl; 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiint main() 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski{ 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "\n\n STARTING FILE FINDER TESTS" << endl; 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 path("ApiDemos"); 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Storage to pass to findFiles() 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski KeyedVector<String8,time_t> testStorage; 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Mock Directory Walker initialization. First data, then sdw 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector< pair<String8,time_t> > data; 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski data.push( pair<String8,time_t>(String8("hello.png"),3) ); 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski data.push( pair<String8,time_t>(String8("world.PNG"),3) ); 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski data.push( pair<String8,time_t>(String8("foo.pNg"),3) ); 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Neither of these should be found 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski data.push( pair<String8,time_t>(String8("hello.jpg"),3) ); 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski data.push( pair<String8,time_t>(String8(".hidden.png"),3)); 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DirectoryWalker* sdw = new StringDirectoryWalker(path,data); 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Extensions to look for 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Vector<String8> exts; 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski exts.push(String8(".png")); 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski errno = 0; 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Make sure we get a valid mock directory walker 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Make sure we finish without errors 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Checking DirectoryWalker..."; 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski assert(sdw != NULL); 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "PASSED" << endl; 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Make sure we finish without errors 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Running findFiles()..."; 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool findStatus = FileFinder::findFiles(path,exts, testStorage, sdw); 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski assert(findStatus); 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "PASSED" << endl; 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski const size_t SIZE_EXPECTED = 3; 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Check to make sure we have the right number of things in our storage 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Running size comparison: Size is " << testStorage.size() << ", "; 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Expected " << SIZE_EXPECTED << "..."; 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if(testStorage.size() == SIZE_EXPECTED) 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "PASSED" << endl; 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski else { 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "FAILED" << endl; 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski errno++; 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Check to make sure that each of our found items has the right extension 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "Checking Returned Extensions..."; 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool extsOkay = true; 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 wrongExts; 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski for (size_t i = 0; i < SIZE_EXPECTED; ++i) { 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String8 testExt(testStorage.keyAt(i).getPathExtension()); 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski testExt.toLower(); 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (testExt != ".png") { 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski wrongExts += testStorage.keyAt(i); 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski wrongExts += "\n"; 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski extsOkay = false; 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (extsOkay) 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "PASSED" << endl; 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski else { 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "FAILED" << endl; 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "The following extensions didn't check out" << endl << wrongExts; 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Clean up 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski delete sdw; 94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if(errno == 0) { 96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << "ALL TESTS PASSED" << endl; 97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski cout << errno << " TESTS FAILED" << endl; 99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return errno; 101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}