• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

gturi / nca / 8277672099

14 Mar 2024 08:32AM UTC coverage: 86.091% (+0.1%) from 85.979%
8277672099

push

github

web-flow
Merge pull request #213 from gturi/feature/nca-alias-command

Feature/nca alias command

221 of 316 branches covered (69.94%)

Branch coverage included in aggregate %.

598 of 661 new or added lines in 62 files covered. (90.47%)

1 existing line in 1 file now uncovered.

1116 of 1237 relevant lines covered (90.22%)

1211.08 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.38
/src/validator/positional-argument-validator.ts
1
import { PositionalArgument } from "../model/api/positional-argument";
2
import { PositionalArgumentType } from "../model/api/positional-argument-type";
162✔
3
import { DuplicatesValidator } from "./duplicates-validator";
162✔
4
import { EnumValidator } from "./enum-validator";
162✔
5
import { WhiteSpaceValidator } from "./white-space-validator";
162✔
6

7
export class PositionalArgumentValidator {
162✔
8

9
  static validate(ncaCommandName: string, positionalArguments?: PositionalArgument[]) {
10
    if (positionalArguments) {
4,349!
11
      this.checkNamesFormat(ncaCommandName, positionalArguments);
4,349✔
12
      this.checkDuplicateNames(ncaCommandName, positionalArguments);
4,349✔
13
      this.checkMultipleListPositionalArguments(ncaCommandName, positionalArguments);
4,349✔
14
      this.checkPositionalArgumentType(ncaCommandName, positionalArguments);
4,349✔
15
    }
16
  }
17

18
  private static checkNamesFormat(
19
    ncaCommandName: string, positionalArguments: PositionalArgument[]
20
  ) {
21
    const positionalArgumentNames = this.getPositionalArgumentNames(positionalArguments);
4,349✔
22
    WhiteSpaceValidator.validate(positionalArgumentNames, elementsWithWhitespaces => {
4,349✔
NEW
23
      return `${ncaCommandName}: positional argument names cannot contain whitespaces ` +
×
24
        `[${elementsWithWhitespaces}]`;
25
    });
26
  }
27

28
  private static checkDuplicateNames(
29
    ncaCommandName: string, positionalArguments: PositionalArgument[]
30
  ) {
31
    const positionalArgumentNames = this.getPositionalArgumentNames(positionalArguments);
4,349✔
32
    const getErrorMessage = (duplicates: string[]) => {
4,349✔
NEW
33
      return `${ncaCommandName}: multiple positional arguments has been defined ` +
×
34
        `with the same name: [${duplicates}]`;
35
    };
36

37
    DuplicatesValidator.validate(positionalArgumentNames, getErrorMessage);
4,349✔
38
  }
39

40
  private static checkMultipleListPositionalArguments(
41
    ncaCommandName: string, positionalArguments: PositionalArgument[]
42
  ) {
43
    const listPositionalArgumentNames = positionalArguments
4,349✔
44
      .filter(positionalArgument => PositionalArgumentType.isListType(positionalArgument.type))
6,119✔
45
      .map(positionalArgument => positionalArgument.name);
2,254✔
46

47
    if (listPositionalArgumentNames.length > 1) {
4,349!
48
      throw new Error(
×
49
        `${ncaCommandName}: only one list type positional argument is allowed, ` +
50
        `found: [${listPositionalArgumentNames}]`
51
      );
52
    }
53
  }
54

55
  private static getPositionalArgumentNames(positionalArguments: PositionalArgument[]): string[] {
56
    return positionalArguments.map(positionalArgument => positionalArgument.name);
12,238✔
57
  }
58

59
  private static checkPositionalArgumentType(
60
    ncaCommandName: string, positionalArguments: PositionalArgument[]
61
  ) {
62
    const getErrorMessage = (positionalArgument: PositionalArgument) => {
4,349✔
63
      return `Nca command '${ncaCommandName}' positionalArgument '${positionalArgument.name}' ` +
1✔
64
        `type '${positionalArgument.type}' is not valid: ` +
65
        `supported values are ${Object.keys(PositionalArgumentType)}`;
66
    }
67
    positionalArguments.forEach(positionalArgument => {
4,349✔
68
      EnumValidator.validate(
6,119✔
69
        PositionalArgumentType, positionalArgument.type, () => getErrorMessage(positionalArgument)
1✔
70
      );
71
    });
72
  }
73
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc