test/lib/vedeu/renderers/json_test.rb in vedeu-0.8.2 vs test/lib/vedeu/renderers/json_test.rb in vedeu-0.8.3
- old
+ new
@@ -8,21 +8,76 @@
describe JSON do
let(:described) { Vedeu::Renderers::JSON }
let(:instance) { described.new(options) }
- let(:options) { {} }
- let(:output) { Vedeu::Models::Page.new }
- let(:_name) { 'Vedeu::Renderers::JSON' }
+ let(:options) {
+ {
+ compression: compression,
+ end_tag: end_tag,
+ end_row_tag: end_row_tag,
+ filename: filename,
+ output: output,
+ start_tag: start_tag,
+ start_row_tag: start_row_tag,
+ template: template,
+ timestamp: timestamp,
+ write_file: write_file,
+ }
+ }
+ let(:compression) { false }
+ let(:end_tag) { '</td>' }
+ let(:end_row_tag) { '</tr>' }
+ let(:filename) { 'vedeu_renderers_json' }
+ let(:start_tag) { '<td' }
+ let(:start_row_tag) { '<tr>' }
+ let(:template) {
+ ::File.dirname(__FILE__) + '/../../../support/templates/' \
+ 'html_renderer.vedeu'
+ }
+ let(:timestamp) { false }
+ let(:write_file) { false }
+ let(:output) {
+ Vedeu::Models::Page.coerce([
+ Vedeu::Cells::Char.new(output_attributes)
+ ])
+ }
+ let(:output_attributes) {
+ {
+ colour: {
+ background: '#ff0000',
+ foreground: '#ffffff',
+ },
+ name: 'Vedeu::Renderers::JSON',
+ position: [2, 9],
+ value: 'a',
+ }
+ }
+ let(:output_as_hash) {
+ [
+ {
+ name: 'Vedeu::Renderers::JSON',
+ style: '',
+ type: 'char',
+ value: 'a',
+ colour: {
+ background: '#ff0000',
+ foreground: '#ffffff',
+ },
+ position: {
+ y: 2,
+ x: 9,
+ },
+ }, {
+ type: :escape,
+ value: "\e[0m",
+ }
+ ]
+ }
+ let(:output_as_json) { ::JSON.pretty_generate(output_as_hash) }
- before do
- Vedeu.config.stubs(:compression?).returns(false)
- ::File.stubs(:write)
- Vedeu.stubs(:height).returns(1)
- Vedeu.stubs(:width).returns(1)
- Vedeu::Buffers::Terminal.reset!
- end
+ before { ::File.stubs(:write) }
describe '#initialize' do
it { instance.must_be_instance_of(described) }
it { instance.instance_variable_get('@options').must_equal(options) }
end
@@ -32,56 +87,24 @@
it { subject.must_be_instance_of(String) }
it { subject.must_equal("{\n}") }
end
- describe '#render' do
- let(:output) {
- Vedeu::Models::Page.coerce([
- Vedeu::Views::Char.new(value: 'a',
- name: _name,
- colour: {
- background: '#ff0000',
- foreground: '#ffffff' }),
- ])
- }
- let(:expected) {
- "[\n" \
- " {\n" \
- " \"border\": \"\",\n" \
- " \"colour\": {\n" \
- " \"background\": \"\\u001b[48;2;255;0;0m\",\n" \
- " \"foreground\": \"\\u001b[38;2;255;255;255m\"\n" \
- " },\n" \
- " \"name\": \"Vedeu::Renderers::JSON\",\n" \
- " \"parent\": {\n" \
- " },\n" \
- " \"position\": {\n" \
- " },\n" \
- " \"style\": \"\",\n" \
- " \"value\": \"a\"\n" \
- " },\n" \
- " {\n" \
- " \"border\": \"\",\n" \
- " \"colour\": {\n" \
- " \"background\": \"\",\n" \
- " \"foreground\": \"\"\n" \
- " },\n" \
- " \"name\": \"\",\n" \
- " \"parent\": {\n" \
- " },\n" \
- " \"position\": {\n" \
- " },\n" \
- " \"style\": \"\",\n" \
- " \"value\": \"\\u001b[0m\"\n" \
- " }\n" \
- "]"
- }
+ describe '#write' do
+ subject { instance.write }
- subject { instance.render(output) }
+ context 'when the :write_file option is true' do
+ let(:write_file) { true }
- it { subject.must_be_instance_of(String) }
- it { subject.must_equal(expected) }
+ it do
+ ::File.expects(:write).with(filename, output_as_json)
+ subject
+ end
+ end
+
+ context 'when the :write_file option is false' do
+ it { subject.must_equal(output_as_json) }
+ end
end
end # JSON
end # Renderers