diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..07e8e4a2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +/dockerfiles/ diff --git a/.travis.yml b/.travis.yml index 18547fec..1aa4598e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,24 @@ ---- -dist: xenial -language: ruby -cache: bundler -rvm: - - 2.6 -env: - - PYENV_VERSION=3.7 PYTHON=python -before_install: - - pip install --user matplotlib +notifications: + webhooks: + - https://webhook.commit-email.info/ + +services: + - docker + +matrix: + include: + - name: Ruby 2.6 + env: TYPE=ruby-2.6 + +install: + - docker build + -t red-data-tools/charty-${TYPE} + -f dockerfiles/Dockerfile.${TYPE} + . + +script: + - docker run + --interactive + --tty + red-data-tools/charty-${TYPE} + bundle exec rake diff --git a/charty.gemspec b/charty.gemspec index 7333de46..d7613690 100644 --- a/charty.gemspec +++ b/charty.gemspec @@ -26,14 +26,15 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] + spec.add_development_dependency "activerecord" spec.add_development_dependency "bundler", ">= 1.16" - spec.add_development_dependency "rake" - spec.add_development_dependency "test-unit" - spec.add_development_dependency "numo-narray" + spec.add_development_dependency "daru" + spec.add_development_dependency "matplotlib" spec.add_development_dependency "nmatrix" + spec.add_development_dependency "numo-narray" + spec.add_development_dependency "rake" spec.add_development_dependency "red-datasets", ">= 0.0.9" - spec.add_development_dependency "daru" - spec.add_development_dependency "activerecord" + spec.add_development_dependency "red-opencv" spec.add_development_dependency "sqlite3" - spec.add_development_dependency "matplotlib" + spec.add_development_dependency "test-unit" end diff --git a/dockerfiles/Dockerfile.ruby-2.6 b/dockerfiles/Dockerfile.ruby-2.6 new file mode 100644 index 00000000..9e1eeab1 --- /dev/null +++ b/dockerfiles/Dockerfile.ruby-2.6 @@ -0,0 +1,41 @@ +FROM ruby:2.6 + +RUN \ + apt update && \ + apt install -y \ + apt-transport-https \ + wget && \ + wget -O /usr/share/keyrings/red-data-tools-keyring.gpg \ + https://packages.red-data-tools.org/debian/red-data-tools-keyring.gpg && \ + echo "deb [signed-by=/usr/share/keyrings/red-data-tools-keyring.gpg] https://packages.red-data-tools.org/debian/ buster main" > \ + /etc/apt/sources.list.d/red-data-tools.list && \ + apt update && \ + apt install -y \ + python3-pip \ + sudo \ + xvfb && \ + gem install \ + bundler \ + rake && \ + pip3 install \ + matplotlib + +RUN \ + useradd --user-group --create-home charty + +RUN \ + echo "charty ALL=(ALL:ALL) NOPASSWD:ALL" | \ + EDITOR=tee visudo -f /etc/sudoers.d/charty + +COPY . /home/charty/charty +RUN chown -R charty:charty /home/charty/charty + +USER charty +WORKDIR /home/charty/charty + +RUN bundle install + +CMD \ + dbus-run-session \ + xvfb-run --server-args "-screen 0 640x480x24" \ + bundle exec rake diff --git a/test/backends/pyplot/curve_integer.png b/test/backends/pyplot/curve_integer.png new file mode 100644 index 00000000..48a9baff Binary files /dev/null and b/test/backends/pyplot/curve_integer.png differ diff --git a/test/backends/pyplot/curve_test.rb b/test/backends/pyplot/curve_test.rb new file mode 100644 index 00000000..5d40fc14 --- /dev/null +++ b/test/backends/pyplot/curve_test.rb @@ -0,0 +1,23 @@ +require_relative "../../test_helper" + +class BackendsPyplotCurveTest < Test::Unit::TestCase + include Helper::Image + + def setup + @plotter = Charty::Plotter.new(:pyplot) + end + + def expected_image_path(*components) + File.join(__dir__, *components) + end + + test("Integer") do + curve = @plotter.curve do + series [0, 1, 2, 3, 4], [10, 40, 20, 90, 70], label: "sample1" + end + output = Tempfile.new(["curve", ".png"]) + curve.save(output.path) + assert_image(expected_image_path("curve_integer.png"), + output.path) + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index bd9de9e6..63020348 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,3 +1,24 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) require 'charty' require 'test/unit' +require 'tempfile' +begin + require 'cv' +rescue LoadError +end + + +module Helper + module Image + def assert_image(expected_path, actual_path) + unless defined?(::CV) + omit("red-opencv is required for #{__method__}") + end + expected = CV::Image.read(expected_path) + actual = CV::Image.read(actual_path) + # TODO: Make this loose + assert_equal(expected.bytes.to_s, + actual.bytes.to_s) + end + end +end