Skip to main content

minishell test Build Status PyPI - Python Version Documentation

Test for the minishell project of school 42.

preview

Installation

pip

$ pip3 install minishell-test

Manual

$ git clone https://github.com/cacharle/minishell_test
$ cd minishell_test
$ pip3 install -e .

Usage

$ minishell_test             # In your project directory
$ python3 -m minishell_test  # If you don't have ~/.brew/bin or ~/.local/bin in your PATH

$ minishell_test --help
usage: minishell_test [-h] [-p PATH] [-l] [-t COMMAND] [-k] [-r BEGIN END]
                      [--show-range] [-x] [-v] [-b] [-n] [-m] [-g]
                      [suite [suite ...]]

Test for the minishell project of school 42.

positional arguments:
  suite                 Test suites/group to run.
                        It tries to be smart and autocomplete the suite name
                        (e.g ./run int -> ./run preprocess/interpolation)

optional arguments:
  -h, --help            show this help message and exit
  -p PATH, --path PATH  Path to minishell directory
  -l, --list            Print available test suites
  -t COMMAND, --try-cmd COMMAND
                        Run a custom command like this test would
                        (the only environment variable passed to your executable are TERM and PATH)
  -k, --check-leaks     Run valgrind on tests (disable usual comparison with bash)
  -r BEGIN END, --range BEGIN END
                        Range of test index to run (imply --show-index)
  --show-range          Show test index (useful with --range)
  -x, --exit-first      Exit on first fail
  -v, --verbose         Increase verbosity level (e.g -vv == 2)
  -b, --bonus           Enable bonus tests
  -n, --no-bonus        Disable bonus tests
  -m, --make            Make minishell and exit
  -g, --pager           After running the test, display the result in a pager of your choice

Made by cacharle - https://cacharle.xyz

Test compatibility

Your executable must support the -c option which allow to pass command as string.

$ bash -c 'echo bonjour je suis'
bonjour je suis
$ ./minishell -c 'echo bonjour je suis'
bonjour je suis

$ bash -c 'ls'
README.md test.sh
$ ./minishell -c 'ls'
README.md test.sh

With this setup argv[2] is what you would usually get in line from get_next_line. This allows you to set the prompt to whatever you want.

Environement variables

My test only gives the PATH and TERM environment variables to your minishell. Please check that your project still work with those settings before messaging me on Slack or creating an issue. You can test this quickly with the -t option (e.g minishell_test -t 'echo bonjour).

Bonus

  • Force the bonus tests with $ minishell_test -b
  • Change the BONUS variable in config.py to True
  • Set the environment variable MINISHELL_TEST_BONUS to yes (e.g echo 'export MINISHELL_TEST_BONUS=yes' >> ~/.zshrc)

Memory leaks

$ minishell_test -k, checkout the --show-range, --range and -x options to help to select the tests to run since valgrind is really slow.

Don't check error messages

If you don't want to copy bash syntax error message, you can set the environment variable MINISHELL_TEST_DONT_CHECK_ERROR_MESSAGE to yes. It will still test your exit status code but will discard any output on error tests.

Linux

The tester will try to convert to output/status code of bash on Linux to the one on Mac.


Add new tests

You can find the suites in the minishell_test/suites directory.

Add individual test

In your suite function you can use the test function. With the following arguments:

  1. Command to be tested (output and status will be compared to bash)
  2. A command to setup the sandbox directory where the tested command will be run
  3. List of files to watch (the content of each file will be compared)
test("echo bonjour je suis")                                  # simple command
test("cat < somefile", setup="echo file content > somefile")  # setup
test("ls > somefile", setup="", files=["somefile"])           # watch a file
test("echo $A", exports={"A": "a"})                           # export variables
                                                              # in the environment
test("echo bonjour", hook=lambda s: s.replace("o", "a"))      # pass the shell output
                                                              # through a hook function

test("cat < somefile > otherfile",
     setup="echo file content > somefile",
     files=["otherfile"])

Add Suite

A test suite is a group of related tests.

@suite()  # @suite(bonus=True) if it's a bonus suite
def suite_yoursuitename(test):
    """ a description of the suite """
    test(...)
    test(...)
    test(...)

Wildcard (or glob)

There is a commented glob suite in minishell_test/suites/preprocess.py. Good luck handling *'.*'.

Metadata

Release files for minishell-test 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for minishell-test 1.1.0
File Size Uploaded
minishell_test-1.1.0.tar.gz 35.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for minishell-test 1.1.0
File Interpreter ABI Platform
minishell_test-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 75.4 kB

Release files / minishell_test-1.1.0.tar.gz

Download URL minishell_test-1.1.0.tar.gz
Size 35.5 kB
Tags Source
SHA-256 checksum
How to use checksums
221f9d345f407cf68ae9569c544050dd79ac75ae45122099da7830fe0d267718
BLAKE2b-256 checksum
How to use checksums
1f85602d265a834cf8e0810e764694203f5233d6ee98d8b4c766ae8e3c8d034f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2

Release files / minishell_test-1.1.0-py3-none-any.whl

Download URL minishell_test-1.1.0-py3-none-any.whl
Size 39.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
31345adcd8d78fa2d35a16878bf22f8c7efc2f6898dd6d7d69e9030811fdcd5f
BLAKE2b-256 checksum
How to use checksums
1f11e3105f8c1650e2bf28806dd6dd5ec6bdc11103fde65a2c85ed9d3e455b9a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2

Release history Release notifications | RSS feed

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

This release

1.1.0 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page