def test_nonempty_subdir_to_empty(self):
        """      starting dirs & files:
            \tmp\TestGristleDirMerger_source_?\mysubdir
            \tmp\TestGristleDirMerger_source_?\mysubdir\foo.csv
            \tmp\TestGristleDirMerger_dest_?
                  should become:
            \tmp\TestGristleDirMerger_source_?
            \tmp\TestGristleDirMerger_dest_?\mysubdir\foo.csv
        """
        source_subdir = os.path.join(self.source_dir, 'mysubdir')

        subdir = os.path.join(self.source_dir, 'mysubdir')
        os.mkdir(subdir)
        tt.touch(os.path.join(subdir, 'foo.csv'))

        self.cmd = """%(pgm)s %(source_dir)s       \
                              %(dest_dir)s         \
                         --match-on-name-only      \
                         --log-level debug         \
                         -r                        \
                   """ % {
            'pgm': PGM,
            'source_dir': self.source_dir,
            'dest_dir': self.dest_dir
        }
        print '\n command: %s' % self.cmd

        r = envoy.run(self.cmd)
        self.get_outputs(r)

        print 'dest_dir: %s' % self.dest_dir
        print os.listdir(self.dest_dir)
        print 'dest sub dir: %s' % os.path.join(self.dest_dir, 'mysubdir')
        print 'dest sub contents: '
        #print os.listdir(os.path.join(self.dest_dir, 'mysubdir'))
        print 'is a file? %s' % os.path.isfile(
            os.path.join(self.dest_dir, 'mysubdir'))

        assert r.status_code == 0
        assert 'mysubdir' in os.listdir(self.dest_dir)
        assert not os.path.exists(self.source_dir)
        assert 'foo.csv' in os.listdir(os.path.join(self.dest_dir, 'mysubdir'))
    def test_nonempty_subdir_to_empty(self):
        """      starting dirs & files:
            \tmp\TestGristleDirMerger_source_?\mysubdir
            \tmp\TestGristleDirMerger_source_?\mysubdir\foo.csv
            \tmp\TestGristleDirMerger_dest_?
                  should become:
            \tmp\TestGristleDirMerger_source_?
            \tmp\TestGristleDirMerger_dest_?\mysubdir\foo.csv
        """
        source_subdir = os.path.join(self.source_dir, "mysubdir")

        subdir = os.path.join(self.source_dir, "mysubdir")
        os.mkdir(subdir)
        tt.touch(os.path.join(subdir, "foo.csv"))

        self.cmd = """%(pgm)s %(source_dir)s       \
                              %(dest_dir)s         \
                         --match-on-name-only      \
                         --log-level debug         \
                         -r                        \
                   """ % {
            "pgm": PGM,
            "source_dir": self.source_dir,
            "dest_dir": self.dest_dir,
        }
        print "\n command: %s" % self.cmd

        r = envoy.run(self.cmd)
        self.get_outputs(r)

        print "dest_dir: %s" % self.dest_dir
        print os.listdir(self.dest_dir)
        print "dest sub dir: %s" % os.path.join(self.dest_dir, "mysubdir")
        print "dest sub contents: "
        # print os.listdir(os.path.join(self.dest_dir, 'mysubdir'))
        print "is a file? %s" % os.path.isfile(os.path.join(self.dest_dir, "mysubdir"))

        assert r.status_code == 0
        assert "mysubdir" in os.listdir(self.dest_dir)
        assert not os.path.exists(self.source_dir)
        assert "foo.csv" in os.listdir(os.path.join(self.dest_dir, "mysubdir"))
    def test_nonempty_to_empty(self):

        tt.touch(os.path.join(self.source_dir, 'foo.csv'))

        self.cmd = """%(pgm)s %(source_dir)s       \
                              %(dest_dir)s         \
                         --match-on-name-only      \
                         --log-level debug         \
                         -r                        \
                   """ % {
            'pgm': PGM,
            'source_dir': self.source_dir,
            'dest_dir': self.dest_dir
        }
        print '\n command: %s' % self.cmd

        r = envoy.run(self.cmd)
        self.get_outputs(r)

        assert r.status_code == 0
        assert 'foo.csv' in os.listdir(self.dest_dir)
        assert not os.path.exists(self.source_dir)
    def test_nonempty_subdir_to_nonempty_dir(self):
        """      starting dirs & files:
            \tmp\TestGristleDirMerger_source_?\mysubdir
            \tmp\TestGristleDirMerger_source_?\mysubdir\foo.csv
            \tmp\TestGristleDirMerger_dest_???\mysubdir\bar.csv
                  should become:
            \tmp\TestGristleDirMerger_source_?
            \tmp\TestGristleDirMerger_source_?\mysubdir\foo.csv
            \tmp\TestGristleDirMerger_dest_???\mysubdir\bar.csv
        """
        source_subdir = os.path.join(self.source_dir, 'mysubdir')
        os.mkdir(source_subdir)
        tt.touch(os.path.join(source_subdir, 'foo.csv'))

        dest_subdir = os.path.join(self.dest_dir, 'mysubdir')
        os.mkdir(dest_subdir)
        tt.touch(os.path.join(dest_subdir, 'bar.csv'))

        self.cmd = """%(pgm)s %(source_dir)s       \
                              %(dest_dir)s         \
                         --match-on-name-only      \
                         --dry-run                 \
                         --log-level debug         \
                   """ % {
            'pgm': PGM,
            'source_dir': self.source_dir,
            'dest_dir': self.dest_dir
        }
        print '\n command: %s' % self.cmd

        r = envoy.run(self.cmd)
        self.get_outputs(r)

        assert r.status_code == 0
        assert 'mysubdir' in os.listdir(self.dest_dir)
        assert 'bar.csv' in os.listdir(os.path.join(self.dest_dir, 'mysubdir'))
        assert 'mysubdir' in os.listdir(self.source_dir)
        assert 'foo.csv' in os.listdir(
            os.path.join(self.source_dir, 'mysubdir'))
    def test_nonempty_to_empty(self):

        tt.touch(os.path.join(self.source_dir, "foo.csv"))

        self.cmd = """%(pgm)s %(source_dir)s       \
                              %(dest_dir)s         \
                         --match-on-name-only      \
                         --log-level debug         \
                         -r                        \
                   """ % {
            "pgm": PGM,
            "source_dir": self.source_dir,
            "dest_dir": self.dest_dir,
        }
        print "\n command: %s" % self.cmd

        r = envoy.run(self.cmd)
        self.get_outputs(r)

        assert r.status_code == 0
        assert "foo.csv" in os.listdir(self.dest_dir)
        assert not os.path.exists(self.source_dir)
    def test_nonempty_subdir_to_nonempty_dir(self):
        """      starting dirs & files:
            \tmp\TestGristleDirMerger_source_?\mysubdir
            \tmp\TestGristleDirMerger_source_?\mysubdir\foo.csv
            \tmp\TestGristleDirMerger_dest_???\mysubdir\bar.csv
                  should become:
            \tmp\TestGristleDirMerger_source_?
            \tmp\TestGristleDirMerger_source_?\mysubdir\foo.csv
            \tmp\TestGristleDirMerger_dest_???\mysubdir\bar.csv
        """
        source_subdir = os.path.join(self.source_dir, "mysubdir")
        os.mkdir(source_subdir)
        tt.touch(os.path.join(source_subdir, "foo.csv"))

        dest_subdir = os.path.join(self.dest_dir, "mysubdir")
        os.mkdir(dest_subdir)
        tt.touch(os.path.join(dest_subdir, "bar.csv"))

        self.cmd = """%(pgm)s %(source_dir)s       \
                              %(dest_dir)s         \
                         --match-on-name-only      \
                         --dry-run                 \
                         --log-level debug         \
                   """ % {
            "pgm": PGM,
            "source_dir": self.source_dir,
            "dest_dir": self.dest_dir,
        }
        print "\n command: %s" % self.cmd

        r = envoy.run(self.cmd)
        self.get_outputs(r)

        assert r.status_code == 0
        assert "mysubdir" in os.listdir(self.dest_dir)
        assert "bar.csv" in os.listdir(os.path.join(self.dest_dir, "mysubdir"))
        assert "mysubdir" in os.listdir(self.source_dir)
        assert "foo.csv" in os.listdir(os.path.join(self.source_dir, "mysubdir"))