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}