blob: 29c407f238021ac866ca1d5b60083f7c096cd534 [file] [log] [blame]
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// Unit test for in-memory pipelines.
import 'dart:async';
import 'package:modular_test/src/memory_pipeline.dart';
import 'pipeline_common.dart';
main() {
runPipelineTest(new MemoryPipelineTestStrategy());
}
/// The strategy implementation to exercise the pipeline test on a
/// [MemoryPipeline].
class MemoryPipelineTestStrategy
implements PipelineTestStrategy<MemoryModularStep> {
@override
Uri get testRootUri => Uri.parse('/');
@override
FutureOr<Pipeline<MemoryModularStep>> createPipeline(
Map<Uri, String> sources, List<MemoryModularStep> steps) {
return new MemoryPipeline(sources, steps);
}
@override
MemoryModularStep createConcatStep({bool requestSources: true}) =>
ConcatStep(requestSources);
@override
MemoryModularStep createLowerCaseStep({bool requestModuleData: true}) =>
LowerCaseStep(requestModuleData);
@override
MemoryModularStep createReplaceAndJoinStep(
{bool requestDependenciesData: true}) =>
ReplaceAndJoinStep(requestDependenciesData);
@override
MemoryModularStep createReplaceAndJoinStep2(
{bool requestDependenciesData: true}) =>
ReplaceAndJoinStep2(requestDependenciesData);
@override
String getResult(covariant MemoryPipeline pipeline, Module m, DataId dataId) {
return pipeline.resultsForTesting[m][dataId];
}
FutureOr<void> cleanup(Pipeline<MemoryModularStep> pipeline) => null;
}
class ConcatStep implements MemoryModularStep {
final bool needsSources;
List<DataId> get dependencyDataNeeded => const [];
List<DataId> get moduleDataNeeded => const [];
DataId get resultKind => const DataId("concat");
ConcatStep(this.needsSources);
Future<Object> execute(Module module, SourceProvider sourceProvider,
ModuleDataProvider dataProvider) {
var buffer = new StringBuffer();
for (var uri in module.sources) {
buffer.write("$uri: ${sourceProvider(module.rootUri.resolveUri(uri))}\n");
}
return Future.value('$buffer');
}
}
class LowerCaseStep implements MemoryModularStep {
bool get needsSources => false;
List<DataId> get dependencyDataNeeded => const [];
final List<DataId> moduleDataNeeded;
DataId get resultKind => const DataId("lowercase");
LowerCaseStep(bool requestConcat)
: moduleDataNeeded = requestConcat ? const [DataId("concat")] : const [];
Future<Object> execute(Module module, SourceProvider sourceProvider,
ModuleDataProvider dataProvider) {
var concatData = dataProvider(module, const DataId("concat")) as String;
if (concatData == null) return Future.value("data for $module was null");
return Future.value(concatData.toLowerCase());
}
}
class ReplaceAndJoinStep implements MemoryModularStep {
bool get needsSources => false;
final List<DataId> dependencyDataNeeded;
List<DataId> get moduleDataNeeded => const [DataId("lowercase")];
DataId get resultKind => const DataId("join");
ReplaceAndJoinStep(bool requestDependencies)
: dependencyDataNeeded =
requestDependencies ? const [DataId("join")] : [];
Future<Object> execute(Module module, SourceProvider sourceProvider,
ModuleDataProvider dataProvider) {
var buffer = new StringBuffer();
for (var dependency in module.dependencies) {
buffer.write("${dataProvider(dependency, const DataId("join"))}\n");
}
var moduleData = dataProvider(module, const DataId("lowercase")) as String;
buffer.write(moduleData.replaceAll(".dart:", ""));
return Future.value('$buffer');
}
}
class ReplaceAndJoinStep2 implements MemoryModularStep {
bool get needsSources => false;
final List<DataId> dependencyDataNeeded;
List<DataId> get moduleDataNeeded => const [DataId("lowercase")];
DataId get resultKind => const DataId("join");
ReplaceAndJoinStep2(bool requestDependencies)
: dependencyDataNeeded =
requestDependencies ? const [DataId("lowercase")] : [];
Future<Object> execute(Module module, SourceProvider sourceProvider,
ModuleDataProvider dataProvider) {
var buffer = new StringBuffer();
for (var dependency in module.dependencies) {
buffer.write("${dataProvider(dependency, const DataId("lowercase"))}\n");
}
var moduleData = dataProvider(module, const DataId("lowercase")) as String;
buffer.write(moduleData.replaceAll(".dart:", ""));
return Future.value('$buffer');
}
}