Virtual Programming Lab

Activities ::: mod_vpl
Maintained by Juan Carlos Rodríguez-del-Pino
VPL is an activity module to manage programming assignments

Virtual Programming Lab 4.3.2

Moodle 4.1, 4.2, 4.3, 4.4, 4.5, 5.0
Released: mandag den 14. juli 2025, 19:05

VPL (Virtual Programming Lab) 4.3.2 – Release Notes

VPL CI

Overview

VPL 4.3 introduces significant enhancements, fixes, and new features, with a focus on improved usability, extensibility, and compatibility with Moodle 5. VPL 4.3.2 resolves issues introduced by new features in the previous version and modifies many code files, mainly by adding and correcting PHP documentation to fulfill the style requirements of Moodle's code checks.

Special thank to Astor Bizard for significant contributions to this version.

Highlights & Enhancements

Capabilities and Permissions

  • New Capability: mod/vpl:editothersgrades — allows users with appropriate roles to delete grades assigned by other teachers.

Submissions List Report (Rebuilt and Optimized)

  • Implements standard user selection via initials.
  • Supports downloading of filtered report data.
  • Adds pagination for improved performance.
  • Optimizes multi-user evaluation for increased efficiency and robustness.

New Activity Submission Summary

A new summary panel improves submission tracking:

  • Displays students/groups allowed to submit.
  • Shows submission and grading status counts.
  • Offers quick access to relevant submissions.
  • Available in both the activity description and submissions list.

Editor and Language Support

  • Added editor support for:

    • OCaml
    • LaTeX
    • Makefile
    • reStructuredText
  • Improved hard tab handling for languages like Go and Makefile.

New Language and Tool Support

  • Added run script support for:

    • C# (via Mono)
    • COBOL
  • Integrated with Python Tutor, enabling visual step-by-step code execution for:

    • Python
    • C
    • C++
    • Java

Improved Plain Web Submissions (Contributed by Astor Bizard)

  • Added support for ZIP archive submissions.
  • Enabled more flexible submission formats.
  • Improved error recovery — no need to restart submission when files are incorrect.

Advanced Grading Improvements (Contributed by Astor Bizard)

  • Support for advanced grading methods.
  • Enhanced grading form:

    • Import feedback from previous attempts.
    • Contextual help buttons for easier grading.

Enhanced Usability for “Based On” Feature (Contributed by Astor Bizard)

  • Teachers can now view concatenated execution scripts, showing how the “based on” feature modifies execution files.
  • Clarifies which run/debug scripts are inherited or overridden from base activities.
  • Clarifies inherited vs. overridden resource limits.

Course Reset Enhancements

  • Time Shifting: Automatically adjust start/due dates across all VPL activities.
  • Granular Reset: Selectively reset user/group overrides.
  • Optimized Database Access
  • Calendar Sync: Ensures VPL calendar events reflect updated time settings.

Activity Analytics

  • Now tracks per-user activity:

    • Save
    • Run
    • Debug (Note: Not yet included in standard reports)

Evaluator Subplugin Framework

  • Introduced a new subplugin architecture for evaluator extensions.
  • First Implementation: GIOTES — an enhanced I/O testing engine (evolution of BIOTES). See below for a short manual of GIOTES.

Run Mode Selection

VPL now supports configurable run modes:

  • Text Mode (ANSI terminal)
  • GUI Mode (Linux VNC)
  • Web App Mode (reverse proxy)
  • Text-in-GUI Mode (terminal emulation inside GUI)

Selection Methods:

  • Set globally per activity
  • Allow dynamic selection via annotations in source code (within first 1,000 characters):

    • @vpl_run_text_mode
    • @vpl_run_gui_mode
    • @vpl_run_webapp_mode
    • @vpl_run_textingui_mode

GUI Evaluation Enhancements

  • Supports evaluation of graphical programs using text-based inputs in GUI mode.

Fixes

  • Fixed issue with downloading submission reports for team-based activities.
  • Corrected memory size display from “3. GiB” to accurate “3.50 GiB”.
  • Reverted unintended change in 4.2.4 requiring course enrollment for web service capability checks.
  • Fixed and improved usage of language strings in scripts.
  • Corrected locale detection for available languages on Linux systems.
  • Fixed bug in the Prolog script when detecting swipl version.
  • Fixed entity detection in VHPL script when using GHDL.
  • Resolved MathJax rendering issues in activity descriptions within the editor.
  • Improved compatibility between VNC mode and Safe Exam Browser (SEB), including pointer event support.
  • Enhanced performance and clarity of regex used in evaluation result parsing (contributed by Astor Bizard).
  • Fixed a bug introduced in 4.3.0 that added unnecessary execution scripts to run or debug actions.
  • Fixed a bug introduced in 4.3.0 that prevented syntax highlighting outside the editor.
  • Fixed a syntax error in the PHP run script introduced in 4.3.0.
  • Fixed an issue where the "Run All languages" process must ignore new run modes feature.
  • Improved the run script for the R language.

Compatibility

This version of VPL is compatible with the following:

  • Moodle: Versions 4.1 to 5.0
  • PHP: Versions 7.4 to 8.3

Note: The VPL release number is independent of the Moodle release number, unlike other modules.

Upgrading from a Previous Version

It is recommended to update to the latest version to benefit from recent security and bug fixes. Additionally, updating VPL Jail Servers is strongly advised.

Steps to upgrade to VPL 4.3.2:

  1. Ensure your Moodle instance is updated to a supported version.
  2. Proceed with the VPL plugin upgrade after updating Moodle. Upgrades from VPL version 2.4 onwards are supported.

GIOTES Summary Manual

Overview

GIOTES (General Input/Output Test and Evaluation System) is an enhanced evaluator plugin for VPL (Virtual Programming Lab), designed to supersede the default evaluator BIOTES.

Key features:

  • Open customization of evaluation reports
  • Support for default option values
  • Time limits per test case
  • More informative and flexible result messages

Configuration File: vpl_evaluate.cases

Test cases are defined in the vpl_evaluate.cases file using a simple configuration syntax:

  • Each line is either an option setting, a comment, or part of a multiline value.
  • Comments begin with #.
  • Option names are case-insensitive and can contain spaces.
  • Values may be single-line or multiline.
  • Multiline values end when:

    • Another valid option starts, or
    • A custom multiline end marker is used (see Multiline end option).

General File Structure

  • Global defaults: Any option defined before the first Case applies to all test cases unless overridden locally.
  • Local options: Options defined within a test case only apply to that specific case.

Available Options

🧪 Test Case Definition

  • Case: Starts a new test case definition. The name appears in reports.

    Case = Test Case 1
    

⌨️ Input/Output Configuration

  • Input: Text passed to the program’s stdin. (Multiline option)

    Input =
    33
    
  • Output: Expected output to pass the test. Supports:

    • Multiple valid outputs per case
    • Text, number, exact text, or regular expressions (Multiline option) See BIOTES documentation for output types.
    Output = 1 2
    Output = 2 1
    

💻 Program Execution Settings

  • Expected exit code: Integer. Positive value indicate that tests pass if match, negative values indicate that require also program output match.

    Expected exit code = -13
    
  • Time limit: Execution time limit in seconds. If exceeded, the test fails.

    Time limit = 1.5
    
  • Program to run: Path to an alternate program to run instead of the student’s.

    Program to run = /bin/checkstyle
    
  • Program arguments: Command-line arguments for the program.

    Program arguments = data.txt
    

🎯 Conditional Execution

  • Variation: Specifies a variation code. The case is only considered if it matches.

    Variation = v10
    

🎓 Grading

  • Grade reduction: Penalty applied if the test fails. Supports absolute values or percentages.

    Grade reduction = 25%
    

💬 Messages and Feedback

Failure Messages

  • Fail message / Fail output message: Message shown when output does not match. (Multiline option)
  • Fail exit code message: Message shown when exit code mismatch occurs. (Overrides fail output message)
  • Timeout message: Message when time limit is exceeded. (Multiline option)

Success Messages

  • Pass message: Message shown when the test passes. (Multiline option) If not set, no success message is displayed.

Final Summary

  • Final report message: Message shown at the end of all tests. (Multiline option) Example:

    Final report message = -Final Report
    ✅ Tests passed: <<<num_tests_passed>>>
    ❌ Tests failed: <<<num_tests_failed>>>
    👉 The number of passed and failed tests is not a grade indicator.
    👉 There may be errors even if all tests have passed 🧪.
    The exercise will be evaluated by a teacher 👨.
    

📄 Case Display Formatting

  • Case title format: Customizes how each test case title is displayed.

    Case title format = Case <<<case_id>>>/<<<num_tests>>>: <<<case_title>>> <<<test_result_mark>>>
    
  • Fail mark, Pass mark, Error mark, Timeout mark: Custom symbols or text for status display.

    Fail mark = [❌ wrong result]
    Pass mark = [✅ test passed]
    Error mark = [🛑 unexpected error]
    Timeout mark = [⏰ time limit exceeded]
    

📌 Multiline Control

  • Multiline end: Specifies a marker string to explicitly end the next multiline option.

    Multiline end = END_OF_TEXT
    Output =
    This is
    a test case
    END_OF_TEXT
    

Placeholders

All messages and formatting can include dynamic placeholders in the format <<<name>>>:

Placeholder Description
<<<case_id>>> Index of the test case (starts at 1)
<<<case_title>>> Case name from Case option
<<<test_result_mark>>> Status symbol from result mark options
<<<fail_mark>>>, <<<pass_mark>>>, <<<error_mark>>>, <<<timeout_mark>>> Respective marks
<<<input>>>, <<<input_inline>>> Test input (multiline or inline)
<<<check_type>>> Output check type
<<<expected_output>>>, <<<expected_output_inline>>> Expected output
<<<program_output>>>, <<<program_output_inline>>> Actual program output
<<<expected_exit_code>>> Expected exit code
<<<exit_code>>> Actual exit code
<<<time_limit>>> Test time limit
<<<num_tests>>>, <<<num_tests_run>>> Total and executed test count
<<<num_tests_failed>>>, <<<num_tests_passed>>>, <<<num_tests_timeout>>>, <<<num_tests_error>>> Test result statistics
<<<grade_reduction>>> Grade penalty for the case

Tips

  • Use Multiline end when expected outputs or messages contain strings that resemble other options.
  • Use placeholders in messages to create dynamic, informative feedback.
  • Use the test of tests feature in the "Execution files" to ensure your configuration behaves as intended.

Version information

Version build number
2025071410
Version release name
4.3.2
Maturity
Stabil version
MD5 Sum
32a2b85b6e90c52e3e7a41f48d5d545c
Supported software
PHP 7.4, PHP 8.0, PHP 8.1, Moodle 4.1, Moodle 4.2, PHP 8.2, Moodle 4.3, PHP 8.3, Moodle 4.4, Moodle 4.5, Moodle 5.0
  • Latest release for Moodle 4.1
  • Latest release for Moodle 4.2
  • Latest release for Moodle 4.3
  • Latest release for Moodle 4.4
  • Latest release for Moodle 4.5
  • Latest release for Moodle 5.0

Version control information

Version control system (VCS)
GIT
VCS repository URL
VCS tag
V4.3.2

Default installation instructions for plugins of the type Activities

  1. Make sure you have all the required versions.
  2. Download and unpack the module.
  3. Place the folder (eg "assignment") in the "mod" subdirectory.
  4. Visit http://yoursite.com/admin to finish the installation