PackageAssetReader.canRead
.build_config
0.4.x
.package:html
.TestOn
annotations.1.0.0
.PackageAssetReader
when the current working directory is not the root package directory as long as it uses a pub layout.package:analyzer
to <0.35.0
.package:analyzer
to ‘<0.34.0’.package:build
version 1.0.0.<3.0.0
.TypeMatcher
.Resolver
by keeping a cached instance of AnalyzerResolvers
.Uri.path
paths.findAssets
in PackageAssetReader
.DebugIndexBuilder
, which by default generates a test/index.html
with links to debug tests in your test/**_test.dart
folder, linking to the generated *_test.debug.html
files. NOTE: This only works for web-based tests.PackageAssetReader
when running with a package map pointing to a “packages” directory structure, as is generated by build_runner
. Drop support for a broken findAssets
implementation.BarbackResolvers
with AnalyzerResolvers
from build_resolvers
by default.Resolvers
used for resolve*
utilities.action
multiple times when there are multiple sources passed to resolve*
..debug.html
files for all tests, which can be loaded in the browser to directly run tests and debug them without going through the package:test runner.0.12.0
.CopyBuilder
in favor of TestBuilder
which takes closures to change behavior rather than adding configuration for every possible modification.{$lib/$test/$web}
assets supported by the build_runner
and bazel_codegen
implementations of package:build
. For an example see test/test_builder_test.dart
. Note that this is technically a BREAKING CHANGE, as additional inputs will be matched for overzealous builders (like TestBuilder
).resolverFor
as an optional parameter to resolveSources
. By default a Resolver
is returned for the first asset provided; to modify that the name of another asset may be provided. This is a BREAKING CHANGE, as previously the last asset was used.InMemoryAssetReader.shareAssetCache
constructor. This is useful for the case where the reader should be kept up to date as assets are written through a writer.buildInputs
stream to CopyBuilder
which emits an event for each BuildStep.inputId
at the top of the build
method.CopyBuilder
automatically skips the placeholder files (any file ending in $
). This is technically breaking but should not affect any real users and is not being released as a breaking change.TestBootstrapBuilder
to only target _test.dart
files.resolveSources
, a way to resolve multiple libraries for testing, including any combination of fake files (in-memory, created in the test) and real ones (from on-disk packages):test('multiple assets, some mock, some on disk', () async { final real = 'build_test|test/_files/example_lib.dart'; final mock = 'build_test|test/_files/not_really_here.dart'; final library = await resolveSources( { real: useAssetReader, mock: r''' // This is a fake library that we're mocking. library example; // This is a real on-disk library we are using. import 'example_lib.dart'; class ExamplePrime extends Example {} ''', }, (resolver) => resolver.findLibraryByName('example'), ); final type = library.getType('ExamplePrime'); expect(type, isNotNull); expect(type.supertype.name, 'Example'); });
inputExtension
argument to CopyBuilder
. When used the builder with throw if any assets are provided that don't match the input extension.build_barback
version 0.5.x
. The breaking behavior change should not impact test uses that don't already have a version constraint on that package.TestBootstrapBuilder
under the builder.dart
library. This can be used to bootstrap tests similar to the test/pub_serve
Transformer.AssetReader#findAssets
implementations now return a Stream<AssetId>
to match the latest build
package.DatedValue
, DatedString
, and DatedBytes
apis are now gone, since timestamps are no longer used by package:build. Instead the InMemoryAssetReader
and other apis take a Map<AssetId, dynamic>
, and will automatically convert any String
values into List<int>
values.outputs
map of testBuilder
works a little bit differently due to the removal of DatedValue
and DatedString
.String
, then the asset is by default decoded using UTF8, and matched against the string.matcher
, it will match againt the actual bytes of the asset (in List<int>
form).decodedMatches
, which can be combined with other matchers to match against the string contents. For example, to match a string containing a substring, you would do decodedMatches(contains('some substring'))
.InMemoryAssetReader
, MultiAssetReader
, StubAssetReader
and PackageAssetReader
now implement the MultiPackageAssetReader
interface.testBuilder
now supports Builder
s that call findAssets
in non-root packages.GlobbingBuilder
which globs files in a package.RecordingAssetReader
interface, which adds the Iterable<AssetId> get assetsRead
getter.InMemoryAssetReader
now implements RecordingAssetReader
.MultiAssetReader
now requires all its wrapped readers to implement the MultiPackageAssetReader
interface.Add mapAssetIds
argument to checkOutputs
for cases where the logical asset location recorded by the builder does not match the written location.
Add recordLogs
, a top-level function that invokes scopeLog
and captures the resulting Stream<LogRecord>
for testing. Can be used with the provided anyLogOf
, infoLogOf
, warningLogOf
, severeLogOf
matchers in order to test a build process:
test('should log "uh oh!"', () async { final logs = recordLogs(() => runBuilder()); expect(logs, emitsInOrder([ anyLogOf('uh oh!'), ]); });
forPackages
and forPackageRoot
to PackageAssetReader
- these are convenience constructors for pointing to a small set of packages (fake or real) for testing purposes. For example:test('should resolve multiple libraries', () async { reader = new PackageAssetReader.forPackages({ 'example_a': '_libs/example_a', 'example_b': '_libs/example_b', }); expect(await reader.canRead(fileFromExampleLibA), isTrue); expect(await reader.canRead(fileFromExampleLibB), isTrue); expect(await reader.canRead(fileFromExampleLibC), isFalse); });
resolveSource
and resolveAsset
now take an action
to perform with the Resolver instance.package:build_barback
v0.4.xpackage:build
v0.10.xAssetReader
implementations always return Future
from canRead
resolveAsset
, which is similar to resolveSource
but specifies a real asset that lives on the file system. For example, to resolve the main library of package:collection
:var pkgCollection = new AssetId('collection', 'lib/collection.dart'); var resolver = await resolveAsset(pkgCollection); // ...
package:build_barback >=0.2.0 <0.4.0
._ResolveSourceBuilder
so it is not skippedhasInput
to canRead
in AssetReader
implementationsdeclareOutputs
with buildExtensions
in Builder
implementationsCopyBuilder
no longer has an outputPackage
field since outputs can only ever be in the same package as inputs.MultiAssetReader
to the public API.PackageAssetReader
, a standalone asset reader that uses a PackageResolver
to map an AssetId
to a location on disk.resolveSource
, a top-level function that can resolve arbitrary Dart source code. This can be useful in testing your own code that uses a Resolver
to do type checks.findAssets
implementations to StubAssetReader an InMemoryAssetReaderscopeLog
visible so tests can be run with an available log
without going through runBuilder.Updates to work with build
version 0.7.0.
testBuilder
method now accepts List<int>
values for both sourceAssets
and outputs
.checkOutputs
method is now public.testBuilder
method now requires a RecordingAssetWriter
instead of just an AssetWriter
for the writer
parameter.Matcher
is provided as a value in outputs
, then it will match against the same value that was written. For example if your builder uses writeAsString
then it will match against that string. If you use writeAsBytes
then it will match against those bytes. It will not automatically convert to/from bytes and strings.makeAsset
and makeAssets
methods. There is no more Asset
class so these don't really have any value any more.addAssets
has changed to void addAssets(Map<AssetId, dynamic> assets, InMemoryAssetWriter writer)
. Values of the map may be either String
or List<int>
.InMemoryAssetReader#assets
and InMemoryAssetWriter#assets
have changed to a type of Map<AssetId, DatedValue>
from a type of Map<AssetId, DatedString>
. DatedValue
has both a stringValue
and bytesValue
getter.InMemoryAssetReader
and InMemoryAssetWriter
have been updated to implement the new AssetReader
and AssetWriter
interfaces (see the build
package CHANGELOG for more details).InMemoryAssetReader#cacheAsset
has been changed to two separate methods, void cacheStringAsset(AssetId id, String contents)
and void cacheBytesAsset(AssetId id, List<int> bytes)
.equalsAsset
matcher has been removed, since there is no more Asset
class.isInput
outputs
is nullwriter
GenericBuilderTransformer
and use BuilderTransformer
in the tests.logLevel
and onLog
named args to testPhases
. These can be used to test your log messages, see test/utils_test.dart
for an example.testPhases
.Builder
s using in memory data structures. Most notably, the testPhases
method.