anchor.diff:  import 'package:devops/src/pubspec/pubspec.dart';
   import 'dart:async';
   import 'package:devops/src/pubspec/dependency.dart';
  -
  -main() {
  +import 'package:stack_trace/stack_trace.dart';
  +import 'package:logging/logging.dart';
  +
  +main() async {
  +  Logger.root.level = Level.ALL;
  +  Logger.root.onRecord.listen(print);
  +  hierarchicalLoggingEnabled = true;
  +
  +  Chain.capture(() {
  +    runDaTests();
  +  }, onError: (error, stackChain) {
  +    print("Caught error $error\n"
  +        "${stackChain.terse}");
  +  });
  +}
  +
  +runDaTests() {
     TestProcessor processor;
   
     group('depthFirst', () {
  
positive.code:     testCase(
          thatWhen: 'no projects provided',
          asProvidedBy: () => [],
          expectTheseInvocations: () => []);
    });
  }
  
  
negative.code:   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
  }
  
  //foo() {
  //  testCase(
  //      thatWhen: 'no projects provided',
  //      asProvidedBy: () => [],
  //      expectTheseInvocations: () => []);
  //}
  
  testCase({String thatWhen, Iterable<Project> asProvidedBy(),
      List<TestProcessInvocation> expectTheseInvocations(
          Iterable<Project> projects)}) {
    TestProcessor processor;
    Iterable<Project> theProjects;
  
    scheduleForProjects(Iterable<Project> projects()) {
      return schedule(() async {
        theProjects = projects();
        processor = new TestProcessor();
        final DependencyGraph graph =
            await getDependencyGraph(theProjects.toSet());
        return graph.depthFirst(processor);
      });
    }
  
    setUpForProjects(Iterable<Project> projects()) {
      setUp(() => scheduleForProjects(projects));
    }
  
    group('when $thatWhen', () {
      setUpForProjects(asProvidedBy);
      TestProcessor.createTests(
          () => processor, () => expectTheseInvocations(theProjects));
    });
  }
  
  Project aProject(String name,
      {Iterable<PathReference> pathDependencies: const []}) {
    final dependencies = {};
    pathDependencies.forEach((pd) {
      // WARNING: only makes sense if path == name
      dependencies[pd.path] = pd;
    });
  
    return new MockProject(
        name, new PubSpec(name: name, dependencies: dependencies));
  }
  
  class TestPrecondition {
    String description;
  