Files
textmate/Frameworks/Find/tests/t_scan_path.cc
Allan Odgaard 9894969e67 Initial commit
2012-08-09 16:25:56 +02:00

162 lines
4.3 KiB
C++

#include <test/jail.h>
#include "../src/scan_path.h"
using namespace find;
class ScanPathTestSuite : public CxxTest::TestSuite
{
static void run_scanner (scan_path_t& scanner)
{
scanner.start();
while(scanner.is_running()) sleep(0);
}
public:
void test_simple ()
{
test::jail_t jail;
jail.set_content("matches", "text");
jail.touch("dummy");
scan_path_t scanner;
scanner.set_string("text");
scanner.set_folder_options(folder_scan_settings_t(jail.path()));
run_scanner(scanner);
scan_path_matches_t matches = scanner.accept_matches();
TS_ASSERT_EQUALS(matches.size(), 1);
TS_ASSERT_EQUALS(scanner.get_scanned_file_count(), 2);
TS_ASSERT_EQUALS(matches.begin()->first->path(), jail.path("matches"));
}
void test_globs ()
{
test::jail_t jail;
jail.set_content("text.x", "text");
jail.set_content("text.y", "text");
jail.set_content("text.z", "dsalkdalsjas");
scan_path_t scanner;
scanner.set_string("text");
scanner.set_folder_options(folder_scan_settings_t(jail.path(), "*.{x,z}"));
run_scanner(scanner);
scan_path_matches_t matches = scanner.accept_matches();
TS_ASSERT_EQUALS(matches.size(), 1);
TS_ASSERT_EQUALS(scanner.get_scanned_file_count(), 2);
TS_ASSERT_EQUALS(matches.begin()->first->path(), jail.path("text.x"));
}
void test_exclude_globs ()
{
test::jail_t jail;
jail.set_content("text.x", "text");
jail.set_content("text.y", "text");
jail.set_content("text.z", "text");
scan_path_t scanner;
scanner.set_string("text");
scanner.set_folder_options(folder_scan_settings_t(jail.path(), "*", "*.y"));
run_scanner(scanner);
scan_path_matches_t matches = scanner.accept_matches();
TS_ASSERT_EQUALS(scanner.get_scanned_file_count(), 2);
TS_ASSERT_EQUALS(matches.size(), 2);
TS_ASSERT_EQUALS(matches[0].first->path(), jail.path("text.x"));
TS_ASSERT_EQUALS(matches[1].first->path(), jail.path("text.z"));
}
void test_ignore_hidden ()
{
test::jail_t jail;
jail.set_content("visible", "text");
jail.set_content(".hidden/hidden", "text");
scan_path_matches_t matches;
folder_scan_settings_t search(jail.path());
scan_path_t scanner;
scanner.set_string("text");
scanner.set_folder_options(search);
run_scanner(scanner);
matches = scanner.accept_matches();
TS_ASSERT_EQUALS(matches.size(), 1);
TS_ASSERT_EQUALS(scanner.get_scanned_file_count(), 1);
scan_path_t hidden_scanner;
hidden_scanner.set_string("text");
search.skip_hidden_folders = false;
hidden_scanner.set_folder_options(search);
run_scanner(hidden_scanner);
matches = hidden_scanner.accept_matches();
TS_ASSERT_EQUALS(matches.size(), 2);
TS_ASSERT_EQUALS(hidden_scanner.get_scanned_file_count(), 2);
}
void test_follow_links ()
{
test::jail_t jail;
jail.touch("start/foo.txt");
jail.set_content("linked/match.txt", "text");
jail.ln("start/link", "linked");
scan_path_matches_t matches;
folder_scan_settings_t search(jail.path("start"));
scan_path_t scanner;
scanner.set_string("text");
scanner.set_folder_options(search);
run_scanner(scanner);
matches = scanner.accept_matches();
TS_ASSERT_EQUALS(matches.size(), 0);
TS_ASSERT_EQUALS(scanner.get_scanned_file_count(), 1);
scan_path_t follow_scanner;
search.follow_links = true;
follow_scanner.set_string("text");
follow_scanner.set_folder_options(search);
run_scanner(follow_scanner);
matches = follow_scanner.accept_matches();
TS_ASSERT_EQUALS(matches.size(), 1);
TS_ASSERT_EQUALS(follow_scanner.get_scanned_file_count(), 2);
}
void test_file_links_are_skipped ()
{
test::jail_t jail;
jail.set_content("match", "text");
jail.ln("link", "match");
scan_path_t scanner;
scanner.set_string("text");
scanner.set_folder_options(folder_scan_settings_t(jail.path()));
run_scanner(scanner);
scan_path_matches_t matches = scanner.accept_matches();
TS_ASSERT_EQUALS(matches.size(), 1);
TS_ASSERT_EQUALS(scanner.get_scanned_file_count(), 1);
}
void test_duplicate_links ()
{
test::jail_t jail;
jail.set_content("dir/match.txt", "text");
jail.ln("link", "dir");
folder_scan_settings_t search(jail.path());
search.follow_links = true;
scan_path_t scanner;
scanner.set_string("text");
scanner.set_folder_options(search);
run_scanner(scanner);
scan_path_matches_t matches = scanner.accept_matches();
TS_ASSERT_EQUALS(matches.size(), 1);
TS_ASSERT_EQUALS(scanner.get_scanned_file_count(), 1);
}
};