OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 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. |
| 4 |
| 5 /// Pub-specific scheduled_test descriptors. |
| 6 library descriptor; |
| 7 |
| 8 import '../../../pkg/oauth2/lib/oauth2.dart' as oauth2; |
| 9 import '../../../pkg/scheduled_test/lib/scheduled_server.dart'; |
| 10 import '../../../pkg/scheduled_test/lib/scheduled_test.dart'; |
| 11 import '../../../pkg/scheduled_test/lib/descriptor.dart'; |
| 12 |
| 13 import '../../pub/utils.dart'; |
| 14 import 'descriptor/git.dart'; |
| 15 import 'descriptor/tar.dart'; |
| 16 import 'test_pub.dart'; |
| 17 |
| 18 export '../../../pkg/scheduled_test/lib/descriptor.dart'; |
| 19 export 'descriptor/git.dart'; |
| 20 export 'descriptor/tar.dart'; |
| 21 |
| 22 /// Creates a new [GitRepoDescriptor] with [name] and [contents]. |
| 23 GitRepoDescriptor git(String name, [Iterable<Descriptor> contents]) => |
| 24 new GitRepoDescriptor(name, contents == null ? <Descriptor>[] : contents); |
| 25 |
| 26 /// Creates a new [TarRepoDescriptor] with [name] and [contents]. |
| 27 TarFileDescriptor tar(String name, [Iterable<Descriptor> contents]) => |
| 28 new TarFileDescriptor(name, contents == null ? <Descriptor>[] : contents); |
| 29 |
| 30 /// Describes a package that passes all validation. |
| 31 Descriptor get validPackage => dir(appPath, [ |
| 32 libPubspec("test_pkg", "1.0.0"), |
| 33 file("LICENSE", "Eh, do what you want."), |
| 34 dir("lib", [ |
| 35 file("test_pkg.dart", "int i = 1;") |
| 36 ]) |
| 37 ]); |
| 38 |
| 39 /// Describes a file named `pubspec.yaml` with the given YAML-serialized |
| 40 /// [contents], which should be a serializable object. |
| 41 /// |
| 42 /// [contents] may contain [Future]s that resolve to serializable objects, |
| 43 /// which may in turn contain [Future]s recursively. |
| 44 Descriptor pubspec(Map contents) { |
| 45 return async(awaitObject(contents).then((resolvedContents) => |
| 46 file("pubspec.yaml", yaml(resolvedContents)))); |
| 47 } |
| 48 |
| 49 /// Describes a file named `pubspec.yaml` for an application package with the |
| 50 /// given [dependencies]. |
| 51 Descriptor appPubspec(List dependencies) { |
| 52 return pubspec({ |
| 53 "name": "myapp", |
| 54 "dependencies": dependencyListToMap(dependencies) |
| 55 }); |
| 56 } |
| 57 |
| 58 /// Describes a file named `pubspec.yaml` for a library package with the given |
| 59 /// [name], [version], and [deps]. If "sdk" is given, then it adds an SDK |
| 60 /// constraint on that version. |
| 61 Descriptor libPubspec(String name, String version, {List deps, String sdk}) { |
| 62 var map = packageMap(name, version, deps); |
| 63 |
| 64 if (sdk != null) { |
| 65 map["environment"] = { |
| 66 "sdk": sdk |
| 67 }; |
| 68 } |
| 69 |
| 70 return pubspec(map); |
| 71 } |
| 72 |
| 73 /// Describes a directory named `lib` containing a single dart file named |
| 74 /// `<name>.dart` that contains a line of Dart code. |
| 75 Descriptor libDir(String name, [String code]) { |
| 76 // Default to printing the name if no other code was given. |
| 77 if (code == null) { |
| 78 code = name; |
| 79 } |
| 80 |
| 81 return dir("lib", [ |
| 82 file("$name.dart", 'main() => "$code";') |
| 83 ]); |
| 84 } |
| 85 |
| 86 /// Describes a directory for a package installed from the mock package server. |
| 87 /// This directory is of the form found in the global package cache. |
| 88 Descriptor packageCacheDir(String name, String version) { |
| 89 return dir("$name-$version", [ |
| 90 libDir(name, '$name $version') |
| 91 ]); |
| 92 } |
| 93 |
| 94 /// Describes a directory for a Git package. This directory is of the form |
| 95 /// found in the revision cache of the global package cache. |
| 96 Descriptor gitPackageRevisionCacheDir(String name, [int modifier]) { |
| 97 var value = name; |
| 98 if (modifier != null) value = "$name $modifier"; |
| 99 return pattern(new RegExp("$name${r'-[a-f0-9]+'}"), |
| 100 (dirName) => dir(dirName, [libDir(name, value)])); |
| 101 } |
| 102 |
| 103 /// Describes a directory for a Git package. This directory is of the form |
| 104 /// found in the repo cache of the global package cache. |
| 105 Descriptor gitPackageRepoCacheDir(String name) { |
| 106 return pattern(new RegExp("$name${r'-[a-f0-9]+'}"), |
| 107 (dirName) => dir(dirName, [ |
| 108 dir('hooks'), |
| 109 dir('info'), |
| 110 dir('objects'), |
| 111 dir('refs') |
| 112 ])); |
| 113 } |
| 114 |
| 115 /// Describes the `packages/` directory containing all the given [packages], |
| 116 /// which should be name/version pairs. The packages will be validated against |
| 117 /// the format produced by the mock package server. |
| 118 /// |
| 119 /// A package with a null version should not be installed. |
| 120 Descriptor packagesDir(Map<String, String> packages) { |
| 121 var contents = <Descriptor>[]; |
| 122 packages.forEach((name, version) { |
| 123 if (version == null) { |
| 124 contents.add(nothing(name)); |
| 125 } else { |
| 126 contents.add(dir(name, [ |
| 127 file("$name.dart", 'main() => "$name $version";') |
| 128 ])); |
| 129 } |
| 130 }); |
| 131 return dir(packagesPath, contents); |
| 132 } |
| 133 |
| 134 /// Describes the global package cache directory containing all the given |
| 135 /// [packages], which should be name/version pairs. The packages will be |
| 136 /// validated against the format produced by the mock package server. |
| 137 /// |
| 138 /// A package's value may also be a list of versions, in which case all |
| 139 /// versions are expected to be installed. |
| 140 Descriptor cacheDir(Map packages) { |
| 141 var contents = <Descriptor>[]; |
| 142 packages.forEach((name, versions) { |
| 143 if (versions is! List) versions = [versions]; |
| 144 for (var version in versions) { |
| 145 contents.add(packageCacheDir(name, version)); |
| 146 } |
| 147 }); |
| 148 return dir(cachePath, [ |
| 149 dir('hosted', [ |
| 150 async(port.then((p) => dir('localhost%58$p', contents))) |
| 151 ]) |
| 152 ]); |
| 153 } |
| 154 |
| 155 /// Describes the file in the system cache that contains the client's OAuth2 |
| 156 /// credentials. The URL "/token" on [server] will be used as the token |
| 157 /// endpoint for refreshing the access token. |
| 158 Descriptor credentialsFile( |
| 159 ScheduledServer server, |
| 160 String accessToken, |
| 161 {String refreshToken, |
| 162 DateTime expiration}) { |
| 163 return async(server.url.then((url) { |
| 164 return dir(cachePath, [ |
| 165 file('credentials.json', new oauth2.Credentials( |
| 166 accessToken, |
| 167 refreshToken, |
| 168 url.resolve('/token'), |
| 169 ['https://www.googleapis.com/auth/userinfo.email'], |
| 170 expiration).toJson()) |
| 171 ]); |
| 172 })); |
| 173 } |
| 174 |
| 175 /// Describes the application directory, containing only a pubspec specifying |
| 176 /// the given [dependencies]. |
| 177 DirectoryDescriptor appDir(List dependencies) => |
| 178 dir(appPath, [appPubspec(dependencies)]); |
OLD | NEW |