mri_spec/cli_spec.rb in opal-0.4.4 vs mri_spec/cli_spec.rb in opal-0.5.0
- old
+ new
@@ -1,18 +1,79 @@
require File.expand_path('../spec_helper', __FILE__)
require 'opal/cli'
require 'stringio'
describe Opal::CLI do
- let(:output) { StringIO.new }
+ let(:fake_stdout) { StringIO.new }
+ let(:file) { File.expand_path('../fixtures/opal_file.rb', __FILE__) }
+ let(:options) { nil }
+ subject(:cli) { described_class.new(options) }
context 'with a file' do
- let(:file) { File.expand_path('../fixtures/opal_file.rb', __FILE__) }
- subject(:cli) { described_class.new(file, :output => output) }
+ let(:options) { {:filename => file} }
it 'runs the file' do
- cli.run
- output.rewind
- expect(output.read).to eq("hi from opal!\n")
+ expect_output_of{ subject.run }.to eq("hi from opal!\n")
end
+ end
+
+ describe ':evals option' do
+ context 'without evals and paths' do
+ it 'raises ArgumentError' do
+ expect { subject.run }.to raise_error(ArgumentError)
+ end
+ end
+
+ context 'with one eval' do
+ let(:options) { {:evals => ['puts "hello"']} }
+
+ it 'executes the code' do
+ expect_output_of{ subject.run }.to eq("hello\n")
+ end
+ end
+
+ context 'with many evals' do
+ let(:options) { {:evals => ['puts "hello"', 'puts "ciao"']} }
+
+ it 'executes the code' do
+ expect_output_of{ subject.run }.to eq("hello\nciao\n")
+ end
+ end
+ end
+
+ describe ':requires options' do
+ context 'with an absolute path' do
+ let(:options) { {:requires => [file], :evals => ['']} }
+ it 'requires the file' do
+ expect_output_of{ subject.run }.to eq("hi from opal!\n")
+ end
+ end
+
+ context 'with a path relative to a load path' do
+ let(:dir) { File.dirname(file) }
+ let(:filename) { File.basename(file) }
+ let(:options) { {:load_paths => [dir], :requires => [filename], :evals => ['']} }
+ it 'requires the file' do
+ expect_output_of{ subject.run }.to eq("hi from opal!\n")
+ end
+ end
+ end
+
+ describe ':load_paths options' do
+ let(:dir) { File.dirname(file) }
+ let(:filename) { File.basename(file) }
+ let(:options) { {:load_paths => [dir], :requires => [filename], :evals => ['']} }
+ it 'requires files' do
+ expect_output_of{ subject.run }.to eq("hi from opal!\n")
+ end
+ end
+
+ def expect_output_of
+ stdout = described_class.stdout
+ described_class.stdout = fake_stdout
+ yield
+ @output = fake_stdout.tap(&:rewind).read
+ expect(@output)
+ ensure
+ described_class.stdout = stdout
end
end