Note

tmuxp is usable but still needs your help reporting errors, bugs and usability feedback. If you encounter an error, please post on the Issue tracker.

Developing and Testing

Our tests are inside ./tmuxp/testsuite. Tests are implemented using unittest.

./run-tests.py will create a tmux server on a separate socket_name using $ tmux -L test_case.

Install the latest code from git

To begin developing, check out the code from github:

$ git clone git@github.com:tony/tmuxp.git
$ cd tmuxp

Now create a virtualenv, if you don’t know how to, you can create a virtualenv with:

$ virtualenv .env

Then activate it to your current tty / terminal session with:

$ source .env/bin/activate

Good! Now let’s run this:

$ pip install -e .

This has pip, a python package manager install the python package in the current directory. -e means --editable, which means you can adjust the code and the installed software will reflect the changes.

$ tmuxp

Test Runner

As you seen above, the tmuxp command will now be available to you, since you are in the virtual environment, your PATH environment was updated to include a special version of python inside your .env folder with its own packages.

$ ./run-tests.py

You probably didn’t see anything but tests scroll by.

If you found a problem or are trying to write a test, you can file an issue on github.

Test runner options

Note

As of v0.1.1, the old way of using --tests is now deprecated.

Testing specific TestSuites and TestCase.

$ ./run-tests.py config

will test the testsuite.config unittest.TestSuite.

$ ./run-tests.py config.ImportExportTest

tests testsuite.config.ImportExportTest unittest.TestCase.

individual tests:

$ ./run-tests.py config.ImportExportTest.test_export_json

Multiple can be separated by spaces:

$ ./run-tests.py window pane config.ImportExportTest

Visual testing

You can watch tmux testsuite build sessions visually by keeping a client open in a separate terminal.

Create two terminals:

  • Terminal 1: $ tmux -L test_case

  • Terminal 2: $ cd into the tmuxp project and into the virtualenv if you are using one, see details on installing the dev version of tmuxp above. Then:

    $ python ./run-tests.py --tests tests_workspacebuilder
    

Terminal 1 should have flickered and built the session before your eyes. tmuxp hides this building from normal users.

Run tests on save

You can re-run tests automatically on file edit.

Note

This requires and installation of watching_testrunner from pypi.

Install watching_testrunner from pypi:

$ pip install watching_testrunner

To run all tests upon editing any .py file:

$ watching_testrunner --basepath ./ --pattern="*.py" python run-tests.py

To run test where Visual testing you may:

$ watching_testrunner --basepath ./ --pattern="*.py" python run-tests.py --visual

tmuxp developer config

_images/tmuxp-dev-screenshot.png

After you Install the latest code from git, when inside the tmuxp checkout:

$ tmuxp load .

this will load the .tmuxp.yaml in the root of the project.

session_name: tmuxp
start_directory: ./ # load session relative to config location (project root).
before_script: ./bootstrap_env.py # ./ to load relative to project root.
windows:
- window_name: tmuxp
  focus: True
  layout: main-horizontal
  options:
    main-pane-height: 35
  shell_command_before:
    - '[ -d .env -a -f .env/bin/activate ] && source .env/bin/activate'
  panes:
  - focus: true
  - pane 
  - watching_testrunner --basepath ./ --pattern="*.py" 'python run-tests.py'
- window_name: docs
  layout: main-horizontal
  options:
    main-pane-height: 35
  start_directory: doc/
  shell_command_before: 
    - '[ -d ../.env -a -f ../.env/bin/activate ] && source ../.env/bin/activate'
  panes:
  - focus: true
  - pane
  - echo 'docs built to <http://0.0.0.0:8003/_build/html>'; python -m SimpleHTTPServer 8003
  - watching_testrunner --basepath ./ --pattern="*.rst" 'make html'

Travis CI

tmuxp uses travis-ci for continuous integration / automatic unit testing.

tmuxp is tested against tmux 1.8 and the latest git source. Interpretters tested are 2.6, 2.7 and 3.3. The travis build site uses this .travis.yml configuration:

language: python

python:
  - 2.6
  - 2.7
  - 3.3
env:
  - TMUX_VERSION=master
  - TMUX_VERSION=1.8
  - TMUX_VERSION=1.9a
before_install:
  - sudo apt-get update -qq
  - export PIP_USE_MIRRORS=true
  - pip install coveralls
install:
  - "pip install -e ."
before_script:
  - sudo apt-get install -qq libevent-dev libncurses-dev
  - git clone git://git.code.sf.net/p/tmux/tmux-code tmux
  - cd tmux
  - git checkout $TMUX_VERSION
  - sh autogen.sh
  - ./configure && make && sudo make install
  - cd ..
  - tmux -V
script: coverage run --source=tmuxp setup.py test
# script: python setup.py test
after_success:
  - coveralls