All files / src/objects web_mime.ts

88.52% Statements 54/61
90% Branches 9/10
83.33% Functions 5/6
88.52% Lines 54/61

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 621x 1x 1x 1x 1x 1x 1x 1x 1x 1x 38x 38x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 12x 12x 12x 1x 1x               1x 1x 3x 1x 1x 2x 2x 2x 2x 2x 2x 2x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import {IFile} from "../files/_ifile";
import {AbstractObject} from "./_abstract_object";
import {IAllowedNaming} from "./_iobject";
 
export class WebMIME extends AbstractObject {
  private parsedXML: {
    description?: string,
  } | undefined;
 
  public getType(): string {
    return "W3MI";
  }
 
  public getAllowedNaming(): IAllowedNaming {
    return {
      maxLength: 40,
      allowNamespace: true,
      customRegex: new RegExp(/^[A-Z_-\d/<> ]+$/i),
    };
  }
 
  public getDescription(): string | undefined {
    this.parse();
    return this.parsedXML?.description;
  }
 
  public setDirty(): void {
    this.parsedXML = undefined;
    super.setDirty();
  }
 
  public getDataFile(): IFile | undefined {
    for (const f of this.getFiles()) {
      if (f.getFilename().includes(".data.")) {
        return f;
      }
    }
    return undefined;
  }
 
  public parse() {
    if (this.parsedXML) {
      return {updated: false, runtime: 0};
    }
 
    const start = Date.now();
    this.parsedXML = {};
    const parsed = super.parseRaw2();
 
    if (parsed === undefined
        || parsed.abapGit === undefined
        || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
      return {updated: false, runtime: 0};
    }
 
    this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].TEXT;
 
    const end = Date.now();
    return {updated: true, runtime: end - start};
  }
}