Skip to main content

CSV extension for the Hypothesis framework

Project description

==============
hypothesis-csv
==============


:code:`hypothesis-csv` is an extension to the `hypothesis` framework. The goal of this framework is to offer a flexible tool
to perform generative-testing/property-based testing for software that accepts CSV files as an input.



Description
===========

`hypothesis-csv` is designed with two main use cases in mind:

* test software that accepts a wide spectrum of CSV formats and doesn't make assumptions on the content (i.e. CSV parsers)
* test software that accepts very specific CSV formats and makes assumption on the content, types and header fields.

It provides two strategies, :code:`data_rows` and :code:`csv`, to pursue this goal, both contained in the `strategies` module.
Please refer to their documentation and the examples for more details.

Examples
========

Generate arbitrary, non-empty CSV
---------------------------------

.. code-block:: python
:name: Generate arbitrary, non-empty CSV

from hypothesis_csv.strategies import csv
@given(csv=csv())
def test_my_csv_parse(csv):
parsed_csv=my_csv_parser(csv)
assert ...

Generate CSV of a given size (5 columns x 20 rows)
--------------------------------------------------

.. code-block:: python
:name: Generate CSV of a given size (5 columns x 20 rows)

from hypothesis_csv.strategies import csv
@given(csv=csv(lines=20,header=5))
def test_my_csv_parse(csv):
parsed_csv=my_csv_parser(csv)
assert parsed_csv.num_columns == 5
assert parsed_csv.num_rows == 20



Generate CSV with a header
--------------------------
.. code-block:: python
:name: Generate CSV with a header

from hypothesis_csv.strategies import csv
@given(csv=csv(header=["timestamp","val_1","val_2"]))
def test_my_csv_parse(csv):
parsed_csv=my_csv_parser(csv)
assert parsed_csv.num_columns == 3


Generate CSV with columns of a given type
-----------------------------------------

.. code-block:: python
:name: Generate CSV with columns of a given type

from hypothesis_csv.strategies import csv
@given(csv=csv(columns=[text(),int(),float()]))
def test_my_csv_parse(csv):
parsed_csv=my_csv_parser(csv)
assert parsed_csv.num_columns == 3


Generate CSV with a given dialect
---------------------------------

.. code-block:: python
:name: Generate CSV in a given dialect

from hypothesis_csv.strategies import csv
@given(csv=csv(columns=[text(),int(),float()], dialect="excel-tab"))
def test_my_csv_parse(csv):
...

Generate CSV with drawns dialects
---------------------------------

.. code-block:: python
:name: Generate CSV in a given dialect

from hypothesis_csv.strategies import csv
@given(csv=csv(columns=[text(),int(),float()], dialect=None))
def test_my_csv_parse(csv):
...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
hypothesis-csv-0.3.3.tar.gz (17.1 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page