6
6
7
7
import 'package:path/path.dart' as p;
8
8
import 'package:pub/src/io.dart' ;
9
+ import 'package:pub/src/lock_file.dart' ;
10
+ import 'package:pub/src/source_registry.dart' ;
9
11
import 'package:test/test.dart' ;
10
12
11
13
import '../../descriptor.dart' as d;
@@ -47,14 +49,14 @@ void main() {
47
49
48
50
var repo = d.git ('foo.git' , [
49
51
d.dir ('sub' , [
50
- d.dir ('dir' , [d.libPubspec ('sub' , '1.0.0' ), d.libDir ('sub' , '1.0.0' )])
52
+ d.dir ('dir% ' , [d.libPubspec ('sub' , '1.0.0' ), d.libDir ('sub' , '1.0.0' )])
51
53
])
52
54
]);
53
55
await repo.create ();
54
56
55
57
await d.appDir ({
56
58
'sub' : {
57
- 'git' : {'url' : '../foo.git' , 'path' : 'sub/dir' }
59
+ 'git' : {'url' : '../foo.git' , 'path' : 'sub/dir%25 ' }
58
60
}
59
61
}).create ();
60
62
@@ -65,15 +67,65 @@ void main() {
65
67
d.dir ('cache' , [d.gitPackageRepoCacheDir ('foo' )]),
66
68
d.hashDir ('foo' , [
67
69
d.dir ('sub' , [
68
- d.dir ('dir' , [d.libDir ('sub' , '1.0.0' )])
70
+ d.dir ('dir% ' , [d.libDir ('sub' , '1.0.0' )])
69
71
])
70
72
])
71
73
])
72
74
]).validate ();
73
75
74
76
await d.appPackagesFile ({
75
- 'sub' : pathInCache ('git/foo-${await repo .revParse ('HEAD' )}/sub/dir' )
77
+ 'sub' : pathInCache ('git/foo-${await repo .revParse ('HEAD' )}/sub/dir%25 ' )
76
78
}).validate ();
79
+
80
+ final lockFile = LockFile .load (
81
+ p.join (d.sandbox, appPath, 'pubspec.lock' ), SourceRegistry ());
82
+
83
+ expect (lockFile.packages['sub' ].description['path' ], 'sub/dir%25' ,
84
+ reason: 'use uris to specify the path relative to the repo' );
85
+ });
86
+
87
+ test ('depends on a package in a deep subdirectory, non-relative uri' ,
88
+ () async {
89
+ ensureGit ();
90
+
91
+ var repo = d.git ('foo.git' , [
92
+ d.dir ('sub' , [
93
+ d.dir ('dir%' , [d.libPubspec ('sub' , '1.0.0' ), d.libDir ('sub' , '1.0.0' )])
94
+ ])
95
+ ]);
96
+ await repo.create ();
97
+
98
+ await d.appDir ({
99
+ 'sub' : {
100
+ 'git' : {
101
+ 'url' : p.toUri (p.join (d.sandbox, 'foo.git' )).toString (),
102
+ 'path' : 'sub/dir%25'
103
+ }
104
+ }
105
+ }).create ();
106
+
107
+ await pubGet ();
108
+
109
+ await d.dir (cachePath, [
110
+ d.dir ('git' , [
111
+ d.dir ('cache' , [d.gitPackageRepoCacheDir ('foo' )]),
112
+ d.hashDir ('foo' , [
113
+ d.dir ('sub' , [
114
+ d.dir ('dir%' , [d.libDir ('sub' , '1.0.0' )])
115
+ ])
116
+ ])
117
+ ])
118
+ ]).validate ();
119
+
120
+ await d.appPackagesFile ({
121
+ 'sub' : pathInCache ('git/foo-${await repo .revParse ('HEAD' )}/sub/dir%25' )
122
+ }).validate ();
123
+
124
+ final lockFile = LockFile .load (
125
+ p.join (d.sandbox, appPath, 'pubspec.lock' ), SourceRegistry ());
126
+
127
+ expect (lockFile.packages['sub' ].description['path' ], 'sub/dir%25' ,
128
+ reason: 'use uris to specify the path relative to the repo' );
77
129
});
78
130
79
131
test ('depends on multiple packages in subdirectories' , () async {
0 commit comments