Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: test/package_list_files_test.dart

Issue 1233533002: Respect gitignore for packages in subdirectories. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: code review Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« lib/src/package.dart ('K') | « lib/src/package.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library packages_list_files_test; 5 library packages_list_files_test;
6 6
7 import 'package:path/path.dart' as path; 7 import 'package:path/path.dart' as p;
8 import 'package:pub/src/entrypoint.dart'; 8 import 'package:pub/src/entrypoint.dart';
9 import 'package:pub/src/io.dart'; 9 import 'package:pub/src/io.dart';
10 import 'package:pub/src/system_cache.dart'; 10 import 'package:pub/src/system_cache.dart';
11 import 'package:scheduled_test/scheduled_test.dart'; 11 import 'package:scheduled_test/scheduled_test.dart';
12 12
13 import 'descriptor.dart' as d; 13 import 'descriptor.dart' as d;
14 import 'test_pub.dart'; 14 import 'test_pub.dart';
15 15
16 String root; 16 String root;
17 Entrypoint entrypoint; 17 Entrypoint entrypoint;
18 18
19 main() { 19 main() {
20 group('not in a git repo', () { 20 group('not in a git repo', () {
21 setUp(() { 21 setUp(() {
22 d.appDir().create(); 22 d.appDir().create();
23 scheduleEntrypoint(); 23 scheduleEntrypoint();
24 }); 24 });
25 25
26
27 integration('lists files recursively', () { 26 integration('lists files recursively', () {
28 d.dir(appPath, [ 27 d.dir(appPath, [
29 d.file('file1.txt', 'contents'), 28 d.file('file1.txt', 'contents'),
30 d.file('file2.txt', 'contents'), 29 d.file('file2.txt', 'contents'),
31 d.dir('subdir', [ 30 d.dir('subdir', [
32 d.file('subfile1.txt', 'subcontents'), 31 d.file('subfile1.txt', 'subcontents'),
33 d.file('subfile2.txt', 'subcontents') 32 d.file('subfile2.txt', 'subcontents')
34 ]) 33 ])
35 ]).create(); 34 ]).create();
36 35
37 schedule(() { 36 schedule(() {
38 expect(entrypoint.root.listFiles(), unorderedEquals([ 37 expect(entrypoint.root.listFiles(), unorderedEquals([
39 path.join(root, 'pubspec.yaml'), 38 p.join(root, 'pubspec.yaml'),
40 path.join(root, 'file1.txt'), 39 p.join(root, 'file1.txt'),
41 path.join(root, 'file2.txt'), 40 p.join(root, 'file2.txt'),
42 path.join(root, 'subdir', 'subfile1.txt'), 41 p.join(root, 'subdir', 'subfile1.txt'),
43 path.join(root, 'subdir', 'subfile2.txt') 42 p.join(root, 'subdir', 'subfile2.txt')
44 ])); 43 ]));
45 }); 44 });
46 }); 45 });
47 46
48 commonTests(); 47 commonTests();
49 }); 48 });
50 49
51 group('with git', () { 50 group('with git', () {
52 setUp(() { 51 setUp(() {
53 ensureGit(); 52 ensureGit();
54 d.git(appPath, [d.appPubspec()]).create(); 53 d.git(appPath, [d.appPubspec()]).create();
55 scheduleEntrypoint(); 54 scheduleEntrypoint();
56 }); 55 });
57 56
58 integration("includes files that are or aren't checked in", () { 57 integration("includes files that are or aren't checked in", () {
59 d.dir(appPath, [ 58 d.dir(appPath, [
60 d.file('file1.txt', 'contents'), 59 d.file('file1.txt', 'contents'),
61 d.file('file2.txt', 'contents'), 60 d.file('file2.txt', 'contents'),
62 d.dir('subdir', [ 61 d.dir('subdir', [
63 d.file('subfile1.txt', 'subcontents'), 62 d.file('subfile1.txt', 'subcontents'),
64 d.file('subfile2.txt', 'subcontents') 63 d.file('subfile2.txt', 'subcontents')
65 ]) 64 ])
66 ]).create(); 65 ]).create();
67 66
68 schedule(() { 67 schedule(() {
69 expect(entrypoint.root.listFiles(), unorderedEquals([ 68 expect(entrypoint.root.listFiles(), unorderedEquals([
70 path.join(root, 'pubspec.yaml'), 69 p.join(root, 'pubspec.yaml'),
71 path.join(root, 'file1.txt'), 70 p.join(root, 'file1.txt'),
72 path.join(root, 'file2.txt'), 71 p.join(root, 'file2.txt'),
73 path.join(root, 'subdir', 'subfile1.txt'), 72 p.join(root, 'subdir', 'subfile1.txt'),
74 path.join(root, 'subdir', 'subfile2.txt') 73 p.join(root, 'subdir', 'subfile2.txt')
75 ])); 74 ]));
76 }); 75 });
77 }); 76 });
78 77
79 integration("ignores files that are gitignored if desired", () { 78 integration("ignores files that are gitignored if desired", () {
80 d.dir(appPath, [ 79 d.dir(appPath, [
81 d.file('.gitignore', '*.txt'), 80 d.file('.gitignore', '*.txt'),
82 d.file('file1.txt', 'contents'), 81 d.file('file1.txt', 'contents'),
83 d.file('file2.text', 'contents'), 82 d.file('file2.text', 'contents'),
84 d.dir('subdir', [ 83 d.dir('subdir', [
85 d.file('subfile1.txt', 'subcontents'), 84 d.file('subfile1.txt', 'subcontents'),
86 d.file('subfile2.text', 'subcontents') 85 d.file('subfile2.text', 'subcontents')
87 ]) 86 ])
88 ]).create(); 87 ]).create();
89 88
90 schedule(() { 89 schedule(() {
91 expect(entrypoint.root.listFiles(useGitIgnore: true), unorderedEquals([ 90 expect(entrypoint.root.listFiles(useGitIgnore: true), unorderedEquals([
92 path.join(root, 'pubspec.yaml'), 91 p.join(root, 'pubspec.yaml'),
93 path.join(root, '.gitignore'), 92 p.join(root, '.gitignore'),
94 path.join(root, 'file2.text'), 93 p.join(root, 'file2.text'),
95 path.join(root, 'subdir', 'subfile2.text') 94 p.join(root, 'subdir', 'subfile2.text')
96 ])); 95 ]));
97 }); 96 });
98 97
99 schedule(() { 98 schedule(() {
100 expect(entrypoint.root.listFiles(), unorderedEquals([ 99 expect(entrypoint.root.listFiles(), unorderedEquals([
101 path.join(root, 'pubspec.yaml'), 100 p.join(root, 'pubspec.yaml'),
102 path.join(root, 'file1.txt'), 101 p.join(root, 'file1.txt'),
103 path.join(root, 'file2.text'), 102 p.join(root, 'file2.text'),
104 path.join(root, 'subdir', 'subfile1.txt'), 103 p.join(root, 'subdir', 'subfile1.txt'),
105 path.join(root, 'subdir', 'subfile2.text') 104 p.join(root, 'subdir', 'subfile2.text')
106 ])); 105 ]));
107 }); 106 });
108 }); 107 });
108
109 integration("ignores files that are gitignored even if the package isn't "
110 "the repo root", () {
111 d.dir(appPath, [
112 d.dir('sub', [
113 d.appPubspec(),
114 d.file('.gitignore', '*.txt'),
115 d.file('file1.txt', 'contents'),
116 d.file('file2.text', 'contents'),
117 d.dir('subdir', [
118 d.file('subfile1.txt', 'subcontents'),
119 d.file('subfile2.text', 'subcontents')
120 ])
121 ])
122 ]).create();
123
124 scheduleEntrypoint(p.join(appPath, 'sub'));
125
126 schedule(() {
127 expect(entrypoint.root.listFiles(useGitIgnore: true), unorderedEquals([
128 p.join(root, 'pubspec.yaml'),
129 p.join(root, '.gitignore'),
130 p.join(root, 'file2.text'),
131 p.join(root, 'subdir', 'subfile2.text')
132 ]));
133 });
134
135 schedule(() {
136 expect(entrypoint.root.listFiles(), unorderedEquals([
137 p.join(root, 'pubspec.yaml'),
138 p.join(root, 'file1.txt'),
139 p.join(root, 'file2.text'),
140 p.join(root, 'subdir', 'subfile1.txt'),
141 p.join(root, 'subdir', 'subfile2.text')
142 ]));
143 });
144 });
109 145
110 commonTests(); 146 commonTests();
111 }); 147 });
112 } 148 }
113 149
114 void scheduleEntrypoint() { 150 void scheduleEntrypoint([String path]) {
151 if (path == null) path = appPath;
115 schedule(() { 152 schedule(() {
116 root = path.join(sandboxDir, appPath); 153 root = p.join(sandboxDir, path);
117 entrypoint = new Entrypoint(root, 154 entrypoint = new Entrypoint(root,
118 new SystemCache.withSources(rootDir: root)); 155 new SystemCache.withSources(rootDir: root));
119 }, 'initializing entrypoint'); 156 }, 'initializing entrypoint at $path');
120 157
121 currentSchedule.onComplete.schedule(() { 158 currentSchedule.onComplete.schedule(() {
122 entrypoint = null; 159 entrypoint = null;
123 }, 'nulling entrypoint'); 160 }, 'nulling entrypoint');
124 } 161 }
125 162
126 void commonTests() { 163 void commonTests() {
127 integration('ignores broken symlinks', () { 164 integration('ignores broken symlinks', () {
128 // Windows requires us to symlink to a directory that actually exists. 165 // Windows requires us to symlink to a directory that actually exists.
129 d.dir(appPath, [d.dir('target')]).create(); 166 d.dir(appPath, [d.dir('target')]).create();
130 scheduleSymlink(path.join(appPath, 'target'), path.join(appPath, 'link')); 167 scheduleSymlink(p.join(appPath, 'target'), p.join(appPath, 'link'));
131 schedule(() => deleteEntry(path.join(sandboxDir, appPath, 'target'))); 168 schedule(() => deleteEntry(p.join(sandboxDir, appPath, 'target')));
132 169
133 schedule(() { 170 schedule(() {
134 expect(entrypoint.root.listFiles(), 171 expect(entrypoint.root.listFiles(),
135 equals([path.join(root, 'pubspec.yaml')])); 172 equals([p.join(root, 'pubspec.yaml')]));
136 }); 173 });
137 }); 174 });
138 175
139 integration('ignores pubspec.lock files', () { 176 integration('ignores pubspec.lock files', () {
140 d.dir(appPath, [ 177 d.dir(appPath, [
141 d.file('pubspec.lock'), 178 d.file('pubspec.lock'),
142 d.dir('subdir', [d.file('pubspec.lock')]) 179 d.dir('subdir', [d.file('pubspec.lock')])
143 ]).create(); 180 ]).create();
144 181
145 schedule(() { 182 schedule(() {
146 expect(entrypoint.root.listFiles(), 183 expect(entrypoint.root.listFiles(),
147 equals([path.join(root, 'pubspec.yaml')])); 184 equals([p.join(root, 'pubspec.yaml')]));
148 }); 185 });
149 }); 186 });
150 187
151 integration('ignores packages directories', () { 188 integration('ignores packages directories', () {
152 d.dir(appPath, [ 189 d.dir(appPath, [
153 d.dir('packages', [d.file('file.txt', 'contents')]), 190 d.dir('packages', [d.file('file.txt', 'contents')]),
154 d.dir('subdir', [ 191 d.dir('subdir', [
155 d.dir('packages', [d.file('subfile.txt', 'subcontents')]), 192 d.dir('packages', [d.file('subfile.txt', 'subcontents')]),
156 ]) 193 ])
157 ]).create(); 194 ]).create();
158 195
159 schedule(() { 196 schedule(() {
160 expect(entrypoint.root.listFiles(), 197 expect(entrypoint.root.listFiles(),
161 equals([path.join(root, 'pubspec.yaml')])); 198 equals([p.join(root, 'pubspec.yaml')]));
162 }); 199 });
163 }); 200 });
164 201
165 integration('allows pubspec.lock directories', () { 202 integration('allows pubspec.lock directories', () {
166 d.dir(appPath, [ 203 d.dir(appPath, [
167 d.dir('pubspec.lock', [ 204 d.dir('pubspec.lock', [
168 d.file('file.txt', 'contents'), 205 d.file('file.txt', 'contents'),
169 ]) 206 ])
170 ]).create(); 207 ]).create();
171 208
172 schedule(() { 209 schedule(() {
173 expect(entrypoint.root.listFiles(), unorderedEquals([ 210 expect(entrypoint.root.listFiles(), unorderedEquals([
174 path.join(root, 'pubspec.yaml'), 211 p.join(root, 'pubspec.yaml'),
175 path.join(root, 'pubspec.lock', 'file.txt') 212 p.join(root, 'pubspec.lock', 'file.txt')
176 ])); 213 ]));
177 }); 214 });
178 }); 215 });
179 216
180 group('and "beneath"', () { 217 group('and "beneath"', () {
181 integration('only lists files beneath the given root', () { 218 integration('only lists files beneath the given root', () {
182 d.dir(appPath, [ 219 d.dir(appPath, [
183 d.file('file1.txt', 'contents'), 220 d.file('file1.txt', 'contents'),
184 d.file('file2.txt', 'contents'), 221 d.file('file2.txt', 'contents'),
185 d.dir('subdir', [ 222 d.dir('subdir', [
186 d.file('subfile1.txt', 'subcontents'), 223 d.file('subfile1.txt', 'subcontents'),
187 d.file('subfile2.txt', 'subcontents'), 224 d.file('subfile2.txt', 'subcontents'),
188 d.dir('subsubdir', [ 225 d.dir('subsubdir', [
189 d.file('subsubfile1.txt', 'subsubcontents'), 226 d.file('subsubfile1.txt', 'subsubcontents'),
190 d.file('subsubfile2.txt', 'subsubcontents'), 227 d.file('subsubfile2.txt', 'subsubcontents'),
191 ]) 228 ])
192 ]) 229 ])
193 ]).create(); 230 ]).create();
194 231
195 schedule(() { 232 schedule(() {
196 expect(entrypoint.root.listFiles(beneath: path.join(root, 'subdir')), 233 expect(entrypoint.root.listFiles(beneath: p.join(root, 'subdir')),
197 unorderedEquals([ 234 unorderedEquals([
198 path.join(root, 'subdir', 'subfile1.txt'), 235 p.join(root, 'subdir', 'subfile1.txt'),
199 path.join(root, 'subdir', 'subfile2.txt'), 236 p.join(root, 'subdir', 'subfile2.txt'),
200 path.join(root, 'subdir', 'subsubdir', 'subsubfile1.txt'), 237 p.join(root, 'subdir', 'subsubdir', 'subsubfile1.txt'),
201 path.join(root, 'subdir', 'subsubdir', 'subsubfile2.txt') 238 p.join(root, 'subdir', 'subsubdir', 'subsubfile2.txt')
202 ])); 239 ]));
203 }); 240 });
204 }); 241 });
205 242
206 integration("doesn't care if the root is blacklisted", () { 243 integration("doesn't care if the root is blacklisted", () {
207 d.dir(appPath, [ 244 d.dir(appPath, [
208 d.file('file1.txt', 'contents'), 245 d.file('file1.txt', 'contents'),
209 d.file('file2.txt', 'contents'), 246 d.file('file2.txt', 'contents'),
210 d.dir('packages', [ 247 d.dir('packages', [
211 d.file('subfile1.txt', 'subcontents'), 248 d.file('subfile1.txt', 'subcontents'),
212 d.file('subfile2.txt', 'subcontents'), 249 d.file('subfile2.txt', 'subcontents'),
213 d.dir('subsubdir', [ 250 d.dir('subsubdir', [
214 d.file('subsubfile1.txt', 'subsubcontents'), 251 d.file('subsubfile1.txt', 'subsubcontents'),
215 d.file('subsubfile2.txt', 'subsubcontents') 252 d.file('subsubfile2.txt', 'subsubcontents')
216 ]) 253 ])
217 ]) 254 ])
218 ]).create(); 255 ]).create();
219 256
220 schedule(() { 257 schedule(() {
221 expect(entrypoint.root.listFiles(beneath: path.join(root, 'packages')), 258 expect(entrypoint.root.listFiles(beneath: p.join(root, 'packages')),
222 unorderedEquals([ 259 unorderedEquals([
223 path.join(root, 'packages', 'subfile1.txt'), 260 p.join(root, 'packages', 'subfile1.txt'),
224 path.join(root, 'packages', 'subfile2.txt'), 261 p.join(root, 'packages', 'subfile2.txt'),
225 path.join(root, 'packages', 'subsubdir', 'subsubfile1.txt'), 262 p.join(root, 'packages', 'subsubdir', 'subsubfile1.txt'),
226 path.join(root, 'packages', 'subsubdir', 'subsubfile2.txt') 263 p.join(root, 'packages', 'subsubdir', 'subsubfile2.txt')
227 ])); 264 ]));
228 }); 265 });
229 }); 266 });
230 }); 267 });
231 } 268 }
OLDNEW
« lib/src/package.dart ('K') | « lib/src/package.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698