void test_attr_repo__get_one(void) { struct attr_expected test_cases[] = { { "root_test1", "repoattr", EXPECT_TRUE, NULL }, { "root_test1", "rootattr", EXPECT_TRUE, NULL }, { "root_test1", "missingattr", EXPECT_UNDEFINED, NULL }, { "root_test1", "subattr", EXPECT_UNDEFINED, NULL }, { "root_test1", "negattr", EXPECT_UNDEFINED, NULL }, { "root_test2", "repoattr", EXPECT_TRUE, NULL }, { "root_test2", "rootattr", EXPECT_FALSE, NULL }, { "root_test2", "missingattr", EXPECT_UNDEFINED, NULL }, { "root_test2", "multiattr", EXPECT_FALSE, NULL }, { "root_test3", "repoattr", EXPECT_TRUE, NULL }, { "root_test3", "rootattr", EXPECT_UNDEFINED, NULL }, { "root_test3", "multiattr", EXPECT_STRING, "3" }, { "root_test3", "multi2", EXPECT_UNDEFINED, NULL }, { "sub/subdir_test1", "repoattr", EXPECT_TRUE, NULL }, { "sub/subdir_test1", "rootattr", EXPECT_TRUE, NULL }, { "sub/subdir_test1", "missingattr", EXPECT_UNDEFINED, NULL }, { "sub/subdir_test1", "subattr", EXPECT_STRING, "yes" }, { "sub/subdir_test1", "negattr", EXPECT_FALSE, NULL }, { "sub/subdir_test1", "another", EXPECT_UNDEFINED, NULL }, { "sub/subdir_test2.txt", "repoattr", EXPECT_TRUE, NULL }, { "sub/subdir_test2.txt", "rootattr", EXPECT_TRUE, NULL }, { "sub/subdir_test2.txt", "missingattr", EXPECT_UNDEFINED, NULL }, { "sub/subdir_test2.txt", "subattr", EXPECT_STRING, "yes" }, { "sub/subdir_test2.txt", "negattr", EXPECT_FALSE, NULL }, { "sub/subdir_test2.txt", "another", EXPECT_STRING, "zero" }, { "sub/subdir_test2.txt", "reposub", EXPECT_TRUE, NULL }, { "sub/sub/subdir.txt", "another", EXPECT_STRING, "one" }, { "sub/sub/subdir.txt", "reposubsub", EXPECT_TRUE, NULL }, { "sub/sub/subdir.txt", "reposub", EXPECT_UNDEFINED, NULL }, { "does-not-exist", "foo", EXPECT_STRING, "yes" }, { "sub/deep/file", "deepdeep", EXPECT_TRUE, NULL }, { "sub/sub/d/no", "test", EXPECT_STRING, "a/b/d/*" }, { "sub/sub/d/yes", "test", EXPECT_UNDEFINED, NULL }, { NULL, NULL, 0, NULL } }, *scan; for (scan = test_cases; scan->path != NULL; scan++) { const char *value; cl_git_pass(git_attr_get(&value, g_repo, 0, scan->path, scan->attr)); attr_check_expected(scan->expected, scan->expected_str, scan->attr, value); } cl_assert(git_attr_cache__is_cached(g_repo, 0, ".git/info/attributes")); cl_assert(git_attr_cache__is_cached(g_repo, 0, ".gitattributes")); cl_assert(git_attr_cache__is_cached(g_repo, 0, "sub/.gitattributes")); }
static void check_one_assign( git_attr_file *file, int rule_idx, int assign_idx, const char *pattern, const char *name, enum attr_expect_t expected, const char *expected_str) { git_attr_rule *rule = get_rule(rule_idx); git_attr_assignment *assign = get_assign(rule, assign_idx); cl_assert_equal_s(pattern, rule->match.pattern); cl_assert(rule->assigns.length == 1); cl_assert_equal_s(name, assign->name); cl_assert(assign->name_hash == git_attr_file__name_hash(assign->name)); attr_check_expected(expected, expected_str, assign->value); }