1# -*- coding: utf-8 -*-
2
3require 'psych/helper'
4
5module Psych
6  class TestEmitter < TestCase
7    def setup
8      super
9      @out = StringIO.new('')
10      @emitter = Psych::Emitter.new @out
11    end
12
13    def test_line_width
14      assert_equal 0, @emitter.line_width
15      assert_equal 10, @emitter.line_width = 10
16      assert_equal 10, @emitter.line_width
17    end
18
19    def test_set_canonical
20      @emitter.canonical = true
21      assert_equal true, @emitter.canonical
22
23      @emitter.canonical = false
24      assert_equal false, @emitter.canonical
25    end
26
27    def test_indentation_set
28      assert_equal 2, @emitter.indentation
29      @emitter.indentation = 5
30      assert_equal 5, @emitter.indentation
31    end
32
33    def test_emit_utf_8
34      @emitter.start_stream Psych::Nodes::Stream::UTF8
35      @emitter.start_document [], [], false
36      @emitter.scalar '日本語', nil, nil, false, true, 1
37      @emitter.end_document true
38      @emitter.end_stream
39      assert_match('日本語', @out.string)
40    end
41
42    def test_start_stream_arg_error
43      assert_raises(TypeError) do
44        @emitter.start_stream 'asdfasdf'
45      end
46    end
47
48    def test_start_doc_arg_error
49      @emitter.start_stream Psych::Nodes::Stream::UTF8
50
51      [
52        [nil, [], false],
53        [[nil, nil], [], false],
54        [[], 'foo', false],
55        [[], ['foo'], false],
56        [[], [nil,nil], false],
57      ].each do |args|
58        assert_raises(TypeError) do
59          @emitter.start_document(*args)
60        end
61      end
62    end
63
64    def test_scalar_arg_error
65      @emitter.start_stream Psych::Nodes::Stream::UTF8
66      @emitter.start_document [], [], false
67
68      [
69        [:foo, nil, nil, false, true, 1],
70        ['foo', Object.new, nil, false, true, 1],
71        ['foo', nil, Object.new, false, true, 1],
72        ['foo', nil, nil, false, true, :foo],
73        [nil, nil, nil, false, true, 1],
74      ].each do |args|
75        assert_raises(TypeError) do
76          @emitter.scalar(*args)
77        end
78      end
79    end
80
81    def test_start_sequence_arg_error
82      @emitter.start_stream Psych::Nodes::Stream::UTF8
83      @emitter.start_document [], [], false
84
85      assert_raises(TypeError) do
86        @emitter.start_sequence(nil, Object.new, true, 1)
87      end
88
89      assert_raises(TypeError) do
90        @emitter.start_sequence(nil, nil, true, :foo)
91      end
92    end
93  end
94end
95