File: set_test.rb

package info (click to toggle)
ruby-byebug 11.1.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,252 kB
  • sloc: ruby: 8,835; ansic: 1,662; sh: 6; makefile: 4
file content (170 lines) | stat: -rw-r--r-- 4,567 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# frozen_string_literal: true

require "test_helper"

module Byebug
  #
  # Test settings functionality.
  #
  class SetTest < TestCase
    def program
      strip_line_numbers <<-RUBY
        1:  module Byebug
        2:    byebug
        3:
        4:    z = 4
        5:    z += 1
        6:    z + 1
        7:  end
      RUBY
    end

    settings =
      %i[autolist autosave basename fullpath post_mortem stack_on_error]

    settings.each do |set|
      ["on", "1", "true", ""].each do |key|
        define_method(:"test_enable_boolean_setting_#{set}_using_#{key}") do
          with_setting set, false do
            enter "set #{set} #{key}"
            debug_code(program)

            assert_equal true, Setting[set]
          end
        end
      end

      %w[off 0 false].each do |key|
        define_method(:"test_disable_boolean_setting_#{set}_using_#{key}") do
          with_setting set, true do
            enter "set #{set} #{key}"
            debug_code(program)

            assert_equal false, Setting[set]
          end
        end
      end

      define_method(:"test_disable_boolean_setting_#{set}_using_no_prefix") do
        with_setting set, true do
          enter "set no#{set}"
          debug_code(program)

          assert_equal false, Setting[set]
        end
      end
    end

    def test_set_does_not_enable_a_setting_using_shorcut_when_ambiguous
      with_setting :autolist, false do
        enter "set auto"
        debug_code(program)

        assert_equal false, Setting[:autolist]
      end
    end

    def test_set_enables_a_setting_using_shorcut_when_not_ambiguous
      with_setting :autolist, false do
        enter "set autol"
        debug_code(program)

        assert_equal true, Setting[:autolist]
      end
    end

    def test_set_does_not_disable_a_setting_using_shorcut_when_ambiguous
      with_setting :autolist, true do
        enter "set noauto"
        debug_code(program)

        assert_equal true, Setting[:autolist]
      end
    end

    def test_set_histsize_sets_maximum_history_size
      with_setting :histsize, 1 do
        enter "set histsize 250"
        debug_code(program)

        assert_equal 250, Setting[:histsize]
        check_output_includes "Maximum size of byebug's command history is 250"
      end
    end

    def test_set_histsize_shows_an_error_message_if_no_size_is_provided
      enter "set histsize"
      debug_code(program)

      check_error_includes "You must specify a value for setting :histsize"
    end

    def test_set_histfile_sets_command_history_file
      with_setting :histfile, HistfileSetting::DEFAULT do
        filename = File.expand_path(".custom-byebug-hist")
        enter "set histfile #{filename}"
        debug_code(program)

        assert_equal filename, Setting[:histfile]
        check_output_includes "The command history file is #{filename}"
        File.delete(filename)
      end
    end

    def test_set_histfile_shows_an_error_message_if_no_filename_is_provided
      enter "set histfile"
      debug_code(program)

      check_error_includes "You must specify a value for setting :histfile"
    end

    %i[listsize width].each do |set|
      define_method(:"test_set_#{set}_changes_integer_setting_#{set}") do
        with_setting set, 100 do
          enter "set #{set} 50"
          debug_code(program)

          assert_equal 50, Setting[set]
        end
      end
    end

    def test_set_linetrace_enables_tracing_program_execution
      with_setting :linetrace, false do
        enter "set linetrace", "cont 5"
        debug_code(program)

        check_output_includes \
          "linetrace is on", "Tracing: #{example_path}:5   z += 1"
      end
    end

    def test_set_nolinetrace_stops_tracing_program_execution
      with_setting :linetrace, true do
        enter "cont 5", "set nolinetrace"
        debug_code(program)

        check_output_includes "Tracing: #{example_path}:5   z += 1"
        check_output_doesnt_include "Tracing: #{example_path}:6   z + 1"
      end
    end

    def test_basename_setting_affects_tracing_output
      with_setting :basename, true do
        enter "set linetrace", "cont 5", "set nolinetrace"
        debug_code(program)

        check_output_includes \
          "Tracing: #{File.basename(example_path)}:5   z += 1"
      end
    end

    def test_set_without_arguments_shows_help_for_set_command
      enter "set"
      debug_code(program)

      check_output_includes("Modifies byebug settings",
                            "List of supported settings:")
    end
  end
end