(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'Test the Git Mediawiki remote helper: git clone'>)}
          spids: [32]
        )
      ]
    )
    (C {<.>} {<'./test-gitmw-lib.sh'>})
    (C {<.>} {($ Id.VSub_DollarName '$TEST_DIRECTORY') <'/test-lib.sh'>})
    (C {<test_check_precond>})
    (C {<test_expect_success>} {(SQ <'Git clone creates the expected git log with one file'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> 
          <
'\twiki_editpage foo "this is not important" false -c cat -s "this must be the same" &&\n'
          > <'\tgit clone mediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_1 &&\n'> <'\t(\n'> <'\t\tcd mw_dir_1 &&\n'> 
          <'\t\tgit log --format=%s HEAD^..HEAD >log.tmp\n'> <'\t) &&\n'> <'\techo "this must be the same" >msg.tmp &&\n'> <'\tdiff -b mw_dir_1/log.tmp msg.tmp\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone creates the expected git log with multiple files'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> 
          <'\twiki_editpage daddy "this is not important" false -s="this must be the same" &&\n'> <'\twiki_editpage daddy "neither is this" true -s="this must also be the same" &&\n'> 
          <'\twiki_editpage daddy "neither is this" true -s="same same same" &&\n'> <'\twiki_editpage dj "dont care" false -s="identical" &&\n'> 
          <'\twiki_editpage dj "dont care either" true -s="identical too" &&\n'> <'\tgit clone mediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_2 &&\n'> <'\t(\n'> <'\t\tcd mw_dir_2 &&\n'> 
          <'\t\tgit log --format=%s Daddy.mw  >logDaddy.tmp &&\n'> <'\t\tgit log --format=%s Dj.mw >logDj.tmp\n'> <'\t) &&\n'> 
          <'\techo "same same same" >msgDaddy.tmp &&\n'> <'\techo "this must also be the same" >>msgDaddy.tmp &&\n'> 
          <'\techo "this must be the same" >>msgDaddy.tmp &&\n'> <'\techo "identical too" >msgDj.tmp &&\n'> <'\techo "identical" >>msgDj.tmp &&\n'> 
          <'\tdiff -b mw_dir_2/logDaddy.tmp msgDaddy.tmp &&\n'> <'\tdiff -b mw_dir_2/logDj.tmp msgDj.tmp\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone creates only Main_Page.mw with an empty wiki'>)} 
      {(SQ <'\n'> <'\twiki_reset &&\n'> <'\tgit clone mediawiki::'>) 
        (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_3 &&\n'> <'\ttest_contains_N_files mw_dir_3 1 &&\n'> 
          <'\ttest_path_is_file mw_dir_3/Main_Page.mw\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone does not fetch a deleted page'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> 
          <'\twiki_editpage foo "this page must be deleted before the clone" false &&\n'> <'\twiki_delete_page foo &&\n'> <'\tgit clone mediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_4 &&\n'> <'\ttest_contains_N_files mw_dir_4 1 &&\n'> 
          <'\ttest_path_is_file mw_dir_4/Main_Page.mw &&\n'> <'\ttest_path_is_missing mw_dir_4/Foo.mw\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone works with page added'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> <'\twiki_editpage foo " I will be cloned" false &&\n'> 
          <'\twiki_editpage bar "I will be cloned" false &&\n'> <'\tgit clone mediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_5 &&\n'> <'\twiki_getallpage ref_page_5 &&\n'> 
          <'\ttest_diff_directories mw_dir_5 ref_page_5 &&\n'> <'\twiki_delete_page foo &&\n'> <'\twiki_delete_page bar\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone works with an edited page '>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> <'\twiki_editpage foo "this page will be edited" \\\n'> 
          <'\t\tfalse -s "first edition of page foo"&&\n'> <'\twiki_editpage foo "this page has been edited and must be on the clone " true &&\n'> 
          <'\tgit clone mediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_6 &&\n'> <'\ttest_path_is_file mw_dir_6/Foo.mw &&\n'> 
          <'\ttest_path_is_file mw_dir_6/Main_Page.mw &&\n'> <'\twiki_getallpage mw_dir_6/page_ref_6 &&\n'> 
          <'\ttest_diff_directories mw_dir_6 mw_dir_6/page_ref_6 &&\n'> <'\t(\n'> <'\t\tcd mw_dir_6 &&\n'> <'\t\tgit log --format=%s HEAD^ Foo.mw > ../Foo.log\n'> <'\t) &&\n'> 
          <'\techo "first edition of page foo" > FooExpect.log &&\n'> <'\tdiff FooExpect.log Foo.log\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone works with several pages and some deleted '>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> 
          <'\twiki_editpage foo "this page will not be deleted" false &&\n'> <'\twiki_editpage bar "I must not be erased" false &&\n'> 
          <'\twiki_editpage namnam "I will not be there at the end" false &&\n'> <'\twiki_editpage nyancat "nyan nyan nyan delete me" false &&\n'> <'\twiki_delete_page namnam &&\n'> 
          <'\twiki_delete_page nyancat &&\n'> <'\tgit clone mediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_7 &&\n'> <'\ttest_path_is_file mw_dir_7/Foo.mw &&\n'> 
          <'\ttest_path_is_file mw_dir_7/Bar.mw &&\n'> <'\ttest_path_is_missing mw_dir_7/Namnam.mw &&\n'> <'\ttest_path_is_missing mw_dir_7/Nyancat.mw &&\n'> 
          <'\twiki_getallpage mw_dir_7/page_ref_7 &&\n'> <'\ttest_diff_directories mw_dir_7 mw_dir_7/page_ref_7\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone works with one specific page cloned '>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> <'\twiki_editpage foo "I will not be cloned" false &&\n'> 
          <'\twiki_editpage bar "Do not clone me" false &&\n'> <'\twiki_editpage namnam "I will be cloned :)" false  -s="this log must stay" &&\n'> 
          <'\twiki_editpage nyancat "nyan nyan nyan you cant clone me" false &&\n'> <'\tgit clone -c remote.origin.pages=namnam \\\n'> <'\t\tmediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_8 &&\n'> <'\ttest_contains_N_files mw_dir_8 1 &&\n'> 
          <'\ttest_path_is_file mw_dir_8/Namnam.mw &&\n'> <'\ttest_path_is_missing mw_dir_8/Main_Page.mw &&\n'> <'\t(\n'> <'\t\tcd mw_dir_8 &&\n'> 
          <'\t\techo "this log must stay" >msg.tmp &&\n'> <'\t\tgit log --format=%s >log.tmp &&\n'> <'\t\tdiff -b msg.tmp log.tmp\n'> <'\t) &&\n'> 
          <'\twiki_check_content mw_dir_8/Namnam.mw Namnam\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone works with multiple specific page cloned '>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> <'\twiki_editpage foo "I will be there" false &&\n'> 
          <'\twiki_editpage bar "I will not disapear" false &&\n'> <'\twiki_editpage namnam "I be erased" false &&\n'> 
          <'\twiki_editpage nyancat "nyan nyan nyan you will not erase me" false &&\n'> <'\twiki_delete_page namnam &&\n'> 
          <'\tgit clone -c remote.origin.pages="foo bar nyancat namnam" \\\n'> <'\t\tmediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_9 &&\n'> <'\ttest_contains_N_files mw_dir_9 3 &&\n'> 
          <'\ttest_path_is_missing mw_dir_9/Namnam.mw &&\n'> <'\ttest_path_is_file mw_dir_9/Foo.mw &&\n'> <'\ttest_path_is_file mw_dir_9/Nyancat.mw &&\n'> 
          <'\ttest_path_is_file mw_dir_9/Bar.mw &&\n'> <'\twiki_check_content mw_dir_9/Foo.mw Foo &&\n'> <'\twiki_check_content mw_dir_9/Bar.mw Bar &&\n'> 
          <'\twiki_check_content mw_dir_9/Nyancat.mw Nyancat\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Mediawiki-clone of several specific pages on wiki'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> <'\twiki_editpage foo "foo 1" false &&\n'> 
          <'\twiki_editpage bar "bar 1" false &&\n'> <'\twiki_editpage dummy "dummy 1" false &&\n'> <'\twiki_editpage cloned_1 "cloned_1 1" false &&\n'> 
          <'\twiki_editpage cloned_2 "cloned_2 2" false &&\n'> <'\twiki_editpage cloned_3 "cloned_3 3" false &&\n'> <'\tmkdir -p ref_page_10 &&\n'> 
          <'\twiki_getpage cloned_1 ref_page_10 &&\n'> <'\twiki_getpage cloned_2 ref_page_10 &&\n'> <'\twiki_getpage cloned_3 ref_page_10 &&\n'> 
          <'\tgit clone -c remote.origin.pages="cloned_1 cloned_2 cloned_3" \\\n'> <'\t\tmediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_10 &&\n'> <'\ttest_diff_directories mw_dir_10 ref_page_10\n'>)
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone works with the shallow option'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> 
          <'\twiki_editpage foo "1st revision, should be cloned" false &&\n'> <'\twiki_editpage bar "1st revision, should be cloned" false &&\n'> 
          <'\twiki_editpage nyan "1st revision, should not be cloned" false &&\n'> <'\twiki_editpage nyan "2nd revision, should be cloned" false &&\n'> 
          <'\tgit -c remote.origin.shallow=true clone \\\n'> <'\t\tmediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_11 &&\n'> <'\ttest_contains_N_files mw_dir_11 4 &&\n'> 
          <'\ttest_path_is_file mw_dir_11/Nyan.mw &&\n'> <'\ttest_path_is_file mw_dir_11/Foo.mw &&\n'> <'\ttest_path_is_file mw_dir_11/Bar.mw &&\n'> 
          <'\ttest_path_is_file mw_dir_11/Main_Page.mw &&\n'> <'\t(\n'> <'\t\tcd mw_dir_11 &&\n'> <'\t\ttest $(git log --oneline Nyan.mw | wc -l) -eq 1 &&\n'> 
          <'\t\ttest $(git log --oneline Foo.mw | wc -l) -eq 1 &&\n'> <'\t\ttest $(git log --oneline Bar.mw | wc -l) -eq 1 &&\n'> 
          <'\t\ttest $(git log --oneline Main_Page.mw | wc -l ) -eq 1\n'> <'\t) &&\n'> <'\twiki_check_content mw_dir_11/Nyan.mw Nyan &&\n'> 
          <'\twiki_check_content mw_dir_11/Foo.mw Foo &&\n'> <'\twiki_check_content mw_dir_11/Bar.mw Bar &&\n'> 
          <'\twiki_check_content mw_dir_11/Main_Page.mw Main_Page\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Git clone works with the shallow option with a delete page'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> 
          <'\twiki_editpage foo "1st revision, will be deleted" false &&\n'> <'\twiki_editpage bar "1st revision, should be cloned" false &&\n'> 
          <'\twiki_editpage nyan "1st revision, should not be cloned" false &&\n'> <'\twiki_editpage nyan "2nd revision, should be cloned" false &&\n'> <'\twiki_delete_page foo &&\n'> 
          <'\tgit -c remote.origin.shallow=true clone \\\n'> <'\t\tmediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_12 &&\n'> <'\ttest_contains_N_files mw_dir_12 3 &&\n'> 
          <'\ttest_path_is_file mw_dir_12/Nyan.mw &&\n'> <'\ttest_path_is_missing mw_dir_12/Foo.mw &&\n'> <'\ttest_path_is_file mw_dir_12/Bar.mw &&\n'> 
          <'\ttest_path_is_file mw_dir_12/Main_Page.mw &&\n'> <'\t(\n'> <'\t\tcd mw_dir_12 &&\n'> <'\t\ttest $(git log --oneline Nyan.mw | wc -l) -eq 1 &&\n'> 
          <'\t\ttest $(git log --oneline Bar.mw | wc -l) -eq 1 &&\n'> <'\t\ttest $(git log --oneline Main_Page.mw | wc -l ) -eq 1\n'> <'\t) &&\n'> 
          <'\twiki_check_content mw_dir_12/Nyan.mw Nyan &&\n'> <'\twiki_check_content mw_dir_12/Bar.mw Bar &&\n'> 
          <'\twiki_check_content mw_dir_12/Main_Page.mw Main_Page\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'Test of fetching a category'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> 
          <'\twiki_editpage Foo "I will be cloned" false -c=Category &&\n'> <'\twiki_editpage Bar "Meet me on the repository" false -c=Category &&\n'> 
          <'\twiki_editpage Dummy "I will not come" false &&\n'> <'\twiki_editpage BarWrong "I will stay online only" false -c=NotCategory &&\n'> 
          <'\tgit clone -c remote.origin.categories="Category" \\\n'> <'\t\tmediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_13 &&\n'> <'\twiki_getallpage ref_page_13 Category &&\n'> 
          <'\ttest_diff_directories mw_dir_13 ref_page_13\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'Test of resistance to modification of category on wiki for clone'>)} 
      {
        (SQ <'\n'> <'\twiki_reset &&\n'> 
          <'\twiki_editpage Tobedeleted "this page will be deleted" false -c=Catone &&\n'> <'\twiki_editpage Tobeedited "this page will be modified" false -c=Catone &&\n'> 
          <
'\twiki_editpage Normalone "this page wont be modified and will be on git" false -c=Catone &&\n'
          > <'\twiki_editpage Notconsidered "this page will not appear on local" false &&\n'> 
          <
'\twiki_editpage Othercategory "this page will not appear on local" false -c=Cattwo &&\n'
          > <'\twiki_editpage Tobeedited "this page have been modified" true -c=Catone &&\n'> 
          <'\twiki_delete_page Tobedeleted\n'> <'\tgit clone -c remote.origin.categories="Catone" \\\n'> <'\t\tmediawiki::'>
        ) (DQ ($ Id.VSub_DollarName '$WIKI_URL')) 
        (SQ <' mw_dir_14 &&\n'> <'\twiki_getallpage ref_page_14 Catone &&\n'> 
          <'\ttest_diff_directories mw_dir_14 ref_page_14\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)