>>>
void main() {
  useGeneratedCode(new StaticConfiguration(
      checkedMode: false,
      parents: {
        smoke_0.A: smoke_1.PolymerElement,
        smoke_0.B: smoke_0.A,
        smoke_0.C: smoke_0.B,
        smoke_0.D: smoke_0.B,
        smoke_0.E: smoke_0.C,
      },
      declarations: {
        smoke_0.A: {},
        smoke_0.B: {},
        smoke_0.C: {},
        smoke_0.D: {},
        smoke_0.E: {},
      }));
  new LogInjector().injectLogsFromUrl('sort_registration_test.html._buildLogs');
  configureForDeployment([
      () => Polymer.register('x-a', i0.A),
      () => Polymer.register('x-b', i0.B),
      () => Polymer.register('x-d', i0.D),
      () => Polymer.register('x-c', i0.C),
      () => Polymer.register('x-e', i0.E),
    ]);
  i0.main();
}
<<<
void main() {
  useGeneratedCode(new StaticConfiguration(
      checkedMode: false,
      parents: {
        smoke_0.A: smoke_1.PolymerElement,
        smoke_0.B: smoke_0.A,
        smoke_0.C: smoke_0.B,
        smoke_0.D: smoke_0.B,
        smoke_0.E: smoke_0.C,
      },
      declarations: {
        smoke_0.A: {},
        smoke_0.B: {},
        smoke_0.C: {},
        smoke_0.D: {},
        smoke_0.E: {},
      }));
  new LogInjector().injectLogsFromUrl('sort_registration_test.html._buildLogs');
  configureForDeployment([
    () => Polymer.register('x-a', i0.A),
    () => Polymer.register('x-b', i0.B),
    () => Polymer.register('x-d', i0.D),
    () => Polymer.register('x-c', i0.C),
    () => Polymer.register('x-e', i0.E),
  ]);
  i0.main();
}
>>> (indent 4)
    final server = new DatastoreLocalDevServer('connect',
        workingDirectory: path.join(
            packageRoot().absolute.path, 'test/tmp_data'),
        environment: <String, String>{
            'JAVA': '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'},
        minUpTimeBeforeShutdown: new Duration(seconds: 0));
<<<
    final server = new DatastoreLocalDevServer('connect',
        workingDirectory: path.join(
            packageRoot().absolute.path, 'test/tmp_data'),
        environment: <String, String>{
          'JAVA': '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'
        },
        minUpTimeBeforeShutdown: new Duration(seconds: 0));