# # # delete "tests/t_annotate.at" # # delete "tests/t_annotate_add_collision.at" # # delete "tests/t_automate_graph.at" # # delete "tests/t_automate_select.at" # # delete "tests/t_cvsimport_manifest_cycle.at" # # delete "tests/t_i18n_file_data.at" # # delete "tests/t_merge_6.at" # # delete "tests/t_parents_children.at" # # delete "tests/t_refresh_inodeprints.at" # # delete "tests/t_replace_dir_with_file.at" # # delete "tests/t_select_cert.at" # # add_dir "tester-tests" # # add_dir "tester-tests/isolated-1" # # add_dir "tester-tests/isolated-2" # # add_dir "tests/annotate_file_added_on_different_forks" # # add_dir "tests/annotate_file_on_multirooted_branch" # # add_dir "tests/automate_graph" # # add_dir "tests/automate_parents,_automate_children" # # add_dir "tests/check_automate_select" # # add_dir "tests/cvs_import,_file_dead_on_head_and_branch" # # add_dir "tests/files_with_non-utf8_data" # # add_dir "tests/refresh_inodeprints" # # add_dir "tests/replace_dir_with_file" # # add_dir "tests/selecting_arbitrary_certs" # # add_dir "tests/test_a_merge_6" # # add_dir "tests/test_annotate_command" # # add_file "tester-tests/isolated-1/__driver__.lua" # content [f582bd30540a6f07049350746a4d1483e6b36344] # # add_file "tester-tests/isolated-2/__driver__.lua" # content [aa6bd61b18da39a7114da0a676821473c6733b8c] # # add_file "tester-testsuite.lua" # content [f8a219a25dfb1fec89bec2ff3b85ebde3a2c26a1] # # add_file "tests/annotate_file_added_on_different_forks/__driver__.lua" # content [7132c73a634f4177341e425e7e1cc3e5d0587cb6] # # add_file "tests/annotate_file_added_on_different_forks/merge2.lua" # content [0896b763b593a7ab9bd557d9ecabe9a1ef829b0d] # # add_file "tests/annotate_file_on_multirooted_branch/__driver__.lua" # content [bc707ef27d41d3772036e81d3d65c7688c4d3427] # # add_file "tests/annotate_file_on_multirooted_branch/merge2.lua" # content [0896b763b593a7ab9bd557d9ecabe9a1ef829b0d] # # add_file "tests/automate_graph/__driver__.lua" # content [de3087c9f744a1e67622ecf74f2c054eaad14067] # # add_file "tests/automate_parents,_automate_children/__driver__.lua" # content [09b9184690bb407e31001cd30e3f2e38be5dc246] # # add_file "tests/check_automate_select/__driver__.lua" # content [4dc5db986595c5884649c0fd5891f3efe9d2e202] # # add_file "tests/cvs_import,_file_dead_on_head_and_branch/__driver__.lua" # content [7512f38263010410cc684fb08ebcf0405e82d219] # # add_file "tests/cvs_import,_file_dead_on_head_and_branch/cvsfile,v" # content [d18c0fcf499ab48faa214eaed8bf1a995db94f99] # # add_file "tests/files_with_non-utf8_data/8859-5.lua" # content [827d0a82ae3262a9adbfe490934073b515025983] # # add_file "tests/files_with_non-utf8_data/__driver__.lua" # content [a3f8e37d1f760834a6c013ca9e65489a99538c00] # # add_file "tests/files_with_non-utf8_data/euc.lua" # content [47eacf18b5380cc9826c924fb046b480d3d1b304] # # add_file "tests/files_with_non-utf8_data/jp-euc" # content [b9e1e5ffbef18b7a3252e71d04fdafbd1790bb81] # # add_file "tests/files_with_non-utf8_data/jp-utf8" # content [e6376334ec51caaeba478b186a5958576f930df4] # # add_file "tests/files_with_non-utf8_data/ru-8859-5" # content [b9f87331fe48b7f9cb252a1dcf5eeaeb0f62823a] # # add_file "tests/files_with_non-utf8_data/ru-utf8" # content [13f0fe90bc58c685dc306f535c17e5773edc1e34] # # add_file "tests/refresh_inodeprints/__driver__.lua" # content [c258a2f89893ea52c5f2ca862afbeb73991d76d3] # # add_file "tests/replace_dir_with_file/__driver__.lua" # content [b4071a8d33cbc1be522a83e64a082bb33092462e] # # add_file "tests/selecting_arbitrary_certs/__driver__.lua" # content [195927862f019a75ae9863e0b529c336c5157a3a] # # add_file "tests/test_a_merge_6/__driver__.lua" # content [367c8ce3f9506adb5f45a9c9dff9a766e182a598] # # add_file "tests/test_a_merge_6/correct" # content [02b878566b25626ea34f713410de7be144b5b8a2] # # add_file "tests/test_a_merge_6/left" # content [02b878566b25626ea34f713410de7be144b5b8a2] # # add_file "tests/test_a_merge_6/parent" # content [2f3a59a0c435f7c724938b9af94cbe2e9bd9d75d] # # add_file "tests/test_a_merge_6/right" # content [68522d49d31cf65162e9d3e28fec43b3ed6bbcc9] # # add_file "tests/test_annotate_command/__driver__.lua" # content [21c71d956803b81d311de5620ae64f34361d0011] # # patch "tester.lua" # from [c914b3f1af823b09b3891af2bdc67399880f47b3] # to [5f1a016857d523931cf04c1e8fe806438a22f1bb] # # patch "tests/common/automate_ancestry.lua" # from [44980fb300dd64a7ef6fb3cf3fd9c9152953b084] # to [e63c51355db5f8979cb41cd5da88c8d577a6f47c] # # patch "tests/cvs_import_with_file_added_on_a_branch/__driver__.lua" # from [a5ec6556f74851b3018f82b88d84f50d4d5857bd] # to [82696ecdfff800d9d21d8e02338707669be85afe] # # patch "tests/importing_CVS_files/__driver__.lua" # from [b29bac5aeb02c39454b51e0982c1a9911c85bf63] # to [c6e11c43ae0592336f00ab6cf3137eb07af08d35] # # patch "tests/importing_CVS_files_with_identical_logs/__driver__.lua" # from [c449f049d81e25cd714aa8214b2f25eab4ef289d] # to [71e157f3608dfd02f409c731488a38315f21ab2b] # # patch "tests/importing_a_CVS_file_with_one_version/__driver__.lua" # from [6c24fc69840226c7d8562d20ed93d4b8930baf97] # to [57b8aba74589feb66dc8e04b7cde5dab829685e0] # # patch "tests/multiple_version_committing/__driver__.lua" # from [511ce318109104c815f97bd757e1481ee611defa] # to [dfdbbe5150d201036cb784160c3cfbfd721ff3ff] # # patch "tests/short_options_work_correctly/__driver__.lua" # from [42d40c67ca2f855414d90caf721881601cbc01f6] # to [2ff2788145feea06d2e1336846ca22cdcc3fa37c] # # patch "testsuite.at" # from [e5b152248b57e3ac8d832332768b78b3ab506e7e] # to [e1d480848ba13a47d78d8fc4ec11d04a947d243f] # # patch "testsuite.lua" # from [91d769df7d4261ec468ef74c45d589f9f6376fc9] # to [223f17f5d715b17032c40abffd99eebaa9b3b8b8] # ============================================================ --- tester-tests/isolated-1/__driver__.lua f582bd30540a6f07049350746a4d1483e6b36344 +++ tester-tests/isolated-1/__driver__.lua f582bd30540a6f07049350746a4d1483e6b36344 @@ -0,0 +1,12 @@ + +-- functions can be redefined +foo = "bar" +old_L = L +L = function () old_mkdir("xxx") end +mkdir("bar") -- calls L() +L = old_L +check(exists("xxx")) + +-- part 1: edit some globals for the next test... +foo = "bar" +L = nil ============================================================ --- tester-tests/isolated-2/__driver__.lua aa6bd61b18da39a7114da0a676821473c6733b8c +++ tester-tests/isolated-2/__driver__.lua aa6bd61b18da39a7114da0a676821473c6733b8c @@ -0,0 +1,6 @@ + +-- part 2: ...check that those globals have been reset +check(foo == nil) +mkdir("abc") +check(not exists("xxx")) +L("...") -- "attempt to call nil value" ============================================================ --- tester-testsuite.lua f8a219a25dfb1fec89bec2ff3b85ebde3a2c26a1 +++ tester-testsuite.lua f8a219a25dfb1fec89bec2ff3b85ebde3a2c26a1 @@ -0,0 +1,3 @@ + +table.insert(tests, "tester-tests/isolated-1") +table.insert(tests, "tester-tests/isolated-2") ============================================================ --- tests/annotate_file_added_on_different_forks/__driver__.lua 7132c73a634f4177341e425e7e1cc3e5d0587cb6 +++ tests/annotate_file_added_on_different_forks/__driver__.lua 7132c73a634f4177341e425e7e1cc3e5d0587cb6 @@ -0,0 +1,41 @@ + +mtn_setup() + +-- This test relies on file-suturing + +writefile("foo.left", "z\na\nb\nx\n") +writefile("foo.right", "z\nj\nk\nx\n") + +addfile("initialfile", "a\nb\nc\n") +commit() +base = base_revision() + + +copyfile("foo.left", "foo") +check(mtn("add", "foo"), 0, false, false) +commit() +left = base_revision() + +revert_to(base) +copyfile("foo.right", "foo") +check(mtn("add", "foo"), 0, false, false) +commit() +right = base_revision() + +getfile("merge2.lua") + +xfail_if(true, mtn("--rcfile=merge2.lua", "merge"), 0, false, false) +check(mtn("update"), 0, false, false) +merge = base_revision() + +-- +-- annotate foo should now be +-- REVC: z +-- REVL: a +-- REVR: k +-- REVC: x +-- +-- where REVC (choice) is either REVL or REVR + +check(mtn("annotate", "foo"), 0, true, false) +check(greplines("stdout", {"", left, right, ""})) ============================================================ --- tests/annotate_file_added_on_different_forks/merge2.lua 0896b763b593a7ab9bd557d9ecabe9a1ef829b0d +++ tests/annotate_file_added_on_different_forks/merge2.lua 0896b763b593a7ab9bd557d9ecabe9a1ef829b0d @@ -0,0 +1,4 @@ +function merge2 (left, right) + data = "z\na\nk\nx\n" + return data +end ============================================================ --- tests/annotate_file_on_multirooted_branch/__driver__.lua bc707ef27d41d3772036e81d3d65c7688c4d3427 +++ tests/annotate_file_on_multirooted_branch/__driver__.lua bc707ef27d41d3772036e81d3d65c7688c4d3427 @@ -0,0 +1,46 @@ + +mtn_setup() + +-- This test relies on file-suturing + +-- +-- If two people begin a branch with the same name, +-- then the branch does not have a unique root. If they +-- also happened to both add a file with some shared and +-- some differing lines, we must do the right thing. +-- + +writefile("foo.left", "z\na\nb\nx\n") +writefile("foo.right", "z\nj\nk\nx\n") + +copyfile("foo.left", "foo") +check(mtn("add", "foo"), 0, false, false) +commit() +left = base_revision() + +remove("foo") +remove_recursive("_MTN") +check(mtn("setup", "--branch=testbranch", ".")) + +copyfile("foo.right", "foo") +check(mtn("add", "foo"), 0, false, false) +commit() +right = base_revision() + +getfile("merge2.lua") + +xfail_if(true, mtn("--rcfile=merge2.lua", "merge"), 0, false, false) +check(mtn("update"), 0, false, false) +merge = base_revision() + +-- +-- annotate foo should now be +-- REVC: z +-- REVL: a +-- REVR: k +-- REVC: x +-- +-- where REVC (choice) is either REVL or REVR + +check(mtn("annotate", "foo"), 0, true, false) +check(greplines("stdout", {"", left, right, ""})) ============================================================ --- tests/annotate_file_on_multirooted_branch/merge2.lua 0896b763b593a7ab9bd557d9ecabe9a1ef829b0d +++ tests/annotate_file_on_multirooted_branch/merge2.lua 0896b763b593a7ab9bd557d9ecabe9a1ef829b0d @@ -0,0 +1,4 @@ +function merge2 (left, right) + data = "z\na\nk\nx\n" + return data +end ============================================================ --- tests/automate_graph/__driver__.lua de3087c9f744a1e67622ecf74f2c054eaad14067 +++ tests/automate_graph/__driver__.lua de3087c9f744a1e67622ecf74f2c054eaad14067 @@ -0,0 +1,32 @@ + +mtn_setup() + +check(mtn("automate", "graph"), 0, 0, false) + +-- A +-- / \ +-- B C +-- |\ +-- D E +-- \/ +-- F +runstdfile("tests/common/automate_ancestry.lua") + +revs = make_graph() + +-- Now do some checks + +check(mtn("automate", "graph"), 0, true, false) +canonicalize("stdout") +de = {revs.d, revs.e} +table.sort(de) +lines = {revs.a, + revs.b.." "..revs.a, + revs.c.." "..revs.a, + revs.d.." "..revs.c, + revs.e.." "..revs.c, + revs.f.." "..table.concat(de, " ")} +table.sort(lines) +writefile("graph", table.concat(lines, "\n").."\n") + +check(samefile("stdout", "graph")) ============================================================ --- tests/automate_parents,_automate_children/__driver__.lua 09b9184690bb407e31001cd30e3f2e38be5dc246 +++ tests/automate_parents,_automate_children/__driver__.lua 09b9184690bb407e31001cd30e3f2e38be5dc246 @@ -0,0 +1,30 @@ + +mtn_setup() + +check(mtn("automate", "parents", "c7539264e83c5d6af4c792f079b5d46e9c128665"), 1, false, false) +check(mtn("automate", "children", "c7539264e83c5d6af4c792f079b5d46e9c128665"), 1, false, false) + +-- A +-- / \ +-- B C +-- |\ +-- D E +-- \/ +-- F +runstdfile("tests/common/automate_ancestry.lua") + +revs = make_graph() + +-- Now do some checks +revmap("parents", {revs.a}, {}) +revmap("children", {revs.b}, {}) +revmap("children", {revs.f}, {}) +revmap("parents", {revs.b}, {revs.a}) +revmap("parents", {revs.c}, {revs.a}) +revmap("parents", {revs.d}, {revs.c}) +revmap("parents", {revs.e}, {revs.c}) +revmap("parents", {revs.f}, {revs.d, revs.e}) +revmap("children", {revs.d}, {revs.f}) +revmap("children", {revs.e}, {revs.f}) +revmap("children", {revs.c}, {revs.d, revs.e}) +revmap("children", {revs.a}, {revs.b, revs.c}) ============================================================ --- tests/check_automate_select/__driver__.lua 4dc5db986595c5884649c0fd5891f3efe9d2e202 +++ tests/check_automate_select/__driver__.lua 4dc5db986595c5884649c0fd5891f3efe9d2e202 @@ -0,0 +1,37 @@ + +mtn_setup() +revs = {} + +addfile("testfile", "this is just a file") +copyfile("testfile", "testfile1") +commit() +revs.first = base_revision() + +writefile("testfile", "Now, this is a different file") +copyfile("testfile", "testfile2") +commit() +revs.second = base_revision() + +writefile("testfile", "And we change it a third time") +copyfile("testfile", "testfile3") +commit() + +check(mtn("cert", revs.first, "testcert", 'value=with=equal=signs')) +check(mtn("cert", revs.second, "testcert", 'value')) + +-- Check that inexact values fail... +check(mtn("automate", "select", "c:testcert=value="), 0, true, false) +check(numlines("stdout") == 0) + +-- Check that wild cards succeed (this one becomes a misuse, because it will +-- match two revisions)... +check(mtn("automate", "select", "c:testcert=value*"), 0, true, false) +check(numlines("stdout") == 2) + +-- Check that no value succeeds... +check(mtn("automate", "select", "c:testcert"), 0, true, false) +check(numlines("stdout") == 2) + +-- Check that exact value succeed... +check(mtn("automate", "select", "c:testcert=value"), 0, true, false) +check(numlines("stdout") == 1) ============================================================ --- tests/cvs_import,_file_dead_on_head_and_branch/__driver__.lua 7512f38263010410cc684fb08ebcf0405e82d219 +++ tests/cvs_import,_file_dead_on_head_and_branch/__driver__.lua 7512f38263010410cc684fb08ebcf0405e82d219 @@ -0,0 +1,25 @@ + +skip_if(not existsonpath("cvs")) +mtn_setup() + +cvsroot = test.root.."/cvs-repository" +function cvs(...) + return {"cvs", "-d", cvsroot, unpack(arg)} +end + +check(cvs("-q", "init"), 0, false, false) +check(exists(cvsroot)) +check(exists(cvsroot.."/CVSROOT")) +check(exists(cvsroot.."/CVSROOT/modules")) + +mkdir(cvsroot.."/attest") +getfile("cvsfile,v", cvsroot.."/attest/cvsfile,v") + +check(cvs("co", "-rABC_BASE", "attest"), 0, false, false) +tsha = sha1("attest/cvsfile") + +-- import into monotone and check presence of files + +check(mtn("--branch=testbranch", "cvs_import", cvsroot.."/attest"), 0, false, false) + +check(mtn("automate", "get_file", tsha), 0, false) ============================================================ --- tests/cvs_import,_file_dead_on_head_and_branch/cvsfile,v d18c0fcf499ab48faa214eaed8bf1a995db94f99 +++ tests/cvs_import,_file_dead_on_head_and_branch/cvsfile,v d18c0fcf499ab48faa214eaed8bf1a995db94f99 @@ -0,0 +1,68 @@ +head 1.2; +access; +symbols + ABC_SYNC_A:1.2 + ABC_SYNC_B:1.2 + ZZZ_SYNC_A:1.2 + ZZZ_SYNC_B:1.2 + XYZZYX_1_9:1.1.0.10 + XYZZYX_1_9_BASE:1.1 + XYZZYX_1_8:1.1.0.8 + XYZZYX_1_8_BASE:1.1 + XYZZYX_1_7:1.1.0.6 + XYZZYX_1_7_BASE:1.1 + ABC:1.1.0.4 + ABC_BASE:1.1 + vndr_19991208:1.1 + XYZZYX_1_6:1.1.0.2 + XYZZYX_1_6_BASE:1.1; +locks; strict; +comment @# @; + + +1.2 +date 2001.05.29.22.09.32; author mouse; state dead; +branches; +next 1.1; + +1.1 +date 99.09.11.21.41.31; author mouse; state Exp; +branches + 1.1.4.1; +next ; + +1.1.4.1 +date 2001.07.04.10.17.35; author santa; state dead; +branches; +next ; + + +desc +@@ + + +1.2 +log address@hidden file. +@ +text address@hidden is a line of text. +@ + + +1.1 +log address@hidden file. +@ +text +@@ + + +1.1.4.1 +log address@hidden head of trunk into ABC branch. +@ +text +@@ + + ============================================================ --- tests/files_with_non-utf8_data/8859-5.lua 827d0a82ae3262a9adbfe490934073b515025983 +++ tests/files_with_non-utf8_data/8859-5.lua 827d0a82ae3262a9adbfe490934073b515025983 @@ -0,0 +1,3 @@ +function get_charset_conv(name) + return { "UTF-8", "ISO-8859-5" } +end ============================================================ --- tests/files_with_non-utf8_data/__driver__.lua a3f8e37d1f760834a6c013ca9e65489a99538c00 +++ tests/files_with_non-utf8_data/__driver__.lua a3f8e37d1f760834a6c013ca9e65489a99538c00 @@ -0,0 +1,37 @@ + +mtn_setup() + +getfile("ru-8859-5") +getfile("ru-utf8") +getfile("jp-euc") +getfile("jp-utf8") + +getfile("8859-5.lua") +getfile("euc.lua") + +-- Create a mock base revision to revert back to +addfile("blah", "foo foo") +commit() +base = base_revision() + +-- Test 8859-5 (Russian) conversions. + +check(mtn("--rcfile=8859-5.lua", "add", "ru-8859-5"), 0, false, false) +check(mtn("--rcfile=8859-5.lua", "commit", "--message=foo"), 0, false, false) +ru = base_revision() +check(mtn("--rcfile=8859-5.lua", "checkout", "--revision", ru, "co-ru-8859-5"), 0, false, false) +check(samefile("ru-8859-5", "co-ru-8859-5/ru-8859-5")) +check(mtn("checkout", "--revision", ru, "co-ru-utf8"), 0, false, false) +check(samefile("ru-utf8", "co-ru-utf8/ru-8859-5")) + +revert_to(base) + +-- Test EUC-JP (Japanese) conversions. + +check(mtn("--rcfile=euc.lua", "add", "jp-euc"), 0, false, false) +check(mtn("--rcfile=euc.lua", "commit", "--message=foo"), 0, false, false) +jp = base_revision() +check(mtn("--rcfile=euc.lua", "checkout", "--revision", jp, "co-jp-euc"), 0, false, false) +check(samefile("jp-euc", "co-jp-euc/jp-euc")) +check(mtn("checkout", "--revision", jp, "co-jp-utf8"), 0, false, false) +check(samefile("jp-utf8", "co-jp-utf8/jp-euc")) ============================================================ --- tests/files_with_non-utf8_data/euc.lua 47eacf18b5380cc9826c924fb046b480d3d1b304 +++ tests/files_with_non-utf8_data/euc.lua 47eacf18b5380cc9826c924fb046b480d3d1b304 @@ -0,0 +1,3 @@ +function get_charset_conv(name) + return { "UTF-8", "EUC-JP" } +end ============================================================ --- tests/files_with_non-utf8_data/jp-euc b9e1e5ffbef18b7a3252e71d04fdafbd1790bb81 +++ tests/files_with_non-utf8_data/jp-euc b9e1e5ffbef18b7a3252e71d04fdafbd1790bb81 @@ -0,0 +1,1 @@ +¤³¤ì¤ÏEUC-JP¤Ç¥³¡¼¥Ç¥£¥ó¥°¤µ¤ì¤¿ÆüËܸì¤Î¥Õ¥¡¥¤¥ë¤Ç¤¹¡£ ============================================================ --- tests/files_with_non-utf8_data/jp-utf8 e6376334ec51caaeba478b186a5958576f930df4 +++ tests/files_with_non-utf8_data/jp-utf8 e6376334ec51caaeba478b186a5958576f930df4 @@ -0,0 +1,1 @@ +これはEUC-JPでコーディングされた日本語のファイルです。 ============================================================ --- tests/files_with_non-utf8_data/ru-8859-5 b9f87331fe48b7f9cb252a1dcf5eeaeb0f62823a +++ tests/files_with_non-utf8_data/ru-8859-5 b9f87331fe48b7f9cb252a1dcf5eeaeb0f62823a @@ -0,0 +1,11 @@ +Russian alphabet. +ISO-8859-5 character set. + +Small letters: + +Ð Ñ Ò Ó Ô Õ ñ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï + +Capital letters: + +° ± ² ³ ´ µ ¡ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï + ============================================================ --- tests/files_with_non-utf8_data/ru-utf8 13f0fe90bc58c685dc306f535c17e5773edc1e34 +++ tests/files_with_non-utf8_data/ru-utf8 13f0fe90bc58c685dc306f535c17e5773edc1e34 @@ -0,0 +1,11 @@ +Russian alphabet. +ISO-8859-5 character set. + +Small letters: + +а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я + +Capital letters: + +А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Ð¥ Ц Ч Ш Щ Ъ Ы Ь Э Ю Я + ============================================================ --- tests/refresh_inodeprints/__driver__.lua c258a2f89893ea52c5f2ca862afbeb73991d76d3 +++ tests/refresh_inodeprints/__driver__.lua c258a2f89893ea52c5f2ca862afbeb73991d76d3 @@ -0,0 +1,11 @@ + +mtn_setup() + +addfile("testfile", "blah blah") +commit() + +check(not exists("_MTN/inodeprints")) + +check(mtn("refresh_inodeprints")) +check(exists("_MTN/inodeprints")) +check(fsize("_MTN/inodeprints") ~= 0) ============================================================ --- tests/replace_dir_with_file/__driver__.lua b4071a8d33cbc1be522a83e64a082bb33092462e +++ tests/replace_dir_with_file/__driver__.lua b4071a8d33cbc1be522a83e64a082bb33092462e @@ -0,0 +1,12 @@ + +mtn_setup() + +mkdir("dir") +addfile("dir/file", "file") +commit() + +remove_recursive("dir") +writefile("dir", "this isn't a directory") + +check(mtn("status"), 1, false, false) +check(mtn("diff"), 1, false, false) ============================================================ --- tests/selecting_arbitrary_certs/__driver__.lua 195927862f019a75ae9863e0b529c336c5157a3a +++ tests/selecting_arbitrary_certs/__driver__.lua 195927862f019a75ae9863e0b529c336c5157a3a @@ -0,0 +1,45 @@ + +mtn_setup() +revs = {} + +addfile("testfile", "this is just a file") +copyfile("testfile", "testfile1") +commit() +revs.first = base_revision() + +writefile("testfile", "Now, this is a different file") +copyfile("testfile", "testfile2") +commit() +revs.second = base_revision() + +writefile("testfile", "And we change it a third time") +copyfile("testfile", "testfile3") +commit() + +check(mtn("cert", revs.first, "testcert", 'value=with=equal=signs')) +check(mtn("cert", revs.second, "testcert", 'value')) + +-- Check that inexact values fail... +check(mtn("list", "certs", "'c:testcert=value='"), 1, false, true) +check(grep('no match for selection', "stderr"), 0, false) + +-- Check that wild cards succeed... +check(mtn("list", "certs", "c:testcert=value=*"), 0, false, false) + +-- Check that wild cards succeed (this one becomes a misuse, because it will +-- match two revisions)... +check(mtn("list", "certs", "c:testcert=value*"), 1, false, true) +check(grep('has multiple ambiguous expansions', "stderr"), 0, false) + +-- Check that no value succeeds... +check(mtn("list", "certs", "c:testcert"), 1, false, true) +check(grep('has multiple ambiguous expansions', "stderr"), 0, false) + +-- Check that exact value succeed... +remove_recursive("_MTN") +check(mtn("co", "--revision=c:testcert=value", "."), 0, false, false) +check(samefile("testfile", "testfile2")) + +remove_recursive("_MTN") +check(mtn("co", "--revision=c:testcert=value=with=equal=signs", "."), 0, false, false) +check(samefile("testfile", "testfile1")) ============================================================ --- tests/test_a_merge_6/__driver__.lua 367c8ce3f9506adb5f45a9c9dff9a766e182a598 +++ tests/test_a_merge_6/__driver__.lua 367c8ce3f9506adb5f45a9c9dff9a766e182a598 @@ -0,0 +1,44 @@ + +mtn_setup() + +-- This tests a case where file normalisation previously wasn't +-- working correctly, leading to: + +-- --- correct Thu Apr 28 15:38:27 2005 +-- +++ testfile Thu Apr 28 15:38:36 2005 +-- @@ -5,6 +5,10 @@ +-- 3 +-- 4 +-- a +-- +2 +-- +3 +-- +4 +-- +a +-- q +-- d +-- g + +-- merge(1) can handle this merge correctly. + +getfile("parent") +getfile("left") +getfile("right") +getfile("correct") + +copyfile("parent", "testfile") +check(mtn("add", "testfile"), 0, false, false) +commit() +parent = base_revision() + +copyfile("left", "testfile") +commit() + +revert_to(parent) + +copyfile("right", "testfile") +commit() + +check(mtn("--branch=testbranch", "merge"), 0, false, false) + +check(mtn("update"), 0, false, false) +check(samefile("testfile", "correct")) ============================================================ --- tests/test_a_merge_6/correct 02b878566b25626ea34f713410de7be144b5b8a2 +++ tests/test_a_merge_6/correct 02b878566b25626ea34f713410de7be144b5b8a2 @@ -0,0 +1,10 @@ + +o +a +2 +3 +4 +a +q +d +g ============================================================ --- tests/test_a_merge_6/left 02b878566b25626ea34f713410de7be144b5b8a2 +++ tests/test_a_merge_6/left 02b878566b25626ea34f713410de7be144b5b8a2 @@ -0,0 +1,10 @@ + +o +a +2 +3 +4 +a +q +d +g ============================================================ --- tests/test_a_merge_6/parent 2f3a59a0c435f7c724938b9af94cbe2e9bd9d75d +++ tests/test_a_merge_6/parent 2f3a59a0c435f7c724938b9af94cbe2e9bd9d75d @@ -0,0 +1,6 @@ + +o +a +q +e +g ============================================================ --- tests/test_a_merge_6/right 68522d49d31cf65162e9d3e28fec43b3ed6bbcc9 +++ tests/test_a_merge_6/right 68522d49d31cf65162e9d3e28fec43b3ed6bbcc9 @@ -0,0 +1,10 @@ + +o +a +2 +3 +4 +a +q +e +g ============================================================ --- tests/test_annotate_command/__driver__.lua 21c71d956803b81d311de5620ae64f34361d0011 +++ tests/test_annotate_command/__driver__.lua 21c71d956803b81d311de5620ae64f34361d0011 @@ -0,0 +1,116 @@ + +mtn_setup() +revs = {} + +writefile("foo1", "z\na\nb\nx\n") +writefile("bar1" ,"0\n11\n2\n") +writefile("bar2", "0\n11\n22\n") + +addfile("foo0", "a\nb\nc\n") +addfile("unchanged", "static\nfile\ncontents\n") +commit() +revs[0] = base_revision() + +addfile("bar0", "0\n1\n2\n") +copyfile("foo1", "foo0") +commit() +revs[1] = base_revision() + +copyfile("bar1", "bar0") +commit() +revs[2] = base_revision() + +copyfile("bar2", "bar0") +commit() +revs[3] = base_revision() + +-- annotate on a non-existent file gives an error +check(mtn("annotate", "nonexistent"), 1, false, false) +-- annotate on dirs gives an error +check(mtn("annotate", "."), 1, false, false) + +-- +-- annotate foo0 should now be +-- REV1: z +-- REV0: a +-- REV0: b +-- REV1: x + +check(mtn("annotate", "foo0"), 0, true, false) +check(greplines("stdout", {revs[1], revs[0], revs[0], revs[1]})) + + +-- +-- unchanged should have all (3) lines from REV0 +-- +check(mtn("annotate", "unchanged"), 0, true, false) +check(greplines("stdout", {revs[0], revs[0], revs[0]})) + +-- +-- annotate bar0 should now be +-- REV1: 0 +-- REV2: 11 +-- REV3: 22 + +check(mtn("annotate", "bar0"), 0, true, false) +check(greplines("stdout", {revs[1], revs[2], revs[3]})) + + +-- +-- OK, now try some renames +-- +check(mtn("rename", "foo0", "tmp"), 0, false, false) +check(mtn("rename", "bar0", "foo0"), 0, false, false) +check(mtn("rename", "tmp", "bar0"), 0, false, false) +rename("foo0", "tmp") +rename("bar0", "foo0") +rename("tmp", "bar0") +commit() +revs[4] = base_revision() + +-- +-- Now the previous annotate results should be reversed +-- +check(mtn("annotate", "bar0"), 0, true, false) +check(greplines("stdout", {revs[1], revs[0], revs[0], revs[1]})) + +check(mtn("annotate", "foo0"), 0, true, false) +check(greplines("stdout", {revs[1], revs[2], revs[3]})) + +-- +-- Try add of file on one side of branch +-- + +-- Making left side of fork, we won't add the file here +writefile("foo0", "foo\nnow has other data\n") +commit() +revs[5] = base_revision() + +writefile("foo0", "foo\nstill has other data\n") +commit() +revs[6] = base_revision() + +-- Now make right side +remove_recursive("_MTN") +check(mtn("co", "--revision", revs[4], "."), 0, false, false) +writefile("bar0", "bar\non right side of fork\n") +commit() +revs[7] = base_revision() +addfile("forkfile", "a file\non the\nright fork\n") +commit() +revs[8] = base_revision() +writefile("forkfile", "a file\nchanged on the\nright fork\n") +commit() +revs[9] = base_revision() + +check(mtn("merge"), 0, false, false) +--revs[10] = base_revision() -- how does commit create this? + +-- +-- ok, so annotate forkfile should be +-- REV8: a file +-- REV9: changed on the +-- REV8: right fork + +check(mtn("annotate", "forkfile"), 0, true, false) +check(greplines("stdout", {revs[8], revs[9], revs[8]})) ============================================================ --- tester.lua c914b3f1af823b09b3891af2bdc67399880f47b3 +++ tester.lua 5f1a016857d523931cf04c1e8fe806438a22f1bb @@ -1,30 +1,40 @@ -tests = {} +tests = {} -- list of all tests, not visible when running tests +test = {} -- table of per-test values + + +-- misc global values srcdir = get_source_dir() -debugging = false +debugging = false -- was the -d switch given? -test_root = nil -testname = nil -wanted_fail = false -partial_skip = false -- set this to true if you skip part of the test +-- combined logfile +logfile = io.open("tester.log", "w") +-- logfiles of failed tests; append these to the main logfile +failed_testlogs = {} -- This is for redirected output from local implementations -- of shellutils type stuff (ie, grep). -- Reason: {set,clear}_redirect don't seem to (always?) work -- for this (at least on Windows). -files = {} -files.stdout = nil -files.stdin = nil -files.stderr = nil +files = {stdout = nil, stdin = nil, stderr = nil} -errfile = "" -errline = -1 -logfile = io.open("tester.log", "w") -- combined logfile -test_log = nil -- logfile for this test -failed_testlogs = {} -bgid = 0 -bglist = {} +-- misc per-test values +test.root = nil +test.name = nil +test.wanted_fail = false +test.partial_skip = false -- set this to true if you skip part of the test +--probably should put these in the error that gets thrown... +test.errfile = "" +test.errline = -1 + +-- for tracking background processes +test.bgid = 0 +test.bglist = {} + +test.log = nil -- logfile for this test + + function P(...) io.write(unpack(arg)) io.flush() @@ -32,8 +42,8 @@ end function L(...) - test_log:write(unpack(arg)) - test_log:flush() + test.log:write(unpack(arg)) + test.log:flush() end function getsrcline() @@ -48,7 +58,7 @@ info = debug.getinfo(depth) if string.find(info.source, "address@hidden") then -- return info.source, info.currentline - return testname, info.currentline + return test.name, info.currentline end end end @@ -56,16 +66,16 @@ function locheader() local _,line = getsrcline() if line == nil then line = -1 end - if testname == nil then + if test.name == nil then return "\n:" .. line .. ": " else - return "\n" .. testname .. ":" .. line .. ": " + return "\n" .. test.name .. ":" .. line .. ": " end end function err(what, level) if level == nil then level = 2 end - errfile,errline = getsrcline() + test.errfile, test.errline = getsrcline() local e if type(what) == "table" then e = what @@ -226,12 +236,13 @@ function getfile(name, as) if as == nil then as = name end - getstdfile(testname .. "/" .. name, as) + getstdfile(test.name .. "/" .. name, as) end function runstdfile(name) local func, e = loadfile(srcdir.."/"..name) if func == nil then err(e, 2) end + setfenv(func, getfenv(2)) func() end @@ -322,6 +333,42 @@ return ldat == rdat end +function samelines(f, t) + local fl = {} + for l in io.lines(f) do table.insert(fl, l) end + if not table.getn(fl) == table.getn(t) then + L(locheader(), string.format("file has %s lines; table has %s\n", + table.getn(fl), table.getn(t))) + return false + end + for i=1,table.getn(t) do + if fl[i] ~= t[i] then + L(locheader(), string.format("file[i] = '%s'; table[i] = '%s'\n", + fl[i], t[i])) + return false + end + end + return true +end + +function greplines(f, t) + local fl = {} + for l in io.lines(f) do table.insert(fl, l) end + if not table.getn(fl) == table.getn(t) then + L(locheader(), string.format("file has %s lines; table has %s\n", + table.getn(fl), table.getn(t))) + return false + end + for i=1,table.getn(t) do + if not regex.search(t[i], fl[i]) then + L(locheader(), string.format("file[i] = '%s'; table[i] = '%s'\n", + fl[i], t[i])) + return false + end + end + return true +end + function grep(...) local dogrep = function (flags, what, where) if where == nil and string.sub(flags, 1, 1) ~= "-" then @@ -498,16 +545,16 @@ -- * {string}: contents of the named file function bg(torun, ret, stdout, stderr, stdin) - bgid = bgid + 1 + test.bgid = test.bgid + 1 local out = {} - out.prefix = "ts-" .. bgid .. "-" + out.prefix = "ts-" .. test.bgid .. "-" pre_cmd(stdin, out.prefix) L("Starting background command...") local ok,pid = runcmd(torun, out.prefix, true) if not ok then err(pid, 2) end if pid == -1 then err("Failed to start background process\n", 2) end out.pid = pid - bglist[bgid] = out + test.bglist[test.bgid] = out out.id = bgid out.retval = nil out.locstr = locheader() @@ -535,7 +582,7 @@ end end - table.remove(bglist, obj.id) + table.remove(test.bglist, obj.id) L(locheader(), "checking background command from ", out.locstr, table.concat(out.cmd, " ")) post_cmd(obj.retval, out.expret, out.expout, out.experr, obj.prefix) @@ -553,7 +600,7 @@ return false end end - table.remove(bglist, obj.id) + table.remove(test.bglist, obj.id) L(locheader(), "checking background command from ", out.locstr, table.concat(out.cmd, " "), "\n") post_cmd(obj.retval, out.expret, out.expout, out.experr, obj.prefix) @@ -621,7 +668,7 @@ if chk then err(false, 2) else err(err, 2) end else if chk then - wanted_fail = true + test.wanted_fail = true L("UNEXPECTED SUCCESS\n") end end @@ -629,13 +676,13 @@ function log_error(e) if type(e) == "table" then - test_log:write("\n", tostring(e.e), "\n") + L("\n", tostring(e.e), "\n") for i,bt in ipairs(e.bt) do - if i ~= 1 then test_log:write("Rethrown from:") end - test_log:write(bt) + if i ~= 1 then L("Rethrown from:") end + L(bt) end else - test_log:write("\n", tostring(e), "\n") + L("\n", tostring(e), "\n") end end @@ -693,14 +740,27 @@ counts.total = 0 local function runtest(i, tname) - bgid = 0 - testname = tname - wanted_fail = false - partial_skip = false + local env = {} + local genv = getfenv(0) + for x,y in pairs(genv) do + env[x] = y + -- we want changes to globals in a test to be visible to + -- already-defined functions + if type(y) == "function" then + pcall(setfenv, y, env) + end + end + env.tests = nil -- don't let them mess with this + + test.bgid = 0 + test.name = tname + test.wanted_fail = false + test.partial_skip = false local shortname = nil - test_root, shortname = go_to_test_dir(testname) - errfile = "" - errline = -1 + test.root, shortname = go_to_test_dir(tname) + test.errfile = "" + test.errline = -1 + test.bglist = {} if i < 100 then P(" ") end if i < 10 then P(" ") end @@ -709,38 +769,47 @@ local spaces = string.rep(" ", 50) if spacelen > 0 then P(string.sub(spaces, 1, spacelen)) end - local tlog = test_root .. "/tester.log" - test_log = io.open(tlog, "w") + local tlog = test.root .. "/tester.log" + test.log = io.open(tlog, "w") L("Test number ", i, ", ", shortname, "\n") - local driverfile = srcdir .. "/" .. testname .. "/__driver__.lua" + local driverfile = srcdir .. "/" .. test.name .. "/__driver__.lua" local driver, e = loadfile(driverfile) local r if driver == nil then r = false e = "Could not load driver file " .. driverfile .. " .\n" .. e else - bglist = {} + setfenv(driver, env) r,e = xpcall(driver, debug.traceback) - for i,b in pairs(bglist) do + for i,b in pairs(test.bglist) do b:finish(0) end restore_env() end + + -- set our functions back to the proper environment + local genv = getfenv(0) + for x,y in pairs(genv) do + if type(y) == "function" then + pcall(setfenv, y, genv) + end + end + if r then - if wanted_fail then + if test.wanted_fail then P("unexpected success\n") - test_log:close() + test.log:close() leave_test_dir() counts.noxfail = counts.noxfail + 1 else - if partial_skip then + if test.partial_skip then P("partial skip\n") else P("ok\n") end - test_log:close() - if not debugging then clean_test_dir(testname) end + test.log:close() + if not debugging then clean_test_dir(tname) end counts.success = counts.success + 1 end else @@ -749,20 +818,20 @@ e = tbl end if e.e == true then - P(string.format("skipped (line %i)\n", errline)) - test_log:close() + P(string.format("skipped (line %i)\n", test.errline)) + test.log:close() if not debugging then clean_test_dir(testname) end counts.skip = counts.skip + 1 elseif e.e == false then - P(string.format("expected failure (line %i)\n", errline)) - test_log:close() + P(string.format("expected failure (line %i)\n", test.errline)) + test.log:close() leave_test_dir() counts.xfail = counts.xfail + 1 else - P(string.format("FAIL (line %i)\n", errline)) + P(string.format("FAIL (line %i)\n", test.errline)) log_error(e) table.insert(failed_testlogs, tlog) - test_log:close() + test.log:close() leave_test_dir() counts.fail = counts.fail + 1 end ============================================================ --- tests/common/automate_ancestry.lua 44980fb300dd64a7ef6fb3cf3fd9c9152953b084 +++ tests/common/automate_ancestry.lua e63c51355db5f8979cb41cd5da88c8d577a6f47c @@ -37,12 +37,6 @@ function revmap(name, from, to, dosort) if dosort == nil then dosort = true end check(mtn("automate", name, unpack(from)), 0, true, false) - canonicalize("stdout") if dosort then table.sort(to) end - if to[1] == nil then - writefile("tmp", "") - else - writefile("tmp", table.concat(to, "\n").."\n") - end - check(samefile("tmp", "stdout")) + check(samelines("stdout", to)) end ============================================================ --- tests/cvs_import_with_file_added_on_a_branch/__driver__.lua a5ec6556f74851b3018f82b88d84f50d4d5857bd +++ tests/cvs_import_with_file_added_on_a_branch/__driver__.lua 82696ecdfff800d9d21d8e02338707669be85afe @@ -7,7 +7,7 @@ -- file on mainline, followed by an add of the file on the branch). -- Make sure we handle it correct. -cvsroot = test_root.."/cvsroot" +cvsroot = test.root.."/cvsroot" function cvs(...) return {"cvs", "-d", cvsroot, unpack(arg)} end ============================================================ --- tests/importing_CVS_files/__driver__.lua b29bac5aeb02c39454b51e0982c1a9911c85bf63 +++ tests/importing_CVS_files/__driver__.lua c6e11c43ae0592336f00ab6cf3137eb07af08d35 @@ -18,7 +18,7 @@ -- build the cvs repository -cvsroot = test_root .. "/cvs-repository" +cvsroot = test.root .. "/cvs-repository" function cvs(...) return {"cvs", "-d", cvsroot, unpack(arg)} ============================================================ --- tests/importing_CVS_files_with_identical_logs/__driver__.lua c449f049d81e25cd714aa8214b2f25eab4ef289d +++ tests/importing_CVS_files_with_identical_logs/__driver__.lua 71e157f3608dfd02f409c731488a38315f21ab2b @@ -14,7 +14,7 @@ -- build the cvs repository -cvsroot = test_root .. "/cvs-repository" +cvsroot = test.root .. "/cvs-repository" function cvs(...) return {"cvs", "-d", cvsroot, unpack(arg)} end ============================================================ --- tests/importing_a_CVS_file_with_one_version/__driver__.lua 6c24fc69840226c7d8562d20ed93d4b8930baf97 +++ tests/importing_a_CVS_file_with_one_version/__driver__.lua 57b8aba74589feb66dc8e04b7cde5dab829685e0 @@ -8,7 +8,7 @@ -- build the cvs repository -cvsroot = test_root .. "/cvs-repository" +cvsroot = test.root .. "/cvs-repository" function cvs(...) return {"cvs", "-d", cvsroot, unpack(arg)} ============================================================ --- tests/multiple_version_committing/__driver__.lua 511ce318109104c815f97bd757e1481ee611defa +++ tests/multiple_version_committing/__driver__.lua dfdbbe5150d201036cb784160c3cfbfd721ff3ff @@ -9,7 +9,7 @@ rsha = {} for i = 1, 6 do - test_log:write(string.format("generating version %i of the file\n", i)) + L(string.format("generating version %i of the file\n", i)) writefile("testfile", string.format("version %i of the file\n", i)) commit() fsha[i] = sha1("testfile") @@ -17,7 +17,7 @@ end for i = 1, 6 do - test_log:write(string.format("checking version %i of the file\n", i)) + L(string.format("checking version %i of the file\n", i)) writefile("testfile", string.format("version %i of the file\n", i)) check(mtn("automate", "get_file", fsha[i]), 0, true) canonicalize("stdout") ============================================================ --- tests/short_options_work_correctly/__driver__.lua 42d40c67ca2f855414d90caf721881601cbc01f6 +++ tests/short_options_work_correctly/__driver__.lua 2ff2788145feea06d2e1336846ca22cdcc3fa37c @@ -10,9 +10,9 @@ -- same as mtn() but without --db and --key function short_mtn(...) - return raw_mtn("--rcfile", test_root.."/test_hooks.lua", - "--nostd", "--norc", "--root", test_root, - "--keydir", test_root.."/keys", unpack(arg)) + return raw_mtn("--rcfile", test.root.."/test_hooks.lua", + "--nostd", "--norc", "--root", test.root, + "--keydir", test.root.."/keys", unpack(arg)) end check(short_mtn("add", "maude"), 0, false, false) ============================================================ --- testsuite.at e5b152248b57e3ac8d832332768b78b3ab506e7e +++ testsuite.at e1d480848ba13a47d78d8fc4ec11d04a947d243f @@ -608,17 +608,6 @@ # include all the sub-tests we're going to use -m4_include(tests/t_replace_dir_with_file.at) -m4_include(tests/t_parents_children.at) -m4_include(tests/t_automate_graph.at) -m4_include(tests/t_i18n_file_data.at) -m4_include(tests/t_cvsimport_manifest_cycle.at) -m4_include(tests/t_select_cert.at) -m4_include(tests/t_automate_select.at) -m4_include(tests/t_refresh_inodeprints.at) -m4_include(tests/t_merge_6.at) -m4_include(tests/t_annotate.at) -m4_include(tests/t_annotate_add_collision.at) m4_include(tests/t_annotate_branch_collision.at) m4_include(tests/t_netsync_error.at) m4_include(tests/t_options.at) ============================================================ --- testsuite.lua 91d769df7d4261ec468ef74c45d589f9f6376fc9 +++ testsuite.lua 223f17f5d715b17032c40abffd99eebaa9b3b8b8 @@ -1,37 +1,39 @@ #!./tester ostype = string.sub(get_ostype(), 1, string.find(get_ostype(), " ")-1) function getpathof(exe) local function gotit(now) - if test_log == nil then + if test.log == nil then logfile:write(exe, " found at ", now, "\n") else - test_log:write(exe, " found at ", now, "\n") + test.log:write(exe, " found at ", now, "\n") end return now end local path = os.getenv("PATH") - local char + local char, ext if ostype == "Windows" then char = ';' + ext = ".exe" else char = ':' + ext = "" end - local now = initial_dir.."/"..exe..".exe" + local now = initial_dir.."/"..exe..ext if exists(now) then return gotit(now) end for x in string.gfind(path, "[^"..char.."]*"..char) do local dir = string.sub(x, 0, -2) if string.find(dir, "[\\/]$") then dir = string.sub(dir, 0, -2) end - local now = dir.."/"..exe..".exe" + local now = dir.."/"..exe..ext if exists(now) then return gotit(now) end end - if test_log == nil then + if test.log == nil then logfile:write("Cannot find ", exe, "\n") else - test_log:write("Cannot find ", exe, "\n") + test.log:write("Cannot find ", exe, "\n") end return exe end @@ -39,7 +41,7 @@ monotone_path = getpathof("mtn") function safe_mtn(...) - return {monotone_path, "--norc", "--root=" .. test_root, unpack(arg)} + return {monotone_path, "--norc", "--root=" .. test.root, unpack(arg)} end -- function preexecute(x) @@ -55,16 +57,16 @@ end function mtn(...) - return raw_mtn("--rcfile", test_root .. "/test_hooks.lua", - "--nostd", "--db=" .. test_root .. "/test.db", - "--keydir", test_root .. "/keys", + return raw_mtn("--rcfile", test.root .. "/test_hooks.lua", + "--nostd", "--db=" .. test.root .. "/test.db", + "--keydir", test.root .. "/keys", "address@hidden", unpack(arg)) end function minhooks_mtn(...) - return raw_mtn("--db=" .. test_root .. "/test.db", - "--keydir", test_root .. "/keys", - "--rcfile", test_root .. "/min_hooks.lua", + return raw_mtn("--db=" .. test.root .. "/test.db", + "--keydir", test.root .. "/keys", + "--rcfile", test.root .. "/min_hooks.lua", "address@hidden", unpack(arg)) end @@ -540,3 +542,15 @@ table.insert(tests, "tests/workspace_inventory") table.insert(tests, "tests/rename_file_to_dir") table.insert(tests, "tests/replace_file_with_dir") +table.insert(tests, "tests/replace_dir_with_file") +table.insert(tests, "tests/automate_parents,_automate_children") +table.insert(tests, "tests/automate_graph") +table.insert(tests, "tests/files_with_non-utf8_data") +table.insert(tests, "tests/cvs_import,_file_dead_on_head_and_branch") +table.insert(tests, "tests/selecting_arbitrary_certs") +table.insert(tests, "tests/check_automate_select") +table.insert(tests, "tests/refresh_inodeprints") +table.insert(tests, "tests/test_a_merge_6") +table.insert(tests, "tests/test_annotate_command") +table.insert(tests, "tests/annotate_file_added_on_different_forks") +table.insert(tests, "tests/annotate_file_on_multirooted_branch")