#!/usr/bin/env python
# -*- Python -*-

# We import test functionity from LNT.
from lnt.tests import nt
from lnt.testing import TestSamples, PASS, FAIL, XFAIL

# Test module classes are currently required to subclass 'nt.TestModule'.
class Simple(nt.TestModule):
    def execute_test(self, options):
        # The options dictionary defines the user command line parameters that
        # are supposed to apply to the test. Some important variables which are
        # guaranteed to be present are:
        # ... FIXME

        # We are expected to return a list of test samples, which will be merged
        # with all the other reports.
        #
        # There are no constraints on the test names (i.e., they do not need to
        # match the directory structure as the SingleSource or MultiSource tests
        # would), but must be unique.
        #
        # The tests should follow the current LNT test schema for reporting test
        # status (success and failure).  The current schema is that status is
        # reported as an additional test with the '.status' suffix and
        # appropriate test codes (defined by the 'lnt.testing' module, see
        # below). If no '.status' result is reported, the test is assumed to
        # have passed.
        return [
            TestSamples("nts.LNT/Examples/Simple.compile", [1.0]),
            TestSamples("nts.LNT/Examples/Simple.exec", [1.0]),
            TestSamples("nts.LNT/Examples/Simple.exec.status", [FAIL]),
        ]


# This is the only required entry point to the module.
test_class = Simple

# This is not required, but allows users with LNT in the environment (required
# for initial imports to work) to execute this test directly.
if __name__ == "__main__":
    test_class().main()
