All files / src/objects program.ts

97.84% Statements 91/93
78.12% Branches 25/32
100% Functions 9/9
97.84% Lines 91/93

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 941x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 39872x 39872x 1x 1x 4220x 4220x     4220x 4220x 1x 1x 1x 1x 1x 1x 1x 198x 198x 198x 198x 198x 1x 1x 8149x 8149x 8149x 1x 1x 4439x 4439x 4439x 1x 1x 196x 196x 196x 1x 1x 2x 2x 2x 1x 1x 1x 1x 4638x 1926x 1926x 2712x 2712x 2712x 4638x 2681x 2681x 2681x 2681x 2681x 2681x 2681x 2681x 31x 31x 4638x 53x 15x 15x 53x 31x 31x 31x 31x 4638x 4638x 4638x 4638x 4638x 4638x 1x  
import {ABAPObject} from "./_abap_object";
import {ABAPFile} from "../abap/abap_file";
import {DynproList, parseDynpros} from "./_dynpros";
import {xmlToArray, unescape} from "../xml_utils";
 
export class Program extends ABAPObject {
  private parsedXML: {
    isInclude: boolean,
    isModulePool: boolean,
    description: string | undefined,
    dynpros: DynproList,
  } | undefined;
 
  public getType(): string {
    return "PROG";
  }
 
  public getSequencedFiles(): readonly ABAPFile[] {
    const main = this.getMainABAPFile();
    if (main === undefined) {
      return [];
    }
    return [main];
  }
 
  public getDescription(): string | undefined {
    this.parseXML();
    return this.parsedXML?.description;
  }
 
  public getAllowedNaming() {
    return {
      maxLength: 40,
      allowNamespace: true,
    };
  }
 
  public setDirty(): void {
    this.parsedXML = undefined;
    super.setDirty();
  }
 
  public isInclude(): boolean {
    this.parseXML();
    return this.parsedXML!.isInclude;
  }
 
  public isModulePool(): boolean {
    this.parseXML();
    return this.parsedXML!.isModulePool;
  }
 
  public getDynpros(): DynproList {
    this.parseXML();
    return this.parsedXML!.dynpros || [];
  }
 
////////////////////////////
 
  private parseXML() {
    if (this.parsedXML !== undefined) {
      return;
    }
 
    const file = this.getXMLFile();
    const parsed = this.parseRaw2();
    if (parsed === undefined) {
      this.parsedXML = {
        isInclude: false,
        isModulePool: false,
        description: undefined,
        dynpros: [],
      };
      return;
    }
 
    let description = "";
    for (const t of xmlToArray(parsed.abapGit?.["asx:abap"]["asx:values"]?.TPOOL?.item)) {
      if (t?.ID === "R") {
        description = t.ENTRY ? unescape(t.ENTRY) : "";
      }
    }
 
    const dynpros = parseDynpros(parsed);
 
    this.parsedXML = {
      isInclude: file ? file.getRaw().includes("<SUBC>I</SUBC>") : false,
      isModulePool: file ? file.getRaw().includes("<SUBC>M</SUBC>") : false,
      dynpros: dynpros,
      description: description,
    };
  }
}