Example #1
0
  it('supports custom rules in the project (pass)', done => {
    // This test is disabled on Windows Bazel runs because it relies on TSLint custom rule
    // loading behavior, which doesn't work with runfile resolution.
    if (isWindowsBazel) {
      done();

      return;
    }

    const testRunner = new SchematicTestRunner(
      '@_/test',
      require.resolve('./test/collection.json'),
    );

    const host = new TempScopedNodeJsSyncHost();
    host.write(normalize('/file.ts'), virtualFs.stringToFileBuffer(`
      console.log('hello world');
    `)).subscribe();
    const tree = new UnitTestTree(new HostTree(host));

    const messages: string[] = [];

    concat(
      testRunner.runSchematicAsync('custom-rule', { shouldPass: true }, tree),
      new Observable<void>(obs => {
        process.chdir(getSystemPath(host.root));
        testRunner.logger.subscribe(x => messages.push(x.message));
        testRunner.engine.executePostTasks().subscribe(obs);
      }),
    ).toPromise().then(done, done.fail);
  });
    it('should replace the module path string', async () => {
      await host.write(lazyRoutePath, lazyRoute).toPromise();

      schematicRunner.runSchematic('migration-08', {}, tree);
      await schematicRunner.engine.executePostTasks().toPromise();

      const routes = await host.read(lazyRoutePath)
        .toPromise()
        .then(virtualFs.fileBufferToString);

      expect(routes).not.toContain('./lazy/lazy.module#LazyModule');
      expect(routes).toContain(
        `loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule)`);
    });
Example #3
0
  it('works with config object', done => {
    const testRunner = new SchematicTestRunner(
      '@_/test',
      path.join(__dirname, 'test/collection.json'),
    );

    const host = new TempScopedNodeJsSyncHost();
    host.write(normalize('/file.ts'), virtualFs.stringToFileBuffer(`
      export function() { console.log(1); }
    `)).subscribe();
    const tree = new UnitTestTree(new HostTree(host));

    testRunner.runSchematicAsync('run-task', null, tree)
      .subscribe(undefined, done.fail, done);
  });
Example #4
0
  it('works with config object', done => {
    const testRunner = new SchematicTestRunner(
      '@_/test',
      require.resolve('./test/collection.json'),
    );

    const host = new TempScopedNodeJsSyncHost();
    host.write(normalize('/file.ts'), virtualFs.stringToFileBuffer(`
      export function() { console.log(1); }
    `)).subscribe();
    const tree = new UnitTestTree(new HostTree(host));

    testRunner.runSchematicAsync('run-task', null, tree)
      .toPromise().then(done, done.fail);
  });
Example #5
0
  it('supports custom rules in the project (fail)', done => {
    // This test is disabled on Windows Bazel runs because it relies on TSLint custom rule
    // loading behavior, which doesn't work with runfile resolution.
    if (isWindowsBazel) {
      done();

      return;
    }

    const testRunner = new SchematicTestRunner(
      '@_/test',
      path.join(__dirname, 'test/collection.json'),
    );

    const host = new TempScopedNodeJsSyncHost();
    host.write(normalize('/file.ts'), virtualFs.stringToFileBuffer(`
      console.log('hello world');
    `)).subscribe();
    const tree = new UnitTestTree(new HostTree(host));

    const messages: string[] = [];
    let error = false;

    concat(
      testRunner.runSchematicAsync('custom-rule', { shouldPass: false }, tree),
      new Observable<void>(obs => {
        process.chdir(getSystemPath(host.root));
        testRunner.logger.subscribe(x => messages.push(x.message));
        testRunner.engine.executePostTasks().subscribe(obs);
      }).pipe(
        catchError(() => {
          error = true;

          return [];
        }),
      ),
      new Observable<void>(obs => {
        expect(messages.find(msg => /\bcustom-rule fail\b/.test(msg))).not.toBeUndefined();
        expect(error).toBe(true);

        obs.complete();
      }),
    ).toPromise().then(done, done.fail);
  });
Example #6
0
  it('supports custom rules in the project (pass)', done => {
    const testRunner = new SchematicTestRunner(
      '@_/test',
      path.join(__dirname, 'test/collection.json'),
    );

    const host = new TempScopedNodeJsSyncHost();
    host.write(normalize('/file.ts'), virtualFs.stringToFileBuffer(`
      console.log('hello world');
    `)).subscribe();
    const tree = new UnitTestTree(new HostTree(host));

    const messages: string[] = [];

    concat(
      testRunner.runSchematicAsync('custom-rule', { shouldPass: true }, tree),
      new Observable<void>(obs => {
        process.chdir(getSystemPath(host.root));
        testRunner.logger.subscribe(x => messages.push(x.message));
        testRunner.engine.executePostTasks().subscribe(obs);
      }),
    ).subscribe(undefined, done.fail, done);
  });
Example #7
0
  it('shows errors with config object', done => {
    const testRunner = new SchematicTestRunner(
      '@_/test',
      path.join(__dirname, 'test/collection.json'),
    );

    const host = new TempScopedNodeJsSyncHost();
    host.write(normalize('/file.ts'), virtualFs.stringToFileBuffer(`
      // ${'...MORE_THAN_100'.repeat(10)}
      export function() { console.log(1); }
    `)).subscribe();
    const tree = new UnitTestTree(new HostTree(host));

    const messages: string[] = [];
    let error = false;

    concat(
      testRunner.runSchematicAsync('run-task', null, tree),
      new Observable<void>(obs => {
        process.chdir(getSystemPath(host.root));
        testRunner.logger.subscribe(x => messages.push(x.message));
        testRunner.engine.executePostTasks().subscribe(obs);
      }).pipe(
        catchError(() => {
          error = true;

          return [];
        }),
      ),
      new Observable<void>(obs => {
        expect(messages.find(msg => /\b80\b/.test(msg))).not.toBeUndefined();
        expect(error).toBe(true);

        obs.complete();
      }),
    ).subscribe(undefined, done.fail, done);
  });
describe('Migration to version 8', () => {
  const schematicRunner = new SchematicTestRunner(
    'migrations',
    require.resolve('../migration-collection.json'),
  );

  let tree: UnitTestTree;
  let host: TempScopedNodeJsSyncHost;

  const lazyRoutePath = normalize('src/lazy-route.ts');
  const lazyRoute = virtualFs.stringToFileBuffer(`
    import { Route } from '@angular/router';
    const routes: Array<Route> = [
      {
        path: '',
        loadChildren: './lazy/lazy.module#LazyModule'
      }
    ];
  `);

  const lazyChildRoute = virtualFs.stringToFileBuffer(`
    import { Route } from '@angular/router';
    const routes: Array<Route> = [
      {
        path: '',
        children: [{
          path: 'child',
          loadChildren: './lazy/lazy.module#LazyModule'
        }]
      }
    ];
  `);

  describe('Migration to import() style lazy routes', () => {
    beforeEach(async () => {
      host = new TempScopedNodeJsSyncHost();
      tree = new UnitTestTree(new HostTree(host));
      tree.create('/package.json', JSON.stringify({}));
      process.chdir(getSystemPath(host.root));
    });

    it('should replace the module path string', async () => {
      await host.write(lazyRoutePath, lazyRoute).toPromise();

      schematicRunner.runSchematic('migration-08', {}, tree);
      await schematicRunner.engine.executePostTasks().toPromise();

      const routes = await host.read(lazyRoutePath)
        .toPromise()
        .then(virtualFs.fileBufferToString);

      expect(routes).not.toContain('./lazy/lazy.module#LazyModule');
      expect(routes).toContain(
        `loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule)`);
    });

    it('should replace the module path string in a child path', async () => {
      await host.write(lazyRoutePath, lazyChildRoute).toPromise();

      schematicRunner.runSchematic('migration-08', {}, tree);
      await schematicRunner.engine.executePostTasks().toPromise();

      const routes = await host.read(lazyRoutePath)
        .toPromise()
        .then(virtualFs.fileBufferToString);

      expect(routes).not.toContain('./lazy/lazy.module#LazyModule');

      expect(routes).toContain(
        `loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule)`);
    });
  });
});