# BIMTester

BIMTester lets you specify a set of exchange requirements, and automatically check whether or not BIM data, typically an
IFC file, complies with the requirements. You can run it automatically from a server, integrate it to your own
application, or use a GUI. It can generate reports in various formats including:

 * HTML
 * JSON
 * XUnit
 * BCF
 * Zoom Smart View

Your exchange requirements are written in plain language which you can use to communicate to project teams and include
in contracts. Multiple languages are supported. A series of exchange requirement templates are provided to get started,
but you can, and are encouraged to, write your own tailored to your project. An example of a requirement looks like
this:

```
Feature: Project setup

In order to view the BIM data
As any interested stakeholder
We need an IFC file

Scenario: Receiving a file
 * IFC data must use the IFC4 schema
```

Languages supported include (in alphabetical order):

 * Dutch
 * English
 * French
 * German
 * Italian

If you are not a developer, we highly recommend simply installing an integrated version of BIMTester.

 * If you use Blender, install the [BlenderBIM Add-on](https://blenderbim.org)
 * If you use FreeCAD, install the [FreeCAD BIMTester Workbench](https://github.com/bimtester/bimtesterfc)

If you are a developer, read on!

## Installation

The following packages are required for BIMTester to function:

 * behave
 * pystache
 * ifcopenshell
 * PySide2 (optional: needed for GUI)

The repository does not contain translation files. You can generate them as shown.

```
cd IfcOpenShell/src/ifcbimtester/bimtester/locale
pybabel compile -d .
```

## CLI Usage

BIMTester has a command line application. Check it out:

```
$ python cli.py -h
usage: cli.py [-h] [-a ACTION] [--advanced-arguments ADVANCED_ARGUMENTS] [-c]
              -f FEATURE -i IFC [-p PATH] [-r REPORT] [--lang LANG]

Runs unit tests for BIM data

optional arguments:
  -h, --help            show this help message and exit
  -a ACTION, --action ACTION
                        Action to perform, from run/purge
  --advanced-arguments ADVANCED_ARGUMENTS
                        Specify arguments to Behave
  -c, --console         Show results in the console
  -f FEATURE, --feature FEATURE
                        Specify a feature file to test
  -i IFC, --ifc IFC     Specify a ifc file
  -p PATH, --path PATH  Define a path for use in tests
  -r REPORT, --report REPORT
                        Specify an output file for a HTML report
  --lang LANG           Specify a language
```

You can turn it into a regular command by symlinking it to your bin folder.

```
$ ln -s /path/to/IfcOpenShell/src/ifcbimtester/cli.py /usr/local/bin/bimtester
$ bimtester -h
```

To run a test, we need an IFC to check and a feature file filled with requirements. The feature file is plaintext. Feel
free to copy the minimal example above.

```
# To see output in the console
$ bimtester -i test.ifc -f test.feature -c
# Or, if you want to generate a HTML report
$ bimtester -i test.ifc -f test.feature -r report.html
```

```
python ./gui.py
```

## Create a binary out of the Python package

TODO: Check if this works

Unix:

```
$ pyinstaller --onefile --clean --icon=icon.ico --add-data "features:features" bimtester.py
```

Windows:

```
$ pyinstaller --onefile --clean --icon=icon.ico --add-data "features;features" bimtester.py
```
