aboutsummaryrefslogtreecommitdiff
path: root/tests/test/script/builtin/mv.testscript
blob: 645f5a1748ed20a8e052c318d95183a3b3088530 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# file      : tests/test/script/builtin/mv.testscript
# license   : MIT; see accompanying LICENSE file

.include ../common.testscript

: synopsis-1
:
: Move an entity to the specified path.
:
{
  : file
  :
  {
    : outside-scope
    :
    : Need to use a path that unlikely exists (not to remove something useful).
    :
    {
      : fail
      :
      : Moving path outside the testscript working directory fails.
      :
      $c <<EOI && $b
        mv ../../a/b/c ./c 2>>/EOE == 1
        mv: 'a/b/c' is out of working directory 'test/'
        EOE
        EOI

      : force
      :
      : Moving path outside the testscript working directory is allowed with -f
      : option. We fail after this check succeeds as the source path does not
      : exist.
      :
      $c <<EOI && $b
        mv -f ../../a/b/c ./c 2>>/~%EOE% == 1
        %mv: unable to move entry '.+/force/a/b/c' to '.+/c': .+%
        EOE
        EOI
    }

    : cleanup
    :
    {
      : enabled
      :
      $c <<EOI && $b
        touch a;
        mv a b
        EOI

      : disabled
      :
      $c <<EOI && $b
        touch a;
        mv --no-cleanup a b &!a;
        rm b
        EOI

      : existing
      :
      : Test that moving over an existing file does not move the cleanup. If
      : it does, then the file would be removed while leaving the embedded
      : scope, and so the cleanup registered by the outer touch would fail. We
      : also test that the source path cleanup is removed, otherwise it would
      : fail.
      :
      $c <<EOI && $b
        +touch b
        {
          touch a;
          mv a ../b
        }
        EOI
    }
  }

  : dir
  :
  {
    : working-dir
    :
    {
      : src
      :
      $c <<EOI && $b
        mv $~ b 2>/"mv: 'test/1/' contains test working directory 'test/1/'" != 0
        EOI

      : dst
      :
      $c <<EOI && $b
        mkdir a;
        mv a "$~" 2>/"mv: 'test/1' contains test working directory 'test/1/'" != 0
        EOI
    }

    : cleanup
    :
    {
      : enabled
      :
      $c <<EOI && $b
        mkdir a;
        mv a b
        EOI

      : disabled
      :
      $c <<EOI && $b
        mkdir a;
        mv --no-cleanup a b &!a/;
        rm -r b
        EOI

      : sub-entry
      :
      $c <<EOI && $b
        mkdir a;
        touch a/b;
        mv a c
        EOI

      : reorder
      :
      : Test that a/, that is created before b/ and so should be removed after
      : it, get removed before b/ after being renamed to b/c.
      :
      $c <<EOI && $b
        mkdir a b;
        mv a b/c
        EOI
    }
  }
}

: synopsis-2
:
: Move entities into the specified directory.
:
{
  : cleanup
  :
  $c <<EOI && $b
    mkdir a c;
    touch a/b b;
    mv a b c/
    EOI

  : no-cleanup
  :
  $c <<EOI && $b
    mkdir a c;
    touch a/b b;
    mv --no-cleanup a b c/ &!a/ &!a/b &!b;
    rm -r c/a/ c/b
    EOI
}