Inhaltsverzeichnis

Zugriff auf Exit-Status der Programmausführung von anderen Skripten aus

Wenn ein User ein Programm oder einen Test in der Embedded Online-IDE startet, kann der Status der Programmausführung/Testdurchführung nach Beendigung an andere Javascript-Programme weitergegeben werden.

A. Setzen von 'enableRunExitStatusAccess': true

Um der IDE mitzuteilen, dass die Weitergabe des Exitstatus erwünscht ist, muss das Attribut enableRunExitStatusAccess gesetzt werden:

<div class="java-online" style="width: calc(100% - 10px); height: 500px; margin-left: 5px" data-java-online="{
    'id': 'abcd',
    'enableRunExitStatusAccess': true
}">
    <script type="text/plain" title="Program.java" data-type="java">
       for(int i = 0; i < 10; i++){
          println(i);
       }
       System.exit(0);            
    </script>
</div>

B. Registrieren des Exitstatus-Listeners

Bemerkung: Wenn man window.online_ide_onReady eine Funktion zuweist, wird sie ausgeführt, nachdem die Online-IDE fertig initialisiert ist und insbesondere auch window.online_ide_access definiert ist.

window.online_ide_onReady = () => {
    let ide = window.online_ide_access.getIDE('abcd');
    ide.registerOnRunExitListener((exitStatus)=>{console.log(exitStatus);});
}

C. exitStatus-Objekt

Hier der Aufbau des exitStatus-Objekts:

export type ExitStatus = {
    exitCode: number;             // if program exited via System.exit(int code)
    output: string;                    // program output generated via print() and println()
    exception?: IThrowable;
    testProgress?: TestProgress;   
}

testProgress ist ein Baum mit allen Testergebnissen:

type TestProgress = {
    overall: number,
    passed: number,
    failed: number,
    classIdentifier: string,
    methodIdentifier: string,
    children: TestProgress[]
}

Komplettes Beispiel

<div class="java-online" style="width: calc(100% - 10px); height: 500px; margin-left: 5px" data-java-online="{
    'id': 'abcd',
    'speed': 'max',
    'withFileList': true,
    'hideEditor': false,
    'hideStartPanel': false,
    'libraries': [''],
    'spritesheetURL': '/assets/test-spritesheets/Campfire.zip',
    'settings': {
        'compiler.shadowedSymbolErrorLevel': 'error'
    },
    'withClassDiagram': true,
    'enableRunExitStatusAccess': true
 
}">
    <script type="text/plain" title="Program.java" data-type="java">
        for(int i = 0; i < 10; i++){
            println(i);
        }
        System.exit(0);            
    </script>
    <script type="text/plain" title="Test.java" data-type="java" data-online-ide="{'readOnly': true}">
        @Test
class MyFirstTestClass {
 
@Test
void testSquareRoot() {
    double squareRootOfFour = Math.sqrt(4);
    assertEquals(2.0, squareRootOfFour,
        "There seems to be something wrong with Math.sqrt!");
}
 
@Test
void testDivision() {
    double n = 5 / 2 * 3;
    println(n);
    assertEquals(7.5, n,
        "5/2 * 3 doesn't yield 7.5 -> mysterious...");
}
}
    </script>
</div>