rack-auth-ip 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. data/Rakefile +2 -2
  2. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html +1 -1
  3. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html +1 -1
  4. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html +1 -1
  5. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html +1 -1
  6. data/doc/output/coverage/-Library-Ruby-Gems-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html +1 -1
  7. data/doc/output/coverage/-Library-Ruby-Gems-gems-rcov-0_8_1_2_0-lib-rcov_rb.html +989 -989
  8. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-drb-drb_rb.html +1764 -1764
  9. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-drb-eq_rb.html +17 -17
  10. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-drb-invokemethod_rb.html +37 -37
  11. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-forwardable_rb.html +219 -219
  12. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-ipaddr_rb.html +530 -530
  13. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-pp_rb.html +648 -648
  14. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-prettyprint_rb.html +897 -897
  15. data/doc/output/coverage/-System-Library-Frameworks-Ruby_framework-Versions-1_8-usr-lib-ruby-1_8-timeout_rb.html +106 -106
  16. data/doc/output/coverage/index.html +11 -65
  17. data/doc/output/coverage/lib-rack-auth-ip_rb.html +51 -53
  18. data/lib/rack/auth/ip.rb +1 -1
  19. metadata +2 -4
  20. data/doc/output/coverage/-Library-Ruby-Gems-gems-rack-0_3_0-lib-rack-auth-abstract-handler_rb.html +0 -638
  21. data/doc/output/coverage/-Library-Ruby-Gems-gems-rack-0_3_0-lib-rack-auth-abstract-request_rb.html +0 -647
@@ -553,7 +553,7 @@ span.run100 {
553
553
  </style>
554
554
  </head>
555
555
  <body><h3>C0 code coverage information</h3>
556
- <p>Generated on Sat May 24 14:04:39 +0900 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
556
+ <p>Generated on Sat May 24 15:19:18 +0900 2008 with <a href='http://eigenclass.org/hiki/rcov'>rcov 0.8.1.2</a>
557
557
  </p>
558
558
  <hr/>
559
559
  <pre><span class='marked0'>Code reported as executed by Ruby looks like this...
@@ -598,653 +598,653 @@ span.run100 {
598
598
  </tr>
599
599
  </tbody>
600
600
  </table>
601
- <pre><span class="inferred0"><a name="line1"></a> 1 # == Pretty-printer for Ruby objects.
602
- </span><span class="inferred1"><a name="line2"></a> 2 #
603
- </span><span class="inferred0"><a name="line3"></a> 3 # = Which seems better?
604
- </span><span class="inferred1"><a name="line4"></a> 4 #
605
- </span><span class="inferred0"><a name="line5"></a> 5 # non-pretty-printed output by #p is:
606
- </span><span class="inferred1"><a name="line6"></a> 6 # #&lt;PP:0x81fedf0 @genspace=#&lt;Proc:0x81feda0&gt;, @group_queue=#&lt;PrettyPrint::GroupQueue:0x81fed3c @queue=[[#&lt;PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false&gt;], []]&gt;, @buffer=[], @newline=&quot;\n&quot;, @group_stack=[#&lt;PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false&gt;], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#&lt;IO:0x8114ee4&gt;&gt;
607
- </span><span class="inferred0"><a name="line7"></a> 7 #
608
- </span><span class="inferred1"><a name="line8"></a> 8 # pretty-printed output by #pp is:
609
- </span><span class="inferred0"><a name="line9"></a> 9 # #&lt;PP:0x81fedf0
610
- </span><span class="inferred1"><a name="line10"></a> 10 # @buffer=[],
611
- </span><span class="inferred0"><a name="line11"></a> 11 # @buffer_width=0,
612
- </span><span class="inferred1"><a name="line12"></a> 12 # @genspace=#&lt;Proc:0x81feda0&gt;,
613
- </span><span class="inferred0"><a name="line13"></a> 13 # @group_queue=
614
- </span><span class="inferred1"><a name="line14"></a> 14 # #&lt;PrettyPrint::GroupQueue:0x81fed3c
615
- </span><span class="inferred0"><a name="line15"></a> 15 # @queue=
616
- </span><span class="inferred1"><a name="line16"></a> 16 # [[#&lt;PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0&gt;],
617
- </span><span class="inferred0"><a name="line17"></a> 17 # []]&gt;,
618
- </span><span class="inferred1"><a name="line18"></a> 18 # @group_stack=
619
- </span><span class="inferred0"><a name="line19"></a> 19 # [#&lt;PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0&gt;],
620
- </span><span class="inferred1"><a name="line20"></a> 20 # @indent=0,
621
- </span><span class="inferred0"><a name="line21"></a> 21 # @maxwidth=79,
622
- </span><span class="inferred1"><a name="line22"></a> 22 # @newline=&quot;\n&quot;,
623
- </span><span class="inferred0"><a name="line23"></a> 23 # @output=#&lt;IO:0x8114ee4&gt;,
624
- </span><span class="inferred1"><a name="line24"></a> 24 # @output_width=2&gt;
625
- </span><span class="inferred0"><a name="line25"></a> 25 #
626
- </span><span class="inferred1"><a name="line26"></a> 26 # I like the latter. If you do too, this library is for you.
627
- </span><span class="inferred0"><a name="line27"></a> 27 #
628
- </span><span class="inferred1"><a name="line28"></a> 28 # = Usage
629
- </span><span class="inferred0"><a name="line29"></a> 29 #
630
- </span><span class="inferred1"><a name="line30"></a> 30 # pp(obj)
631
- </span><span class="inferred0"><a name="line31"></a> 31 #
632
- </span><span class="inferred1"><a name="line32"></a> 32 # output +obj+ to +$&gt;+ in pretty printed format.
633
- </span><span class="inferred0"><a name="line33"></a> 33 #
634
- </span><span class="inferred1"><a name="line34"></a> 34 # It returns +nil+.
635
- </span><span class="inferred0"><a name="line35"></a> 35 #
636
- </span><span class="inferred1"><a name="line36"></a> 36 # = Output Customization
637
- </span><span class="inferred0"><a name="line37"></a> 37 # To define your customized pretty printing function for your classes,
638
- </span><span class="inferred1"><a name="line38"></a> 38 # redefine a method #pretty_print(+pp+) in the class.
639
- </span><span class="inferred0"><a name="line39"></a> 39 # It takes an argument +pp+ which is an instance of the class PP.
640
- </span><span class="inferred1"><a name="line40"></a> 40 # The method should use PP#text, PP#breakable, PP#nest, PP#group and
641
- </span><span class="inferred0"><a name="line41"></a> 41 # PP#pp to print the object.
642
- </span><span class="inferred1"><a name="line42"></a> 42 #
643
- </span><span class="inferred0"><a name="line43"></a> 43 # = Author
644
- </span><span class="inferred1"><a name="line44"></a> 44 # Tanaka Akira &lt;akr@m17n.org&gt;
645
- </span><span class="inferred0"><a name="line45"></a> 45
646
- </span><span class="marked1"><a name="line46"></a> 46 require 'prettyprint'
647
- </span><span class="inferred0"><a name="line47"></a> 47
648
- </span><span class="marked1"><a name="line48"></a> 48 module Kernel
649
- </span><span class="inferred0"><a name="line49"></a> 49 # returns a pretty printed object as a string.
650
- </span><span class="marked1"><a name="line50"></a> 50 def pretty_inspect
651
- </span><span class="uncovered0"><a name="line51"></a> 51 PP.pp(self, '')
652
- </span><span class="uncovered1"><a name="line52"></a> 52 end
653
- </span><span class="inferred0"><a name="line53"></a> 53
654
- </span><span class="marked1"><a name="line54"></a> 54 private
655
- </span><span class="inferred0"><a name="line55"></a> 55 # prints arguments in pretty form.
656
- </span><span class="inferred1"><a name="line56"></a> 56 #
657
- </span><span class="inferred0"><a name="line57"></a> 57 # pp returns nil.
658
- </span><span class="marked1"><a name="line58"></a> 58 def pp(*objs) # :doc:
659
- </span><span class="uncovered0"><a name="line59"></a> 59 objs.each {|obj|
660
- </span><span class="uncovered1"><a name="line60"></a> 60 PP.pp(obj)
661
- </span><span class="uncovered0"><a name="line61"></a> 61 }
662
- </span><span class="uncovered1"><a name="line62"></a> 62 nil
663
- </span><span class="uncovered0"><a name="line63"></a> 63 end
664
- </span><span class="marked1"><a name="line64"></a> 64 module_function :pp
665
- </span><span class="inferred0"><a name="line65"></a> 65 end
666
- </span><span class="inferred1"><a name="line66"></a> 66
667
- </span><span class="marked0"><a name="line67"></a> 67 class PP &lt; PrettyPrint
668
- </span><span class="inferred1"><a name="line68"></a> 68 # Outputs +obj+ to +out+ in pretty printed format of
669
- </span><span class="inferred0"><a name="line69"></a> 69 # +width+ columns in width.
670
- </span><span class="inferred1"><a name="line70"></a> 70 #
671
- </span><span class="inferred0"><a name="line71"></a> 71 # If +out+ is omitted, +$&gt;+ is assumed.
672
- </span><span class="inferred1"><a name="line72"></a> 72 # If +width+ is omitted, 79 is assumed.
673
- </span><span class="inferred0"><a name="line73"></a> 73 #
674
- </span><span class="inferred1"><a name="line74"></a> 74 # PP.pp returns +out+.
675
- </span><span class="marked0"><a name="line75"></a> 75 def PP.pp(obj, out=$&gt;, width=79)
676
- </span><span class="uncovered1"><a name="line76"></a> 76 q = PP.new(out, width)
677
- </span><span class="uncovered0"><a name="line77"></a> 77 q.guard_inspect_key {q.pp obj}
678
- </span><span class="uncovered1"><a name="line78"></a> 78 q.flush
679
- </span><span class="uncovered0"><a name="line79"></a> 79 #$pp = q
680
- </span><span class="uncovered1"><a name="line80"></a> 80 out &lt;&lt; &quot;\n&quot;
681
- </span><span class="uncovered0"><a name="line81"></a> 81 end
682
- </span><span class="inferred1"><a name="line82"></a> 82
683
- </span><span class="inferred0"><a name="line83"></a> 83 # Outputs +obj+ to +out+ like PP.pp but with no indent and
684
- </span><span class="inferred1"><a name="line84"></a> 84 # newline.
685
- </span><span class="inferred0"><a name="line85"></a> 85 #
686
- </span><span class="inferred1"><a name="line86"></a> 86 # PP.singleline_pp returns +out+.
687
- </span><span class="marked0"><a name="line87"></a> 87 def PP.singleline_pp(obj, out=$&gt;)
688
- </span><span class="uncovered1"><a name="line88"></a> 88 q = SingleLine.new(out)
689
- </span><span class="uncovered0"><a name="line89"></a> 89 q.guard_inspect_key {q.pp obj}
690
- </span><span class="uncovered1"><a name="line90"></a> 90 q.flush
691
- </span><span class="uncovered0"><a name="line91"></a> 91 out
692
- </span><span class="uncovered1"><a name="line92"></a> 92 end
693
- </span><span class="inferred0"><a name="line93"></a> 93
694
- </span><span class="inferred1"><a name="line94"></a> 94 # :stopdoc:
695
- </span><span class="marked0"><a name="line95"></a> 95 def PP.mcall(obj, mod, meth, *args, &amp;block)
696
- </span><span class="uncovered1"><a name="line96"></a> 96 mod.instance_method(meth).bind(obj).call(*args, &amp;block)
697
- </span><span class="uncovered0"><a name="line97"></a> 97 end
698
- </span><span class="inferred1"><a name="line98"></a> 98 # :startdoc:
699
- </span><span class="inferred0"><a name="line99"></a> 99
700
- </span><span class="marked1"><a name="line100"></a>100 @sharing_detection = false
701
- </span><span class="marked0"><a name="line101"></a>101 class &lt;&lt; self
702
- </span><span class="inferred1"><a name="line102"></a>102 # Returns the sharing detection flag as a boolean value.
703
- </span><span class="inferred0"><a name="line103"></a>103 # It is false by default.
704
- </span><span class="marked1"><a name="line104"></a>104 attr_accessor :sharing_detection
705
- </span><span class="inferred0"><a name="line105"></a>105 end
706
- </span><span class="inferred1"><a name="line106"></a>106
707
- </span><span class="marked0"><a name="line107"></a>107 module PPMethods
708
- </span><span class="marked1"><a name="line108"></a>108 InspectKey = :__inspect_key__
709
- </span><span class="inferred0"><a name="line109"></a>109
710
- </span><span class="marked1"><a name="line110"></a>110 def guard_inspect_key
711
- </span><span class="uncovered0"><a name="line111"></a>111 if Thread.current[InspectKey] == nil
712
- </span><span class="uncovered1"><a name="line112"></a>112 Thread.current[InspectKey] = []
713
- </span><span class="uncovered0"><a name="line113"></a>113 end
714
- </span><span class="uncovered1"><a name="line114"></a>114
715
- </span><span class="uncovered0"><a name="line115"></a>115 save = Thread.current[InspectKey]
716
- </span><span class="uncovered1"><a name="line116"></a>116
717
- </span><span class="uncovered0"><a name="line117"></a>117 begin
718
- </span><span class="uncovered1"><a name="line118"></a>118 Thread.current[InspectKey] = []
719
- </span><span class="uncovered0"><a name="line119"></a>119 yield
720
- </span><span class="uncovered1"><a name="line120"></a>120 ensure
721
- </span><span class="uncovered0"><a name="line121"></a>121 Thread.current[InspectKey] = save
722
- </span><span class="uncovered1"><a name="line122"></a>122 end
723
- </span><span class="uncovered0"><a name="line123"></a>123 end
724
- </span><span class="inferred1"><a name="line124"></a>124
725
- </span><span class="inferred0"><a name="line125"></a>125 # Adds +obj+ to the pretty printing buffer
726
- </span><span class="inferred1"><a name="line126"></a>126 # using Object#pretty_print or Object#pretty_print_cycle.
727
- </span><span class="inferred0"><a name="line127"></a>127 #
728
- </span><span class="inferred1"><a name="line128"></a>128 # Object#pretty_print_cycle is used when +obj+ is already
729
- </span><span class="inferred0"><a name="line129"></a>129 # printed, a.k.a the object reference chain has a cycle.
730
- </span><span class="marked1"><a name="line130"></a>130 def pp(obj)
731
- </span><span class="uncovered0"><a name="line131"></a>131 id = obj.__id__
732
- </span><span class="uncovered1"><a name="line132"></a>132
733
- </span><span class="uncovered0"><a name="line133"></a>133 if Thread.current[InspectKey].include? id
734
- </span><span class="uncovered1"><a name="line134"></a>134 group {obj.pretty_print_cycle self}
735
- </span><span class="uncovered0"><a name="line135"></a>135 return
736
- </span><span class="uncovered1"><a name="line136"></a>136 end
737
- </span><span class="uncovered0"><a name="line137"></a>137
738
- </span><span class="uncovered1"><a name="line138"></a>138 begin
739
- </span><span class="uncovered0"><a name="line139"></a>139 Thread.current[InspectKey] &lt;&lt; id
740
- </span><span class="uncovered1"><a name="line140"></a>140 group {obj.pretty_print self}
741
- </span><span class="uncovered0"><a name="line141"></a>141 ensure
742
- </span><span class="uncovered1"><a name="line142"></a>142 Thread.current[InspectKey].pop unless PP.sharing_detection
743
- </span><span class="uncovered0"><a name="line143"></a>143 end
744
- </span><span class="uncovered1"><a name="line144"></a>144 end
745
- </span><span class="inferred0"><a name="line145"></a>145
746
- </span><span class="inferred1"><a name="line146"></a>146 # A convenience method which is same as follows:
747
- </span><span class="inferred0"><a name="line147"></a>147 #
748
- </span><span class="inferred1"><a name="line148"></a>148 # group(1, '#&lt;' + obj.class.name, '&gt;') { ... }
749
- </span><span class="marked0"><a name="line149"></a>149 def object_group(obj, &amp;block) # :yield:
750
- </span><span class="uncovered1"><a name="line150"></a>150 group(1, '#&lt;' + obj.class.name, '&gt;', &amp;block)
751
- </span><span class="uncovered0"><a name="line151"></a>151 end
752
- </span><span class="inferred1"><a name="line152"></a>152
753
- </span><span class="marked0"><a name="line153"></a>153 def object_address_group(obj, &amp;block)
754
- </span><span class="uncovered1"><a name="line154"></a>154 id = &quot;%x&quot; % (obj.__id__ * 2)
755
- </span><span class="uncovered0"><a name="line155"></a>155 id.sub!(/\Af(?=[[:xdigit:]]{2}+\z)/, '') if id.sub!(/\A\.\./, '')
756
- </span><span class="uncovered1"><a name="line156"></a>156 group(1, &quot;\#&lt;#{obj.class}:0x#{id}&quot;, '&gt;', &amp;block)
757
- </span><span class="uncovered0"><a name="line157"></a>157 end
758
- </span><span class="inferred1"><a name="line158"></a>158
759
- </span><span class="inferred0"><a name="line159"></a>159 # A convenience method which is same as follows:
760
- </span><span class="inferred1"><a name="line160"></a>160 #
761
- </span><span class="inferred0"><a name="line161"></a>161 # text ','
762
- </span><span class="inferred1"><a name="line162"></a>162 # breakable
763
- </span><span class="marked0"><a name="line163"></a>163 def comma_breakable
764
- </span><span class="uncovered1"><a name="line164"></a>164 text ','
765
- </span><span class="uncovered0"><a name="line165"></a>165 breakable
766
- </span><span class="uncovered1"><a name="line166"></a>166 end
767
- </span><span class="inferred0"><a name="line167"></a>167
768
- </span><span class="inferred1"><a name="line168"></a>168 # Adds a separated list.
769
- </span><span class="inferred0"><a name="line169"></a>169 # The list is separated by comma with breakable space, by default.
770
- </span><span class="inferred1"><a name="line170"></a>170 #
771
- </span><span class="inferred0"><a name="line171"></a>171 # #seplist iterates the +list+ using +iter_method+.
772
- </span><span class="inferred1"><a name="line172"></a>172 # It yields each object to the block given for #seplist.
773
- </span><span class="inferred0"><a name="line173"></a>173 # The procedure +separator_proc+ is called between each yields.
774
- </span><span class="inferred1"><a name="line174"></a>174 #
775
- </span><span class="inferred0"><a name="line175"></a>175 # If the iteration is zero times, +separator_proc+ is not called at all.
776
- </span><span class="inferred1"><a name="line176"></a>176 #
777
- </span><span class="inferred0"><a name="line177"></a>177 # If +separator_proc+ is nil or not given,
778
- </span><span class="inferred1"><a name="line178"></a>178 # +lambda { comma_breakable }+ is used.
779
- </span><span class="inferred0"><a name="line179"></a>179 # If +iter_method+ is not given, :each is used.
780
- </span><span class="inferred1"><a name="line180"></a>180 #
781
- </span><span class="inferred0"><a name="line181"></a>181 # For example, following 3 code fragments has similar effect.
782
- </span><span class="inferred1"><a name="line182"></a>182 #
783
- </span><span class="inferred0"><a name="line183"></a>183 # q.seplist([1,2,3]) {|v| xxx v }
784
- </span><span class="inferred1"><a name="line184"></a>184 #
785
- </span><span class="inferred0"><a name="line185"></a>185 # q.seplist([1,2,3], lambda { comma_breakable }, :each) {|v| xxx v }
786
- </span><span class="inferred1"><a name="line186"></a>186 #
787
- </span><span class="inferred0"><a name="line187"></a>187 # xxx 1
788
- </span><span class="inferred1"><a name="line188"></a>188 # q.comma_breakable
789
- </span><span class="inferred0"><a name="line189"></a>189 # xxx 2
790
- </span><span class="inferred1"><a name="line190"></a>190 # q.comma_breakable
791
- </span><span class="inferred0"><a name="line191"></a>191 # xxx 3
792
- </span><span class="marked1"><a name="line192"></a>192 def seplist(list, sep=nil, iter_method=:each) # :yield: element
793
- </span><span class="uncovered0"><a name="line193"></a>193 sep ||= lambda { comma_breakable }
794
- </span><span class="uncovered1"><a name="line194"></a>194 first = true
795
- </span><span class="uncovered0"><a name="line195"></a>195 list.__send__(iter_method) {|*v|
796
- </span><span class="uncovered1"><a name="line196"></a>196 if first
797
- </span><span class="uncovered0"><a name="line197"></a>197 first = false
798
- </span><span class="uncovered1"><a name="line198"></a>198 else
799
- </span><span class="uncovered0"><a name="line199"></a>199 sep.call
800
- </span><span class="uncovered1"><a name="line200"></a>200 end
801
- </span><span class="uncovered0"><a name="line201"></a>201 yield(*v)
802
- </span><span class="uncovered1"><a name="line202"></a>202 }
803
- </span><span class="uncovered0"><a name="line203"></a>203 end
804
- </span><span class="inferred1"><a name="line204"></a>204
805
- </span><span class="marked0"><a name="line205"></a>205 def pp_object(obj)
806
- </span><span class="uncovered1"><a name="line206"></a>206 object_address_group(obj) {
807
- </span><span class="uncovered0"><a name="line207"></a>207 seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v|
808
- </span><span class="uncovered1"><a name="line208"></a>208 breakable
809
- </span><span class="uncovered0"><a name="line209"></a>209 v = v.to_s if Symbol === v
810
- </span><span class="uncovered1"><a name="line210"></a>210 text v
811
- </span><span class="uncovered0"><a name="line211"></a>211 text '='
812
- </span><span class="uncovered1"><a name="line212"></a>212 group(1) {
813
- </span><span class="uncovered0"><a name="line213"></a>213 breakable ''
814
- </span><span class="uncovered1"><a name="line214"></a>214 pp(obj.instance_eval(v))
815
- </span><span class="uncovered0"><a name="line215"></a>215 }
816
- </span><span class="uncovered1"><a name="line216"></a>216 }
817
- </span><span class="uncovered0"><a name="line217"></a>217 }
818
- </span><span class="uncovered1"><a name="line218"></a>218 end
819
- </span><span class="inferred0"><a name="line219"></a>219
820
- </span><span class="marked1"><a name="line220"></a>220 def pp_hash(obj)
821
- </span><span class="uncovered0"><a name="line221"></a>221 group(1, '{', '}') {
822
- </span><span class="uncovered1"><a name="line222"></a>222 seplist(obj, nil, :each_pair) {|k, v|
823
- </span><span class="uncovered0"><a name="line223"></a>223 group {
824
- </span><span class="uncovered1"><a name="line224"></a>224 pp k
825
- </span><span class="uncovered0"><a name="line225"></a>225 text '=&gt;'
826
- </span><span class="uncovered1"><a name="line226"></a>226 group(1) {
827
- </span><span class="uncovered0"><a name="line227"></a>227 breakable ''
828
- </span><span class="uncovered1"><a name="line228"></a>228 pp v
829
- </span><span class="uncovered0"><a name="line229"></a>229 }
830
- </span><span class="uncovered1"><a name="line230"></a>230 }
831
- </span><span class="uncovered0"><a name="line231"></a>231 }
832
- </span><span class="uncovered1"><a name="line232"></a>232 }
833
- </span><span class="uncovered0"><a name="line233"></a>233 end
834
- </span><span class="uncovered1"><a name="line234"></a>234 end
835
- </span><span class="inferred0"><a name="line235"></a>235
836
- </span><span class="marked1"><a name="line236"></a>236 include PPMethods
837
- </span><span class="inferred0"><a name="line237"></a>237
838
- </span><span class="marked1"><a name="line238"></a>238 class SingleLine &lt; PrettyPrint::SingleLine
839
- </span><span class="marked0"><a name="line239"></a>239 include PPMethods
840
- </span><span class="inferred1"><a name="line240"></a>240 end
841
- </span><span class="inferred0"><a name="line241"></a>241
842
- </span><span class="marked1"><a name="line242"></a>242 module ObjectMixin
843
- </span><span class="inferred0"><a name="line243"></a>243 # 1. specific pretty_print
844
- </span><span class="inferred1"><a name="line244"></a>244 # 2. specific inspect
845
- </span><span class="inferred0"><a name="line245"></a>245 # 3. specific to_s if instance variable is empty
846
- </span><span class="inferred1"><a name="line246"></a>246 # 4. generic pretty_print
847
- </span><span class="inferred0"><a name="line247"></a>247
848
- </span><span class="inferred1"><a name="line248"></a>248 # A default pretty printing method for general objects.
849
- </span><span class="inferred0"><a name="line249"></a>249 # It calls #pretty_print_instance_variables to list instance variables.
850
- </span><span class="inferred1"><a name="line250"></a>250 #
851
- </span><span class="inferred0"><a name="line251"></a>251 # If +self+ has a customized (redefined) #inspect method,
852
- </span><span class="inferred1"><a name="line252"></a>252 # the result of self.inspect is used but it obviously has no
853
- </span><span class="inferred0"><a name="line253"></a>253 # line break hints.
854
- </span><span class="inferred1"><a name="line254"></a>254 #
855
- </span><span class="inferred0"><a name="line255"></a>255 # This module provides predefined #pretty_print methods for some of
856
- </span><span class="inferred1"><a name="line256"></a>256 # the most commonly used built-in classes for convenience.
857
- </span><span class="marked0"><a name="line257"></a>257 def pretty_print(q)
858
- </span><span class="uncovered1"><a name="line258"></a>258 if /\(Kernel\)#/ !~ method(:inspect).inspect
859
- </span><span class="uncovered0"><a name="line259"></a>259 q.text self.inspect
860
- </span><span class="uncovered1"><a name="line260"></a>260 elsif /\(Kernel\)#/ !~ method(:to_s).inspect &amp;&amp; instance_variables.empty?
861
- </span><span class="uncovered0"><a name="line261"></a>261 q.text self.to_s
862
- </span><span class="uncovered1"><a name="line262"></a>262 else
863
- </span><span class="uncovered0"><a name="line263"></a>263 q.pp_object(self)
864
- </span><span class="uncovered1"><a name="line264"></a>264 end
865
- </span><span class="uncovered0"><a name="line265"></a>265 end
866
- </span><span class="inferred1"><a name="line266"></a>266
867
- </span><span class="inferred0"><a name="line267"></a>267 # A default pretty printing method for general objects that are
868
- </span><span class="inferred1"><a name="line268"></a>268 # detected as part of a cycle.
869
- </span><span class="marked0"><a name="line269"></a>269 def pretty_print_cycle(q)
870
- </span><span class="uncovered1"><a name="line270"></a>270 q.object_address_group(self) {
871
- </span><span class="uncovered0"><a name="line271"></a>271 q.breakable
872
- </span><span class="uncovered1"><a name="line272"></a>272 q.text '...'
873
- </span><span class="uncovered0"><a name="line273"></a>273 }
874
- </span><span class="uncovered1"><a name="line274"></a>274 end
875
- </span><span class="inferred0"><a name="line275"></a>275
876
- </span><span class="inferred1"><a name="line276"></a>276 # Returns a sorted array of instance variable names.
877
- </span><span class="inferred0"><a name="line277"></a>277 #
878
- </span><span class="inferred1"><a name="line278"></a>278 # This method should return an array of names of instance variables as symbols or strings as:
879
- </span><span class="inferred0"><a name="line279"></a>279 # +[:@a, :@b]+.
880
- </span><span class="marked1"><a name="line280"></a>280 def pretty_print_instance_variables
881
- </span><span class="uncovered0"><a name="line281"></a>281 instance_variables.sort
882
- </span><span class="uncovered1"><a name="line282"></a>282 end
883
- </span><span class="inferred0"><a name="line283"></a>283
884
- </span><span class="inferred1"><a name="line284"></a>284 # Is #inspect implementation using #pretty_print.
885
- </span><span class="inferred0"><a name="line285"></a>285 # If you implement #pretty_print, it can be used as follows.
886
- </span><span class="inferred1"><a name="line286"></a>286 #
887
- </span><span class="inferred0"><a name="line287"></a>287 # alias inspect pretty_print_inspect
888
- </span><span class="inferred1"><a name="line288"></a>288 #
889
- </span><span class="inferred0"><a name="line289"></a>289 # However, doing this requires that every class that #inspect is called on
890
- </span><span class="inferred1"><a name="line290"></a>290 # implement #pretty_print, or a RuntimeError will be raised.
891
- </span><span class="marked0"><a name="line291"></a>291 def pretty_print_inspect
892
- </span><span class="uncovered1"><a name="line292"></a>292 if /\(PP::ObjectMixin\)#/ =~ method(:pretty_print).inspect
893
- </span><span class="uncovered0"><a name="line293"></a>293 raise &quot;pretty_print is not overridden for #{self.class}&quot;
894
- </span><span class="uncovered1"><a name="line294"></a>294 end
895
- </span><span class="uncovered0"><a name="line295"></a>295 PP.singleline_pp(self, '')
896
- </span><span class="uncovered1"><a name="line296"></a>296 end
897
- </span><span class="uncovered0"><a name="line297"></a>297 end
898
- </span><span class="uncovered1"><a name="line298"></a>298 end
899
- </span><span class="inferred0"><a name="line299"></a>299
900
- </span><span class="marked1"><a name="line300"></a>300 class Array
901
- </span><span class="marked0"><a name="line301"></a>301 def pretty_print(q)
902
- </span><span class="uncovered1"><a name="line302"></a>302 q.group(1, '[', ']') {
903
- </span><span class="uncovered0"><a name="line303"></a>303 q.seplist(self) {|v|
904
- </span><span class="uncovered1"><a name="line304"></a>304 q.pp v
905
- </span><span class="uncovered0"><a name="line305"></a>305 }
906
- </span><span class="uncovered1"><a name="line306"></a>306 }
907
- </span><span class="uncovered0"><a name="line307"></a>307 end
908
- </span><span class="inferred1"><a name="line308"></a>308
909
- </span><span class="marked0"><a name="line309"></a>309 def pretty_print_cycle(q)
910
- </span><span class="uncovered1"><a name="line310"></a>310 q.text(empty? ? '[]' : '[...]')
911
- </span><span class="uncovered0"><a name="line311"></a>311 end
912
- </span><span class="uncovered1"><a name="line312"></a>312 end
913
- </span><span class="inferred0"><a name="line313"></a>313
914
- </span><span class="marked1"><a name="line314"></a>314 class Hash
915
- </span><span class="marked0"><a name="line315"></a>315 def pretty_print(q)
916
- </span><span class="uncovered1"><a name="line316"></a>316 q.pp_hash self
917
- </span><span class="uncovered0"><a name="line317"></a>317 end
918
- </span><span class="inferred1"><a name="line318"></a>318
919
- </span><span class="marked0"><a name="line319"></a>319 def pretty_print_cycle(q)
920
- </span><span class="uncovered1"><a name="line320"></a>320 q.text(empty? ? '{}' : '{...}')
921
- </span><span class="uncovered0"><a name="line321"></a>321 end
922
- </span><span class="uncovered1"><a name="line322"></a>322 end
923
- </span><span class="inferred0"><a name="line323"></a>323
924
- </span><span class="marked1"><a name="line324"></a>324 class &lt;&lt; ENV
925
- </span><span class="marked0"><a name="line325"></a>325 def pretty_print(q)
926
- </span><span class="uncovered1"><a name="line326"></a>326 q.pp_hash self
927
- </span><span class="uncovered0"><a name="line327"></a>327 end
928
- </span><span class="uncovered1"><a name="line328"></a>328 end
929
- </span><span class="inferred0"><a name="line329"></a>329
930
- </span><span class="marked1"><a name="line330"></a>330 class Struct
931
- </span><span class="marked0"><a name="line331"></a>331 def pretty_print(q)
932
- </span><span class="uncovered1"><a name="line332"></a>332 q.group(1, '#&lt;struct ' + PP.mcall(self, Kernel, :class).name, '&gt;') {
933
- </span><span class="uncovered0"><a name="line333"></a>333 q.seplist(PP.mcall(self, Struct, :members), lambda { q.text &quot;,&quot; }) {|member|
934
- </span><span class="uncovered1"><a name="line334"></a>334 q.breakable
935
- </span><span class="uncovered0"><a name="line335"></a>335 q.text member.to_s
936
- </span><span class="uncovered1"><a name="line336"></a>336 q.text '='
937
- </span><span class="uncovered0"><a name="line337"></a>337 q.group(1) {
938
- </span><span class="uncovered1"><a name="line338"></a>338 q.breakable ''
939
- </span><span class="uncovered0"><a name="line339"></a>339 q.pp self[member]
940
- </span><span class="uncovered1"><a name="line340"></a>340 }
941
- </span><span class="uncovered0"><a name="line341"></a>341 }
942
- </span><span class="uncovered1"><a name="line342"></a>342 }
943
- </span><span class="uncovered0"><a name="line343"></a>343 end
944
- </span><span class="inferred1"><a name="line344"></a>344
945
- </span><span class="marked0"><a name="line345"></a>345 def pretty_print_cycle(q)
946
- </span><span class="uncovered1"><a name="line346"></a>346 q.text sprintf(&quot;#&lt;struct %s:...&gt;&quot;, PP.mcall(self, Kernel, :class).name)
947
- </span><span class="uncovered0"><a name="line347"></a>347 end
948
- </span><span class="uncovered1"><a name="line348"></a>348 end
949
- </span><span class="inferred0"><a name="line349"></a>349
950
- </span><span class="marked1"><a name="line350"></a>350 class Range
951
- </span><span class="marked0"><a name="line351"></a>351 def pretty_print(q)
952
- </span><span class="uncovered1"><a name="line352"></a>352 q.pp self.begin
953
- </span><span class="uncovered0"><a name="line353"></a>353 q.breakable ''
954
- </span><span class="uncovered1"><a name="line354"></a>354 q.text(self.exclude_end? ? '...' : '..')
955
- </span><span class="uncovered0"><a name="line355"></a>355 q.breakable ''
956
- </span><span class="uncovered1"><a name="line356"></a>356 q.pp self.end
957
- </span><span class="uncovered0"><a name="line357"></a>357 end
958
- </span><span class="uncovered1"><a name="line358"></a>358 end
959
- </span><span class="inferred0"><a name="line359"></a>359
960
- </span><span class="marked1"><a name="line360"></a>360 class File
961
- </span><span class="marked0"><a name="line361"></a>361 class Stat
962
- </span><span class="marked1"><a name="line362"></a>362 def pretty_print(q)
963
- </span><span class="uncovered0"><a name="line363"></a>363 require 'etc.so'
964
- </span><span class="uncovered1"><a name="line364"></a>364 q.object_group(self) {
965
- </span><span class="uncovered0"><a name="line365"></a>365 q.breakable
966
- </span><span class="uncovered1"><a name="line366"></a>366 q.text sprintf(&quot;dev=0x%x&quot;, self.dev); q.comma_breakable
967
- </span><span class="uncovered0"><a name="line367"></a>367 q.text &quot;ino=&quot;; q.pp self.ino; q.comma_breakable
968
- </span><span class="uncovered1"><a name="line368"></a>368 q.group {
969
- </span><span class="uncovered0"><a name="line369"></a>369 m = self.mode
970
- </span><span class="uncovered1"><a name="line370"></a>370 q.text sprintf(&quot;mode=0%o&quot;, m)
971
- </span><span class="uncovered0"><a name="line371"></a>371 q.breakable
972
- </span><span class="uncovered1"><a name="line372"></a>372 q.text sprintf(&quot;(%s %c%c%c%c%c%c%c%c%c)&quot;,
973
- </span><span class="uncovered0"><a name="line373"></a>373 self.ftype,
974
- </span><span class="uncovered1"><a name="line374"></a>374 (m &amp; 0400 == 0 ? ?- : ?r),
975
- </span><span class="uncovered0"><a name="line375"></a>375 (m &amp; 0200 == 0 ? ?- : ?w),
976
- </span><span class="uncovered1"><a name="line376"></a>376 (m &amp; 0100 == 0 ? (m &amp; 04000 == 0 ? ?- : ?S) :
977
- </span><span class="uncovered0"><a name="line377"></a>377 (m &amp; 04000 == 0 ? ?x : ?s)),
978
- </span><span class="uncovered1"><a name="line378"></a>378 (m &amp; 0040 == 0 ? ?- : ?r),
979
- </span><span class="uncovered0"><a name="line379"></a>379 (m &amp; 0020 == 0 ? ?- : ?w),
980
- </span><span class="uncovered1"><a name="line380"></a>380 (m &amp; 0010 == 0 ? (m &amp; 02000 == 0 ? ?- : ?S) :
981
- </span><span class="uncovered0"><a name="line381"></a>381 (m &amp; 02000 == 0 ? ?x : ?s)),
982
- </span><span class="uncovered1"><a name="line382"></a>382 (m &amp; 0004 == 0 ? ?- : ?r),
983
- </span><span class="uncovered0"><a name="line383"></a>383 (m &amp; 0002 == 0 ? ?- : ?w),
984
- </span><span class="uncovered1"><a name="line384"></a>384 (m &amp; 0001 == 0 ? (m &amp; 01000 == 0 ? ?- : ?T) :
985
- </span><span class="uncovered0"><a name="line385"></a>385 (m &amp; 01000 == 0 ? ?x : ?t)))
986
- </span><span class="uncovered1"><a name="line386"></a>386 }
987
- </span><span class="uncovered0"><a name="line387"></a>387 q.comma_breakable
988
- </span><span class="uncovered1"><a name="line388"></a>388 q.text &quot;nlink=&quot;; q.pp self.nlink; q.comma_breakable
989
- </span><span class="uncovered0"><a name="line389"></a>389 q.group {
990
- </span><span class="uncovered1"><a name="line390"></a>390 q.text &quot;uid=&quot;; q.pp self.uid
991
- </span><span class="uncovered0"><a name="line391"></a>391 begin
992
- </span><span class="uncovered1"><a name="line392"></a>392 pw = Etc.getpwuid(self.uid)
993
- </span><span class="uncovered0"><a name="line393"></a>393 rescue ArgumentError
994
- </span><span class="uncovered1"><a name="line394"></a>394 end
995
- </span><span class="uncovered0"><a name="line395"></a>395 if pw
996
- </span><span class="uncovered1"><a name="line396"></a>396 q.breakable; q.text &quot;(#{pw.name})&quot;
997
- </span><span class="uncovered0"><a name="line397"></a>397 end
998
- </span><span class="uncovered1"><a name="line398"></a>398 }
999
- </span><span class="uncovered0"><a name="line399"></a>399 q.comma_breakable
1000
- </span><span class="uncovered1"><a name="line400"></a>400 q.group {
1001
- </span><span class="uncovered0"><a name="line401"></a>401 q.text &quot;gid=&quot;; q.pp self.gid
1002
- </span><span class="uncovered1"><a name="line402"></a>402 begin
1003
- </span><span class="uncovered0"><a name="line403"></a>403 gr = Etc.getgrgid(self.gid)
1004
- </span><span class="uncovered1"><a name="line404"></a>404 rescue ArgumentError
1005
- </span><span class="uncovered0"><a name="line405"></a>405 end
1006
- </span><span class="uncovered1"><a name="line406"></a>406 if gr
1007
- </span><span class="uncovered0"><a name="line407"></a>407 q.breakable; q.text &quot;(#{gr.name})&quot;
1008
- </span><span class="uncovered1"><a name="line408"></a>408 end
1009
- </span><span class="uncovered0"><a name="line409"></a>409 }
1010
- </span><span class="uncovered1"><a name="line410"></a>410 q.comma_breakable
1011
- </span><span class="uncovered0"><a name="line411"></a>411 q.group {
1012
- </span><span class="uncovered1"><a name="line412"></a>412 q.text sprintf(&quot;rdev=0x%x&quot;, self.rdev)
1013
- </span><span class="uncovered0"><a name="line413"></a>413 q.breakable
1014
- </span><span class="uncovered1"><a name="line414"></a>414 q.text sprintf('(%d, %d)', self.rdev_major, self.rdev_minor)
1015
- </span><span class="uncovered0"><a name="line415"></a>415 }
1016
- </span><span class="uncovered1"><a name="line416"></a>416 q.comma_breakable
1017
- </span><span class="uncovered0"><a name="line417"></a>417 q.text &quot;size=&quot;; q.pp self.size; q.comma_breakable
1018
- </span><span class="uncovered1"><a name="line418"></a>418 q.text &quot;blksize=&quot;; q.pp self.blksize; q.comma_breakable
1019
- </span><span class="uncovered0"><a name="line419"></a>419 q.text &quot;blocks=&quot;; q.pp self.blocks; q.comma_breakable
1020
- </span><span class="uncovered1"><a name="line420"></a>420 q.group {
1021
- </span><span class="uncovered0"><a name="line421"></a>421 t = self.atime
1022
- </span><span class="uncovered1"><a name="line422"></a>422 q.text &quot;atime=&quot;; q.pp t
1023
- </span><span class="uncovered0"><a name="line423"></a>423 q.breakable; q.text &quot;(#{t.tv_sec})&quot;
1024
- </span><span class="uncovered1"><a name="line424"></a>424 }
1025
- </span><span class="uncovered0"><a name="line425"></a>425 q.comma_breakable
1026
- </span><span class="uncovered1"><a name="line426"></a>426 q.group {
1027
- </span><span class="uncovered0"><a name="line427"></a>427 t = self.mtime
1028
- </span><span class="uncovered1"><a name="line428"></a>428 q.text &quot;mtime=&quot;; q.pp t
1029
- </span><span class="uncovered0"><a name="line429"></a>429 q.breakable; q.text &quot;(#{t.tv_sec})&quot;
1030
- </span><span class="uncovered1"><a name="line430"></a>430 }
1031
- </span><span class="uncovered0"><a name="line431"></a>431 q.comma_breakable
1032
- </span><span class="uncovered1"><a name="line432"></a>432 q.group {
1033
- </span><span class="uncovered0"><a name="line433"></a>433 t = self.ctime
1034
- </span><span class="uncovered1"><a name="line434"></a>434 q.text &quot;ctime=&quot;; q.pp t
1035
- </span><span class="uncovered0"><a name="line435"></a>435 q.breakable; q.text &quot;(#{t.tv_sec})&quot;
1036
- </span><span class="uncovered1"><a name="line436"></a>436 }
1037
- </span><span class="uncovered0"><a name="line437"></a>437 }
1038
- </span><span class="uncovered1"><a name="line438"></a>438 end
1039
- </span><span class="uncovered0"><a name="line439"></a>439 end
1040
- </span><span class="uncovered1"><a name="line440"></a>440 end
1041
- </span><span class="inferred0"><a name="line441"></a>441
1042
- </span><span class="marked1"><a name="line442"></a>442 class MatchData
1043
- </span><span class="marked0"><a name="line443"></a>443 def pretty_print(q)
1044
- </span><span class="uncovered1"><a name="line444"></a>444 q.object_group(self) {
1045
- </span><span class="uncovered0"><a name="line445"></a>445 q.breakable
1046
- </span><span class="uncovered1"><a name="line446"></a>446 q.seplist(1..self.size, lambda { q.breakable }) {|i|
1047
- </span><span class="uncovered0"><a name="line447"></a>447 q.pp self[i-1]
1048
- </span><span class="uncovered1"><a name="line448"></a>448 }
1049
- </span><span class="uncovered0"><a name="line449"></a>449 }
1050
- </span><span class="uncovered1"><a name="line450"></a>450 end
1051
- </span><span class="uncovered0"><a name="line451"></a>451 end
1052
- </span><span class="inferred1"><a name="line452"></a>452
1053
- </span><span class="marked0"><a name="line453"></a>453 class Object
1054
- </span><span class="marked1"><a name="line454"></a>454 include PP::ObjectMixin
1055
- </span><span class="inferred0"><a name="line455"></a>455 end
1056
- </span><span class="inferred1"><a name="line456"></a>456
1057
- </span><span class="marked0"><a name="line457"></a>457 [Numeric, Symbol, FalseClass, TrueClass, NilClass, Module].each {|c|
1058
- </span><span class="marked1"><a name="line458"></a>458 c.class_eval {
1059
- </span><span class="marked0"><a name="line459"></a>459 def pretty_print_cycle(q)
1060
- </span><span class="uncovered1"><a name="line460"></a>460 q.text inspect
1061
- </span><span class="uncovered0"><a name="line461"></a>461 end
1062
- </span><span class="uncovered1"><a name="line462"></a>462 }
1063
- </span><span class="uncovered0"><a name="line463"></a>463 }
1064
- </span><span class="inferred1"><a name="line464"></a>464
1065
- </span><span class="marked0"><a name="line465"></a>465 [Numeric, FalseClass, TrueClass, Module].each {|c|
1066
- </span><span class="marked1"><a name="line466"></a>466 c.class_eval {
1067
- </span><span class="marked0"><a name="line467"></a>467 def pretty_print(q)
1068
- </span><span class="uncovered1"><a name="line468"></a>468 q.text inspect
1069
- </span><span class="uncovered0"><a name="line469"></a>469 end
1070
- </span><span class="uncovered1"><a name="line470"></a>470 }
1071
- </span><span class="uncovered0"><a name="line471"></a>471 }
1072
- </span><span class="inferred1"><a name="line472"></a>472
1073
- </span><span class="inferred0"><a name="line473"></a>473 # :enddoc:
1074
- </span><span class="marked1"><a name="line474"></a>474 if __FILE__ == $0
1075
- </span><span class="uncovered0"><a name="line475"></a>475 require 'test/unit'
1076
- </span><span class="uncovered1"><a name="line476"></a>476
1077
- </span><span class="uncovered0"><a name="line477"></a>477 class PPTest &lt; Test::Unit::TestCase
1078
- </span><span class="uncovered1"><a name="line478"></a>478 def test_list0123_12
1079
- </span><span class="uncovered0"><a name="line479"></a>479 assert_equal(&quot;[0, 1, 2, 3]\n&quot;, PP.pp([0,1,2,3], '', 12))
1080
- </span><span class="uncovered1"><a name="line480"></a>480 end
1081
- </span><span class="uncovered0"><a name="line481"></a>481
1082
- </span><span class="uncovered1"><a name="line482"></a>482 def test_list0123_11
1083
- </span><span class="uncovered0"><a name="line483"></a>483 assert_equal(&quot;[0,\n 1,\n 2,\n 3]\n&quot;, PP.pp([0,1,2,3], '', 11))
1084
- </span><span class="uncovered1"><a name="line484"></a>484 end
1085
- </span><span class="uncovered0"><a name="line485"></a>485
1086
- </span><span class="uncovered1"><a name="line486"></a>486 OverriddenStruct = Struct.new(&quot;OverriddenStruct&quot;, :members, :class)
1087
- </span><span class="uncovered0"><a name="line487"></a>487 def test_struct_override_members # [ruby-core:7865]
1088
- </span><span class="uncovered1"><a name="line488"></a>488 a = OverriddenStruct.new(1,2)
1089
- </span><span class="uncovered0"><a name="line489"></a>489 assert_equal(&quot;#&lt;struct Struct::OverriddenStruct members=1, class=2&gt;\n&quot;, PP.pp(a, ''))
1090
- </span><span class="uncovered1"><a name="line490"></a>490 end
1091
- </span><span class="uncovered0"><a name="line491"></a>491 end
1092
- </span><span class="uncovered1"><a name="line492"></a>492
1093
- </span><span class="uncovered0"><a name="line493"></a>493 class HasInspect
1094
- </span><span class="uncovered1"><a name="line494"></a>494 def initialize(a)
1095
- </span><span class="uncovered0"><a name="line495"></a>495 @a = a
1096
- </span><span class="uncovered1"><a name="line496"></a>496 end
1097
- </span><span class="uncovered0"><a name="line497"></a>497
1098
- </span><span class="uncovered1"><a name="line498"></a>498 def inspect
1099
- </span><span class="uncovered0"><a name="line499"></a>499 return &quot;&lt;inspect:#{@a.inspect}&gt;&quot;
1100
- </span><span class="uncovered1"><a name="line500"></a>500 end
1101
- </span><span class="uncovered0"><a name="line501"></a>501 end
1102
- </span><span class="uncovered1"><a name="line502"></a>502
1103
- </span><span class="uncovered0"><a name="line503"></a>503 class HasPrettyPrint
1104
- </span><span class="uncovered1"><a name="line504"></a>504 def initialize(a)
1105
- </span><span class="uncovered0"><a name="line505"></a>505 @a = a
1106
- </span><span class="uncovered1"><a name="line506"></a>506 end
1107
- </span><span class="uncovered0"><a name="line507"></a>507
1108
- </span><span class="uncovered1"><a name="line508"></a>508 def pretty_print(q)
1109
- </span><span class="uncovered0"><a name="line509"></a>509 q.text &quot;&lt;pretty_print:&quot;
1110
- </span><span class="uncovered1"><a name="line510"></a>510 q.pp @a
1111
- </span><span class="uncovered0"><a name="line511"></a>511 q.text &quot;&gt;&quot;
1112
- </span><span class="uncovered1"><a name="line512"></a>512 end
1113
- </span><span class="uncovered0"><a name="line513"></a>513 end
1114
- </span><span class="uncovered1"><a name="line514"></a>514
1115
- </span><span class="uncovered0"><a name="line515"></a>515 class HasBoth
1116
- </span><span class="uncovered1"><a name="line516"></a>516 def initialize(a)
1117
- </span><span class="uncovered0"><a name="line517"></a>517 @a = a
1118
- </span><span class="uncovered1"><a name="line518"></a>518 end
1119
- </span><span class="uncovered0"><a name="line519"></a>519
1120
- </span><span class="uncovered1"><a name="line520"></a>520 def inspect
1121
- </span><span class="uncovered0"><a name="line521"></a>521 return &quot;&lt;inspect:#{@a.inspect}&gt;&quot;
1122
- </span><span class="uncovered1"><a name="line522"></a>522 end
1123
- </span><span class="uncovered0"><a name="line523"></a>523
1124
- </span><span class="uncovered1"><a name="line524"></a>524 def pretty_print(q)
1125
- </span><span class="uncovered0"><a name="line525"></a>525 q.text &quot;&lt;pretty_print:&quot;
1126
- </span><span class="uncovered1"><a name="line526"></a>526 q.pp @a
1127
- </span><span class="uncovered0"><a name="line527"></a>527 q.text &quot;&gt;&quot;
1128
- </span><span class="uncovered1"><a name="line528"></a>528 end
1129
- </span><span class="uncovered0"><a name="line529"></a>529 end
1130
- </span><span class="uncovered1"><a name="line530"></a>530
1131
- </span><span class="uncovered0"><a name="line531"></a>531 class PrettyPrintInspect &lt; HasPrettyPrint
1132
- </span><span class="uncovered1"><a name="line532"></a>532 alias inspect pretty_print_inspect
1133
- </span><span class="uncovered0"><a name="line533"></a>533 end
1134
- </span><span class="uncovered1"><a name="line534"></a>534
1135
- </span><span class="uncovered0"><a name="line535"></a>535 class PrettyPrintInspectWithoutPrettyPrint
1136
- </span><span class="uncovered1"><a name="line536"></a>536 alias inspect pretty_print_inspect
1137
- </span><span class="uncovered0"><a name="line537"></a>537 end
1138
- </span><span class="uncovered1"><a name="line538"></a>538
1139
- </span><span class="uncovered0"><a name="line539"></a>539 class PPInspectTest &lt; Test::Unit::TestCase
1140
- </span><span class="uncovered1"><a name="line540"></a>540 def test_hasinspect
1141
- </span><span class="uncovered0"><a name="line541"></a>541 a = HasInspect.new(1)
1142
- </span><span class="uncovered1"><a name="line542"></a>542 assert_equal(&quot;&lt;inspect:1&gt;\n&quot;, PP.pp(a, ''))
1143
- </span><span class="uncovered0"><a name="line543"></a>543 end
1144
- </span><span class="uncovered1"><a name="line544"></a>544
1145
- </span><span class="uncovered0"><a name="line545"></a>545 def test_hasprettyprint
1146
- </span><span class="uncovered1"><a name="line546"></a>546 a = HasPrettyPrint.new(1)
1147
- </span><span class="uncovered0"><a name="line547"></a>547 assert_equal(&quot;&lt;pretty_print:1&gt;\n&quot;, PP.pp(a, ''))
1148
- </span><span class="uncovered1"><a name="line548"></a>548 end
1149
- </span><span class="uncovered0"><a name="line549"></a>549
1150
- </span><span class="uncovered1"><a name="line550"></a>550 def test_hasboth
1151
- </span><span class="uncovered0"><a name="line551"></a>551 a = HasBoth.new(1)
1152
- </span><span class="uncovered1"><a name="line552"></a>552 assert_equal(&quot;&lt;pretty_print:1&gt;\n&quot;, PP.pp(a, ''))
1153
- </span><span class="uncovered0"><a name="line553"></a>553 end
1154
- </span><span class="uncovered1"><a name="line554"></a>554
1155
- </span><span class="uncovered0"><a name="line555"></a>555 def test_pretty_print_inspect
1156
- </span><span class="uncovered1"><a name="line556"></a>556 a = PrettyPrintInspect.new(1)
1157
- </span><span class="uncovered0"><a name="line557"></a>557 assert_equal(&quot;&lt;pretty_print:1&gt;&quot;, a.inspect)
1158
- </span><span class="uncovered1"><a name="line558"></a>558 a = PrettyPrintInspectWithoutPrettyPrint.new
1159
- </span><span class="uncovered0"><a name="line559"></a>559 assert_raise(RuntimeError) { a.inspect }
1160
- </span><span class="uncovered1"><a name="line560"></a>560 end
1161
- </span><span class="uncovered0"><a name="line561"></a>561
1162
- </span><span class="uncovered1"><a name="line562"></a>562 def test_proc
1163
- </span><span class="uncovered0"><a name="line563"></a>563 a = proc {1}
1164
- </span><span class="uncovered1"><a name="line564"></a>564 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1165
- </span><span class="uncovered0"><a name="line565"></a>565 end
1166
- </span><span class="uncovered1"><a name="line566"></a>566
1167
- </span><span class="uncovered0"><a name="line567"></a>567 def test_to_s_with_iv
1168
- </span><span class="uncovered1"><a name="line568"></a>568 a = Object.new
1169
- </span><span class="uncovered0"><a name="line569"></a>569 def a.to_s() &quot;aaa&quot; end
1170
- </span><span class="uncovered1"><a name="line570"></a>570 a.instance_eval { @a = nil }
1171
- </span><span class="uncovered0"><a name="line571"></a>571 result = PP.pp(a, '')
1172
- </span><span class="uncovered1"><a name="line572"></a>572 assert_equal(&quot;#{a.inspect}\n&quot;, result)
1173
- </span><span class="uncovered0"><a name="line573"></a>573 assert_match(/\A#&lt;Object.*&gt;\n\z/m, result)
1174
- </span><span class="uncovered1"><a name="line574"></a>574 a = 1.0
1175
- </span><span class="uncovered0"><a name="line575"></a>575 a.instance_eval { @a = nil }
1176
- </span><span class="uncovered1"><a name="line576"></a>576 result = PP.pp(a, '')
1177
- </span><span class="uncovered0"><a name="line577"></a>577 assert_equal(&quot;#{a.inspect}\n&quot;, result)
1178
- </span><span class="uncovered1"><a name="line578"></a>578 end
1179
- </span><span class="uncovered0"><a name="line579"></a>579
1180
- </span><span class="uncovered1"><a name="line580"></a>580 def test_to_s_without_iv
1181
- </span><span class="uncovered0"><a name="line581"></a>581 a = Object.new
1182
- </span><span class="uncovered1"><a name="line582"></a>582 def a.to_s() &quot;aaa&quot; end
1183
- </span><span class="uncovered0"><a name="line583"></a>583 result = PP.pp(a, '')
1184
- </span><span class="uncovered1"><a name="line584"></a>584 assert_equal(&quot;#{a.inspect}\n&quot;, result)
1185
- </span><span class="uncovered0"><a name="line585"></a>585 assert_equal(&quot;aaa\n&quot;, result)
1186
- </span><span class="uncovered1"><a name="line586"></a>586 end
1187
- </span><span class="uncovered0"><a name="line587"></a>587 end
1188
- </span><span class="uncovered1"><a name="line588"></a>588
1189
- </span><span class="uncovered0"><a name="line589"></a>589 class PPCycleTest &lt; Test::Unit::TestCase
1190
- </span><span class="uncovered1"><a name="line590"></a>590 def test_array
1191
- </span><span class="uncovered0"><a name="line591"></a>591 a = []
1192
- </span><span class="uncovered1"><a name="line592"></a>592 a &lt;&lt; a
1193
- </span><span class="uncovered0"><a name="line593"></a>593 assert_equal(&quot;[[...]]\n&quot;, PP.pp(a, ''))
1194
- </span><span class="uncovered1"><a name="line594"></a>594 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1195
- </span><span class="uncovered0"><a name="line595"></a>595 end
1196
- </span><span class="uncovered1"><a name="line596"></a>596
1197
- </span><span class="uncovered0"><a name="line597"></a>597 def test_hash
1198
- </span><span class="uncovered1"><a name="line598"></a>598 a = {}
1199
- </span><span class="uncovered0"><a name="line599"></a>599 a[0] = a
1200
- </span><span class="uncovered1"><a name="line600"></a>600 assert_equal(&quot;{0=&gt;{...}}\n&quot;, PP.pp(a, ''))
1201
- </span><span class="uncovered0"><a name="line601"></a>601 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1202
- </span><span class="uncovered1"><a name="line602"></a>602 end
1203
- </span><span class="uncovered0"><a name="line603"></a>603
1204
- </span><span class="uncovered1"><a name="line604"></a>604 S = Struct.new(&quot;S&quot;, :a, :b)
1205
- </span><span class="uncovered0"><a name="line605"></a>605 def test_struct
1206
- </span><span class="uncovered1"><a name="line606"></a>606 a = S.new(1,2)
1207
- </span><span class="uncovered0"><a name="line607"></a>607 a.b = a
1208
- </span><span class="uncovered1"><a name="line608"></a>608 assert_equal(&quot;#&lt;struct Struct::S a=1, b=#&lt;struct Struct::S:...&gt;&gt;\n&quot;, PP.pp(a, ''))
1209
- </span><span class="uncovered0"><a name="line609"></a>609 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1210
- </span><span class="uncovered1"><a name="line610"></a>610 end
1211
- </span><span class="uncovered0"><a name="line611"></a>611
1212
- </span><span class="uncovered1"><a name="line612"></a>612 def test_object
1213
- </span><span class="uncovered0"><a name="line613"></a>613 a = Object.new
1214
- </span><span class="uncovered1"><a name="line614"></a>614 a.instance_eval {@a = a}
1215
- </span><span class="uncovered0"><a name="line615"></a>615 assert_equal(a.inspect + &quot;\n&quot;, PP.pp(a, ''))
1216
- </span><span class="uncovered1"><a name="line616"></a>616 end
1217
- </span><span class="uncovered0"><a name="line617"></a>617
1218
- </span><span class="uncovered1"><a name="line618"></a>618 def test_anonymous
1219
- </span><span class="uncovered0"><a name="line619"></a>619 a = Class.new.new
1220
- </span><span class="uncovered1"><a name="line620"></a>620 assert_equal(a.inspect + &quot;\n&quot;, PP.pp(a, ''))
1221
- </span><span class="uncovered0"><a name="line621"></a>621 end
1222
- </span><span class="uncovered1"><a name="line622"></a>622
1223
- </span><span class="uncovered0"><a name="line623"></a>623 def test_withinspect
1224
- </span><span class="uncovered1"><a name="line624"></a>624 a = []
1225
- </span><span class="uncovered0"><a name="line625"></a>625 a &lt;&lt; HasInspect.new(a)
1226
- </span><span class="uncovered1"><a name="line626"></a>626 assert_equal(&quot;[&lt;inspect:[...]&gt;]\n&quot;, PP.pp(a, ''))
1227
- </span><span class="uncovered0"><a name="line627"></a>627 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1228
- </span><span class="uncovered1"><a name="line628"></a>628 end
1229
- </span><span class="uncovered0"><a name="line629"></a>629
1230
- </span><span class="uncovered1"><a name="line630"></a>630 def test_share_nil
1231
- </span><span class="uncovered0"><a name="line631"></a>631 begin
1232
- </span><span class="uncovered1"><a name="line632"></a>632 PP.sharing_detection = true
1233
- </span><span class="uncovered0"><a name="line633"></a>633 a = [nil, nil]
1234
- </span><span class="uncovered1"><a name="line634"></a>634 assert_equal(&quot;[nil, nil]\n&quot;, PP.pp(a, ''))
1235
- </span><span class="uncovered0"><a name="line635"></a>635 ensure
1236
- </span><span class="uncovered1"><a name="line636"></a>636 PP.sharing_detection = false
1237
- </span><span class="uncovered0"><a name="line637"></a>637 end
1238
- </span><span class="uncovered1"><a name="line638"></a>638 end
1239
- </span><span class="uncovered0"><a name="line639"></a>639 end
1240
- </span><span class="uncovered1"><a name="line640"></a>640
1241
- </span><span class="uncovered0"><a name="line641"></a>641 class PPSingleLineTest &lt; Test::Unit::TestCase
1242
- </span><span class="uncovered1"><a name="line642"></a>642 def test_hash
1243
- </span><span class="uncovered0"><a name="line643"></a>643 assert_equal(&quot;{1=&gt;1}&quot;, PP.singleline_pp({ 1 =&gt; 1}, '')) # [ruby-core:02699]
1244
- </span><span class="uncovered1"><a name="line644"></a>644 assert_equal(&quot;[1#{', 1'*99}]&quot;, PP.singleline_pp([1]*100, ''))
1245
- </span><span class="uncovered0"><a name="line645"></a>645 end
1246
- </span><span class="uncovered1"><a name="line646"></a>646 end
1247
- </span><span class="uncovered0"><a name="line647"></a>647 end
601
+ <pre><span class="inferred1"><a name="line1"></a> 1 # == Pretty-printer for Ruby objects.
602
+ </span><span class="inferred0"><a name="line2"></a> 2 #
603
+ </span><span class="inferred1"><a name="line3"></a> 3 # = Which seems better?
604
+ </span><span class="inferred0"><a name="line4"></a> 4 #
605
+ </span><span class="inferred1"><a name="line5"></a> 5 # non-pretty-printed output by #p is:
606
+ </span><span class="inferred0"><a name="line6"></a> 6 # #&lt;PP:0x81fedf0 @genspace=#&lt;Proc:0x81feda0&gt;, @group_queue=#&lt;PrettyPrint::GroupQueue:0x81fed3c @queue=[[#&lt;PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false&gt;], []]&gt;, @buffer=[], @newline=&quot;\n&quot;, @group_stack=[#&lt;PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false&gt;], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#&lt;IO:0x8114ee4&gt;&gt;
607
+ </span><span class="inferred1"><a name="line7"></a> 7 #
608
+ </span><span class="inferred0"><a name="line8"></a> 8 # pretty-printed output by #pp is:
609
+ </span><span class="inferred1"><a name="line9"></a> 9 # #&lt;PP:0x81fedf0
610
+ </span><span class="inferred0"><a name="line10"></a> 10 # @buffer=[],
611
+ </span><span class="inferred1"><a name="line11"></a> 11 # @buffer_width=0,
612
+ </span><span class="inferred0"><a name="line12"></a> 12 # @genspace=#&lt;Proc:0x81feda0&gt;,
613
+ </span><span class="inferred1"><a name="line13"></a> 13 # @group_queue=
614
+ </span><span class="inferred0"><a name="line14"></a> 14 # #&lt;PrettyPrint::GroupQueue:0x81fed3c
615
+ </span><span class="inferred1"><a name="line15"></a> 15 # @queue=
616
+ </span><span class="inferred0"><a name="line16"></a> 16 # [[#&lt;PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0&gt;],
617
+ </span><span class="inferred1"><a name="line17"></a> 17 # []]&gt;,
618
+ </span><span class="inferred0"><a name="line18"></a> 18 # @group_stack=
619
+ </span><span class="inferred1"><a name="line19"></a> 19 # [#&lt;PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0&gt;],
620
+ </span><span class="inferred0"><a name="line20"></a> 20 # @indent=0,
621
+ </span><span class="inferred1"><a name="line21"></a> 21 # @maxwidth=79,
622
+ </span><span class="inferred0"><a name="line22"></a> 22 # @newline=&quot;\n&quot;,
623
+ </span><span class="inferred1"><a name="line23"></a> 23 # @output=#&lt;IO:0x8114ee4&gt;,
624
+ </span><span class="inferred0"><a name="line24"></a> 24 # @output_width=2&gt;
625
+ </span><span class="inferred1"><a name="line25"></a> 25 #
626
+ </span><span class="inferred0"><a name="line26"></a> 26 # I like the latter. If you do too, this library is for you.
627
+ </span><span class="inferred1"><a name="line27"></a> 27 #
628
+ </span><span class="inferred0"><a name="line28"></a> 28 # = Usage
629
+ </span><span class="inferred1"><a name="line29"></a> 29 #
630
+ </span><span class="inferred0"><a name="line30"></a> 30 # pp(obj)
631
+ </span><span class="inferred1"><a name="line31"></a> 31 #
632
+ </span><span class="inferred0"><a name="line32"></a> 32 # output +obj+ to +$&gt;+ in pretty printed format.
633
+ </span><span class="inferred1"><a name="line33"></a> 33 #
634
+ </span><span class="inferred0"><a name="line34"></a> 34 # It returns +nil+.
635
+ </span><span class="inferred1"><a name="line35"></a> 35 #
636
+ </span><span class="inferred0"><a name="line36"></a> 36 # = Output Customization
637
+ </span><span class="inferred1"><a name="line37"></a> 37 # To define your customized pretty printing function for your classes,
638
+ </span><span class="inferred0"><a name="line38"></a> 38 # redefine a method #pretty_print(+pp+) in the class.
639
+ </span><span class="inferred1"><a name="line39"></a> 39 # It takes an argument +pp+ which is an instance of the class PP.
640
+ </span><span class="inferred0"><a name="line40"></a> 40 # The method should use PP#text, PP#breakable, PP#nest, PP#group and
641
+ </span><span class="inferred1"><a name="line41"></a> 41 # PP#pp to print the object.
642
+ </span><span class="inferred0"><a name="line42"></a> 42 #
643
+ </span><span class="inferred1"><a name="line43"></a> 43 # = Author
644
+ </span><span class="inferred0"><a name="line44"></a> 44 # Tanaka Akira &lt;akr@m17n.org&gt;
645
+ </span><span class="inferred1"><a name="line45"></a> 45
646
+ </span><span class="marked0"><a name="line46"></a> 46 require 'prettyprint'
647
+ </span><span class="inferred1"><a name="line47"></a> 47
648
+ </span><span class="marked0"><a name="line48"></a> 48 module Kernel
649
+ </span><span class="inferred1"><a name="line49"></a> 49 # returns a pretty printed object as a string.
650
+ </span><span class="marked0"><a name="line50"></a> 50 def pretty_inspect
651
+ </span><span class="uncovered1"><a name="line51"></a> 51 PP.pp(self, '')
652
+ </span><span class="uncovered0"><a name="line52"></a> 52 end
653
+ </span><span class="inferred1"><a name="line53"></a> 53
654
+ </span><span class="marked0"><a name="line54"></a> 54 private
655
+ </span><span class="inferred1"><a name="line55"></a> 55 # prints arguments in pretty form.
656
+ </span><span class="inferred0"><a name="line56"></a> 56 #
657
+ </span><span class="inferred1"><a name="line57"></a> 57 # pp returns nil.
658
+ </span><span class="marked0"><a name="line58"></a> 58 def pp(*objs) # :doc:
659
+ </span><span class="uncovered1"><a name="line59"></a> 59 objs.each {|obj|
660
+ </span><span class="uncovered0"><a name="line60"></a> 60 PP.pp(obj)
661
+ </span><span class="uncovered1"><a name="line61"></a> 61 }
662
+ </span><span class="uncovered0"><a name="line62"></a> 62 nil
663
+ </span><span class="uncovered1"><a name="line63"></a> 63 end
664
+ </span><span class="marked0"><a name="line64"></a> 64 module_function :pp
665
+ </span><span class="inferred1"><a name="line65"></a> 65 end
666
+ </span><span class="inferred0"><a name="line66"></a> 66
667
+ </span><span class="marked1"><a name="line67"></a> 67 class PP &lt; PrettyPrint
668
+ </span><span class="inferred0"><a name="line68"></a> 68 # Outputs +obj+ to +out+ in pretty printed format of
669
+ </span><span class="inferred1"><a name="line69"></a> 69 # +width+ columns in width.
670
+ </span><span class="inferred0"><a name="line70"></a> 70 #
671
+ </span><span class="inferred1"><a name="line71"></a> 71 # If +out+ is omitted, +$&gt;+ is assumed.
672
+ </span><span class="inferred0"><a name="line72"></a> 72 # If +width+ is omitted, 79 is assumed.
673
+ </span><span class="inferred1"><a name="line73"></a> 73 #
674
+ </span><span class="inferred0"><a name="line74"></a> 74 # PP.pp returns +out+.
675
+ </span><span class="marked1"><a name="line75"></a> 75 def PP.pp(obj, out=$&gt;, width=79)
676
+ </span><span class="uncovered0"><a name="line76"></a> 76 q = PP.new(out, width)
677
+ </span><span class="uncovered1"><a name="line77"></a> 77 q.guard_inspect_key {q.pp obj}
678
+ </span><span class="uncovered0"><a name="line78"></a> 78 q.flush
679
+ </span><span class="uncovered1"><a name="line79"></a> 79 #$pp = q
680
+ </span><span class="uncovered0"><a name="line80"></a> 80 out &lt;&lt; &quot;\n&quot;
681
+ </span><span class="uncovered1"><a name="line81"></a> 81 end
682
+ </span><span class="inferred0"><a name="line82"></a> 82
683
+ </span><span class="inferred1"><a name="line83"></a> 83 # Outputs +obj+ to +out+ like PP.pp but with no indent and
684
+ </span><span class="inferred0"><a name="line84"></a> 84 # newline.
685
+ </span><span class="inferred1"><a name="line85"></a> 85 #
686
+ </span><span class="inferred0"><a name="line86"></a> 86 # PP.singleline_pp returns +out+.
687
+ </span><span class="marked1"><a name="line87"></a> 87 def PP.singleline_pp(obj, out=$&gt;)
688
+ </span><span class="uncovered0"><a name="line88"></a> 88 q = SingleLine.new(out)
689
+ </span><span class="uncovered1"><a name="line89"></a> 89 q.guard_inspect_key {q.pp obj}
690
+ </span><span class="uncovered0"><a name="line90"></a> 90 q.flush
691
+ </span><span class="uncovered1"><a name="line91"></a> 91 out
692
+ </span><span class="uncovered0"><a name="line92"></a> 92 end
693
+ </span><span class="inferred1"><a name="line93"></a> 93
694
+ </span><span class="inferred0"><a name="line94"></a> 94 # :stopdoc:
695
+ </span><span class="marked1"><a name="line95"></a> 95 def PP.mcall(obj, mod, meth, *args, &amp;block)
696
+ </span><span class="uncovered0"><a name="line96"></a> 96 mod.instance_method(meth).bind(obj).call(*args, &amp;block)
697
+ </span><span class="uncovered1"><a name="line97"></a> 97 end
698
+ </span><span class="inferred0"><a name="line98"></a> 98 # :startdoc:
699
+ </span><span class="inferred1"><a name="line99"></a> 99
700
+ </span><span class="marked0"><a name="line100"></a>100 @sharing_detection = false
701
+ </span><span class="marked1"><a name="line101"></a>101 class &lt;&lt; self
702
+ </span><span class="inferred0"><a name="line102"></a>102 # Returns the sharing detection flag as a boolean value.
703
+ </span><span class="inferred1"><a name="line103"></a>103 # It is false by default.
704
+ </span><span class="marked0"><a name="line104"></a>104 attr_accessor :sharing_detection
705
+ </span><span class="inferred1"><a name="line105"></a>105 end
706
+ </span><span class="inferred0"><a name="line106"></a>106
707
+ </span><span class="marked1"><a name="line107"></a>107 module PPMethods
708
+ </span><span class="marked0"><a name="line108"></a>108 InspectKey = :__inspect_key__
709
+ </span><span class="inferred1"><a name="line109"></a>109
710
+ </span><span class="marked0"><a name="line110"></a>110 def guard_inspect_key
711
+ </span><span class="uncovered1"><a name="line111"></a>111 if Thread.current[InspectKey] == nil
712
+ </span><span class="uncovered0"><a name="line112"></a>112 Thread.current[InspectKey] = []
713
+ </span><span class="uncovered1"><a name="line113"></a>113 end
714
+ </span><span class="uncovered0"><a name="line114"></a>114
715
+ </span><span class="uncovered1"><a name="line115"></a>115 save = Thread.current[InspectKey]
716
+ </span><span class="uncovered0"><a name="line116"></a>116
717
+ </span><span class="uncovered1"><a name="line117"></a>117 begin
718
+ </span><span class="uncovered0"><a name="line118"></a>118 Thread.current[InspectKey] = []
719
+ </span><span class="uncovered1"><a name="line119"></a>119 yield
720
+ </span><span class="uncovered0"><a name="line120"></a>120 ensure
721
+ </span><span class="uncovered1"><a name="line121"></a>121 Thread.current[InspectKey] = save
722
+ </span><span class="uncovered0"><a name="line122"></a>122 end
723
+ </span><span class="uncovered1"><a name="line123"></a>123 end
724
+ </span><span class="inferred0"><a name="line124"></a>124
725
+ </span><span class="inferred1"><a name="line125"></a>125 # Adds +obj+ to the pretty printing buffer
726
+ </span><span class="inferred0"><a name="line126"></a>126 # using Object#pretty_print or Object#pretty_print_cycle.
727
+ </span><span class="inferred1"><a name="line127"></a>127 #
728
+ </span><span class="inferred0"><a name="line128"></a>128 # Object#pretty_print_cycle is used when +obj+ is already
729
+ </span><span class="inferred1"><a name="line129"></a>129 # printed, a.k.a the object reference chain has a cycle.
730
+ </span><span class="marked0"><a name="line130"></a>130 def pp(obj)
731
+ </span><span class="uncovered1"><a name="line131"></a>131 id = obj.__id__
732
+ </span><span class="uncovered0"><a name="line132"></a>132
733
+ </span><span class="uncovered1"><a name="line133"></a>133 if Thread.current[InspectKey].include? id
734
+ </span><span class="uncovered0"><a name="line134"></a>134 group {obj.pretty_print_cycle self}
735
+ </span><span class="uncovered1"><a name="line135"></a>135 return
736
+ </span><span class="uncovered0"><a name="line136"></a>136 end
737
+ </span><span class="uncovered1"><a name="line137"></a>137
738
+ </span><span class="uncovered0"><a name="line138"></a>138 begin
739
+ </span><span class="uncovered1"><a name="line139"></a>139 Thread.current[InspectKey] &lt;&lt; id
740
+ </span><span class="uncovered0"><a name="line140"></a>140 group {obj.pretty_print self}
741
+ </span><span class="uncovered1"><a name="line141"></a>141 ensure
742
+ </span><span class="uncovered0"><a name="line142"></a>142 Thread.current[InspectKey].pop unless PP.sharing_detection
743
+ </span><span class="uncovered1"><a name="line143"></a>143 end
744
+ </span><span class="uncovered0"><a name="line144"></a>144 end
745
+ </span><span class="inferred1"><a name="line145"></a>145
746
+ </span><span class="inferred0"><a name="line146"></a>146 # A convenience method which is same as follows:
747
+ </span><span class="inferred1"><a name="line147"></a>147 #
748
+ </span><span class="inferred0"><a name="line148"></a>148 # group(1, '#&lt;' + obj.class.name, '&gt;') { ... }
749
+ </span><span class="marked1"><a name="line149"></a>149 def object_group(obj, &amp;block) # :yield:
750
+ </span><span class="uncovered0"><a name="line150"></a>150 group(1, '#&lt;' + obj.class.name, '&gt;', &amp;block)
751
+ </span><span class="uncovered1"><a name="line151"></a>151 end
752
+ </span><span class="inferred0"><a name="line152"></a>152
753
+ </span><span class="marked1"><a name="line153"></a>153 def object_address_group(obj, &amp;block)
754
+ </span><span class="uncovered0"><a name="line154"></a>154 id = &quot;%x&quot; % (obj.__id__ * 2)
755
+ </span><span class="uncovered1"><a name="line155"></a>155 id.sub!(/\Af(?=[[:xdigit:]]{2}+\z)/, '') if id.sub!(/\A\.\./, '')
756
+ </span><span class="uncovered0"><a name="line156"></a>156 group(1, &quot;\#&lt;#{obj.class}:0x#{id}&quot;, '&gt;', &amp;block)
757
+ </span><span class="uncovered1"><a name="line157"></a>157 end
758
+ </span><span class="inferred0"><a name="line158"></a>158
759
+ </span><span class="inferred1"><a name="line159"></a>159 # A convenience method which is same as follows:
760
+ </span><span class="inferred0"><a name="line160"></a>160 #
761
+ </span><span class="inferred1"><a name="line161"></a>161 # text ','
762
+ </span><span class="inferred0"><a name="line162"></a>162 # breakable
763
+ </span><span class="marked1"><a name="line163"></a>163 def comma_breakable
764
+ </span><span class="uncovered0"><a name="line164"></a>164 text ','
765
+ </span><span class="uncovered1"><a name="line165"></a>165 breakable
766
+ </span><span class="uncovered0"><a name="line166"></a>166 end
767
+ </span><span class="inferred1"><a name="line167"></a>167
768
+ </span><span class="inferred0"><a name="line168"></a>168 # Adds a separated list.
769
+ </span><span class="inferred1"><a name="line169"></a>169 # The list is separated by comma with breakable space, by default.
770
+ </span><span class="inferred0"><a name="line170"></a>170 #
771
+ </span><span class="inferred1"><a name="line171"></a>171 # #seplist iterates the +list+ using +iter_method+.
772
+ </span><span class="inferred0"><a name="line172"></a>172 # It yields each object to the block given for #seplist.
773
+ </span><span class="inferred1"><a name="line173"></a>173 # The procedure +separator_proc+ is called between each yields.
774
+ </span><span class="inferred0"><a name="line174"></a>174 #
775
+ </span><span class="inferred1"><a name="line175"></a>175 # If the iteration is zero times, +separator_proc+ is not called at all.
776
+ </span><span class="inferred0"><a name="line176"></a>176 #
777
+ </span><span class="inferred1"><a name="line177"></a>177 # If +separator_proc+ is nil or not given,
778
+ </span><span class="inferred0"><a name="line178"></a>178 # +lambda { comma_breakable }+ is used.
779
+ </span><span class="inferred1"><a name="line179"></a>179 # If +iter_method+ is not given, :each is used.
780
+ </span><span class="inferred0"><a name="line180"></a>180 #
781
+ </span><span class="inferred1"><a name="line181"></a>181 # For example, following 3 code fragments has similar effect.
782
+ </span><span class="inferred0"><a name="line182"></a>182 #
783
+ </span><span class="inferred1"><a name="line183"></a>183 # q.seplist([1,2,3]) {|v| xxx v }
784
+ </span><span class="inferred0"><a name="line184"></a>184 #
785
+ </span><span class="inferred1"><a name="line185"></a>185 # q.seplist([1,2,3], lambda { comma_breakable }, :each) {|v| xxx v }
786
+ </span><span class="inferred0"><a name="line186"></a>186 #
787
+ </span><span class="inferred1"><a name="line187"></a>187 # xxx 1
788
+ </span><span class="inferred0"><a name="line188"></a>188 # q.comma_breakable
789
+ </span><span class="inferred1"><a name="line189"></a>189 # xxx 2
790
+ </span><span class="inferred0"><a name="line190"></a>190 # q.comma_breakable
791
+ </span><span class="inferred1"><a name="line191"></a>191 # xxx 3
792
+ </span><span class="marked0"><a name="line192"></a>192 def seplist(list, sep=nil, iter_method=:each) # :yield: element
793
+ </span><span class="uncovered1"><a name="line193"></a>193 sep ||= lambda { comma_breakable }
794
+ </span><span class="uncovered0"><a name="line194"></a>194 first = true
795
+ </span><span class="uncovered1"><a name="line195"></a>195 list.__send__(iter_method) {|*v|
796
+ </span><span class="uncovered0"><a name="line196"></a>196 if first
797
+ </span><span class="uncovered1"><a name="line197"></a>197 first = false
798
+ </span><span class="uncovered0"><a name="line198"></a>198 else
799
+ </span><span class="uncovered1"><a name="line199"></a>199 sep.call
800
+ </span><span class="uncovered0"><a name="line200"></a>200 end
801
+ </span><span class="uncovered1"><a name="line201"></a>201 yield(*v)
802
+ </span><span class="uncovered0"><a name="line202"></a>202 }
803
+ </span><span class="uncovered1"><a name="line203"></a>203 end
804
+ </span><span class="inferred0"><a name="line204"></a>204
805
+ </span><span class="marked1"><a name="line205"></a>205 def pp_object(obj)
806
+ </span><span class="uncovered0"><a name="line206"></a>206 object_address_group(obj) {
807
+ </span><span class="uncovered1"><a name="line207"></a>207 seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v|
808
+ </span><span class="uncovered0"><a name="line208"></a>208 breakable
809
+ </span><span class="uncovered1"><a name="line209"></a>209 v = v.to_s if Symbol === v
810
+ </span><span class="uncovered0"><a name="line210"></a>210 text v
811
+ </span><span class="uncovered1"><a name="line211"></a>211 text '='
812
+ </span><span class="uncovered0"><a name="line212"></a>212 group(1) {
813
+ </span><span class="uncovered1"><a name="line213"></a>213 breakable ''
814
+ </span><span class="uncovered0"><a name="line214"></a>214 pp(obj.instance_eval(v))
815
+ </span><span class="uncovered1"><a name="line215"></a>215 }
816
+ </span><span class="uncovered0"><a name="line216"></a>216 }
817
+ </span><span class="uncovered1"><a name="line217"></a>217 }
818
+ </span><span class="uncovered0"><a name="line218"></a>218 end
819
+ </span><span class="inferred1"><a name="line219"></a>219
820
+ </span><span class="marked0"><a name="line220"></a>220 def pp_hash(obj)
821
+ </span><span class="uncovered1"><a name="line221"></a>221 group(1, '{', '}') {
822
+ </span><span class="uncovered0"><a name="line222"></a>222 seplist(obj, nil, :each_pair) {|k, v|
823
+ </span><span class="uncovered1"><a name="line223"></a>223 group {
824
+ </span><span class="uncovered0"><a name="line224"></a>224 pp k
825
+ </span><span class="uncovered1"><a name="line225"></a>225 text '=&gt;'
826
+ </span><span class="uncovered0"><a name="line226"></a>226 group(1) {
827
+ </span><span class="uncovered1"><a name="line227"></a>227 breakable ''
828
+ </span><span class="uncovered0"><a name="line228"></a>228 pp v
829
+ </span><span class="uncovered1"><a name="line229"></a>229 }
830
+ </span><span class="uncovered0"><a name="line230"></a>230 }
831
+ </span><span class="uncovered1"><a name="line231"></a>231 }
832
+ </span><span class="uncovered0"><a name="line232"></a>232 }
833
+ </span><span class="uncovered1"><a name="line233"></a>233 end
834
+ </span><span class="uncovered0"><a name="line234"></a>234 end
835
+ </span><span class="inferred1"><a name="line235"></a>235
836
+ </span><span class="marked0"><a name="line236"></a>236 include PPMethods
837
+ </span><span class="inferred1"><a name="line237"></a>237
838
+ </span><span class="marked0"><a name="line238"></a>238 class SingleLine &lt; PrettyPrint::SingleLine
839
+ </span><span class="marked1"><a name="line239"></a>239 include PPMethods
840
+ </span><span class="inferred0"><a name="line240"></a>240 end
841
+ </span><span class="inferred1"><a name="line241"></a>241
842
+ </span><span class="marked0"><a name="line242"></a>242 module ObjectMixin
843
+ </span><span class="inferred1"><a name="line243"></a>243 # 1. specific pretty_print
844
+ </span><span class="inferred0"><a name="line244"></a>244 # 2. specific inspect
845
+ </span><span class="inferred1"><a name="line245"></a>245 # 3. specific to_s if instance variable is empty
846
+ </span><span class="inferred0"><a name="line246"></a>246 # 4. generic pretty_print
847
+ </span><span class="inferred1"><a name="line247"></a>247
848
+ </span><span class="inferred0"><a name="line248"></a>248 # A default pretty printing method for general objects.
849
+ </span><span class="inferred1"><a name="line249"></a>249 # It calls #pretty_print_instance_variables to list instance variables.
850
+ </span><span class="inferred0"><a name="line250"></a>250 #
851
+ </span><span class="inferred1"><a name="line251"></a>251 # If +self+ has a customized (redefined) #inspect method,
852
+ </span><span class="inferred0"><a name="line252"></a>252 # the result of self.inspect is used but it obviously has no
853
+ </span><span class="inferred1"><a name="line253"></a>253 # line break hints.
854
+ </span><span class="inferred0"><a name="line254"></a>254 #
855
+ </span><span class="inferred1"><a name="line255"></a>255 # This module provides predefined #pretty_print methods for some of
856
+ </span><span class="inferred0"><a name="line256"></a>256 # the most commonly used built-in classes for convenience.
857
+ </span><span class="marked1"><a name="line257"></a>257 def pretty_print(q)
858
+ </span><span class="uncovered0"><a name="line258"></a>258 if /\(Kernel\)#/ !~ method(:inspect).inspect
859
+ </span><span class="uncovered1"><a name="line259"></a>259 q.text self.inspect
860
+ </span><span class="uncovered0"><a name="line260"></a>260 elsif /\(Kernel\)#/ !~ method(:to_s).inspect &amp;&amp; instance_variables.empty?
861
+ </span><span class="uncovered1"><a name="line261"></a>261 q.text self.to_s
862
+ </span><span class="uncovered0"><a name="line262"></a>262 else
863
+ </span><span class="uncovered1"><a name="line263"></a>263 q.pp_object(self)
864
+ </span><span class="uncovered0"><a name="line264"></a>264 end
865
+ </span><span class="uncovered1"><a name="line265"></a>265 end
866
+ </span><span class="inferred0"><a name="line266"></a>266
867
+ </span><span class="inferred1"><a name="line267"></a>267 # A default pretty printing method for general objects that are
868
+ </span><span class="inferred0"><a name="line268"></a>268 # detected as part of a cycle.
869
+ </span><span class="marked1"><a name="line269"></a>269 def pretty_print_cycle(q)
870
+ </span><span class="uncovered0"><a name="line270"></a>270 q.object_address_group(self) {
871
+ </span><span class="uncovered1"><a name="line271"></a>271 q.breakable
872
+ </span><span class="uncovered0"><a name="line272"></a>272 q.text '...'
873
+ </span><span class="uncovered1"><a name="line273"></a>273 }
874
+ </span><span class="uncovered0"><a name="line274"></a>274 end
875
+ </span><span class="inferred1"><a name="line275"></a>275
876
+ </span><span class="inferred0"><a name="line276"></a>276 # Returns a sorted array of instance variable names.
877
+ </span><span class="inferred1"><a name="line277"></a>277 #
878
+ </span><span class="inferred0"><a name="line278"></a>278 # This method should return an array of names of instance variables as symbols or strings as:
879
+ </span><span class="inferred1"><a name="line279"></a>279 # +[:@a, :@b]+.
880
+ </span><span class="marked0"><a name="line280"></a>280 def pretty_print_instance_variables
881
+ </span><span class="uncovered1"><a name="line281"></a>281 instance_variables.sort
882
+ </span><span class="uncovered0"><a name="line282"></a>282 end
883
+ </span><span class="inferred1"><a name="line283"></a>283
884
+ </span><span class="inferred0"><a name="line284"></a>284 # Is #inspect implementation using #pretty_print.
885
+ </span><span class="inferred1"><a name="line285"></a>285 # If you implement #pretty_print, it can be used as follows.
886
+ </span><span class="inferred0"><a name="line286"></a>286 #
887
+ </span><span class="inferred1"><a name="line287"></a>287 # alias inspect pretty_print_inspect
888
+ </span><span class="inferred0"><a name="line288"></a>288 #
889
+ </span><span class="inferred1"><a name="line289"></a>289 # However, doing this requires that every class that #inspect is called on
890
+ </span><span class="inferred0"><a name="line290"></a>290 # implement #pretty_print, or a RuntimeError will be raised.
891
+ </span><span class="marked1"><a name="line291"></a>291 def pretty_print_inspect
892
+ </span><span class="uncovered0"><a name="line292"></a>292 if /\(PP::ObjectMixin\)#/ =~ method(:pretty_print).inspect
893
+ </span><span class="uncovered1"><a name="line293"></a>293 raise &quot;pretty_print is not overridden for #{self.class}&quot;
894
+ </span><span class="uncovered0"><a name="line294"></a>294 end
895
+ </span><span class="uncovered1"><a name="line295"></a>295 PP.singleline_pp(self, '')
896
+ </span><span class="uncovered0"><a name="line296"></a>296 end
897
+ </span><span class="uncovered1"><a name="line297"></a>297 end
898
+ </span><span class="uncovered0"><a name="line298"></a>298 end
899
+ </span><span class="inferred1"><a name="line299"></a>299
900
+ </span><span class="marked0"><a name="line300"></a>300 class Array
901
+ </span><span class="marked1"><a name="line301"></a>301 def pretty_print(q)
902
+ </span><span class="uncovered0"><a name="line302"></a>302 q.group(1, '[', ']') {
903
+ </span><span class="uncovered1"><a name="line303"></a>303 q.seplist(self) {|v|
904
+ </span><span class="uncovered0"><a name="line304"></a>304 q.pp v
905
+ </span><span class="uncovered1"><a name="line305"></a>305 }
906
+ </span><span class="uncovered0"><a name="line306"></a>306 }
907
+ </span><span class="uncovered1"><a name="line307"></a>307 end
908
+ </span><span class="inferred0"><a name="line308"></a>308
909
+ </span><span class="marked1"><a name="line309"></a>309 def pretty_print_cycle(q)
910
+ </span><span class="uncovered0"><a name="line310"></a>310 q.text(empty? ? '[]' : '[...]')
911
+ </span><span class="uncovered1"><a name="line311"></a>311 end
912
+ </span><span class="uncovered0"><a name="line312"></a>312 end
913
+ </span><span class="inferred1"><a name="line313"></a>313
914
+ </span><span class="marked0"><a name="line314"></a>314 class Hash
915
+ </span><span class="marked1"><a name="line315"></a>315 def pretty_print(q)
916
+ </span><span class="uncovered0"><a name="line316"></a>316 q.pp_hash self
917
+ </span><span class="uncovered1"><a name="line317"></a>317 end
918
+ </span><span class="inferred0"><a name="line318"></a>318
919
+ </span><span class="marked1"><a name="line319"></a>319 def pretty_print_cycle(q)
920
+ </span><span class="uncovered0"><a name="line320"></a>320 q.text(empty? ? '{}' : '{...}')
921
+ </span><span class="uncovered1"><a name="line321"></a>321 end
922
+ </span><span class="uncovered0"><a name="line322"></a>322 end
923
+ </span><span class="inferred1"><a name="line323"></a>323
924
+ </span><span class="marked0"><a name="line324"></a>324 class &lt;&lt; ENV
925
+ </span><span class="marked1"><a name="line325"></a>325 def pretty_print(q)
926
+ </span><span class="uncovered0"><a name="line326"></a>326 q.pp_hash self
927
+ </span><span class="uncovered1"><a name="line327"></a>327 end
928
+ </span><span class="uncovered0"><a name="line328"></a>328 end
929
+ </span><span class="inferred1"><a name="line329"></a>329
930
+ </span><span class="marked0"><a name="line330"></a>330 class Struct
931
+ </span><span class="marked1"><a name="line331"></a>331 def pretty_print(q)
932
+ </span><span class="uncovered0"><a name="line332"></a>332 q.group(1, '#&lt;struct ' + PP.mcall(self, Kernel, :class).name, '&gt;') {
933
+ </span><span class="uncovered1"><a name="line333"></a>333 q.seplist(PP.mcall(self, Struct, :members), lambda { q.text &quot;,&quot; }) {|member|
934
+ </span><span class="uncovered0"><a name="line334"></a>334 q.breakable
935
+ </span><span class="uncovered1"><a name="line335"></a>335 q.text member.to_s
936
+ </span><span class="uncovered0"><a name="line336"></a>336 q.text '='
937
+ </span><span class="uncovered1"><a name="line337"></a>337 q.group(1) {
938
+ </span><span class="uncovered0"><a name="line338"></a>338 q.breakable ''
939
+ </span><span class="uncovered1"><a name="line339"></a>339 q.pp self[member]
940
+ </span><span class="uncovered0"><a name="line340"></a>340 }
941
+ </span><span class="uncovered1"><a name="line341"></a>341 }
942
+ </span><span class="uncovered0"><a name="line342"></a>342 }
943
+ </span><span class="uncovered1"><a name="line343"></a>343 end
944
+ </span><span class="inferred0"><a name="line344"></a>344
945
+ </span><span class="marked1"><a name="line345"></a>345 def pretty_print_cycle(q)
946
+ </span><span class="uncovered0"><a name="line346"></a>346 q.text sprintf(&quot;#&lt;struct %s:...&gt;&quot;, PP.mcall(self, Kernel, :class).name)
947
+ </span><span class="uncovered1"><a name="line347"></a>347 end
948
+ </span><span class="uncovered0"><a name="line348"></a>348 end
949
+ </span><span class="inferred1"><a name="line349"></a>349
950
+ </span><span class="marked0"><a name="line350"></a>350 class Range
951
+ </span><span class="marked1"><a name="line351"></a>351 def pretty_print(q)
952
+ </span><span class="uncovered0"><a name="line352"></a>352 q.pp self.begin
953
+ </span><span class="uncovered1"><a name="line353"></a>353 q.breakable ''
954
+ </span><span class="uncovered0"><a name="line354"></a>354 q.text(self.exclude_end? ? '...' : '..')
955
+ </span><span class="uncovered1"><a name="line355"></a>355 q.breakable ''
956
+ </span><span class="uncovered0"><a name="line356"></a>356 q.pp self.end
957
+ </span><span class="uncovered1"><a name="line357"></a>357 end
958
+ </span><span class="uncovered0"><a name="line358"></a>358 end
959
+ </span><span class="inferred1"><a name="line359"></a>359
960
+ </span><span class="marked0"><a name="line360"></a>360 class File
961
+ </span><span class="marked1"><a name="line361"></a>361 class Stat
962
+ </span><span class="marked0"><a name="line362"></a>362 def pretty_print(q)
963
+ </span><span class="uncovered1"><a name="line363"></a>363 require 'etc.so'
964
+ </span><span class="uncovered0"><a name="line364"></a>364 q.object_group(self) {
965
+ </span><span class="uncovered1"><a name="line365"></a>365 q.breakable
966
+ </span><span class="uncovered0"><a name="line366"></a>366 q.text sprintf(&quot;dev=0x%x&quot;, self.dev); q.comma_breakable
967
+ </span><span class="uncovered1"><a name="line367"></a>367 q.text &quot;ino=&quot;; q.pp self.ino; q.comma_breakable
968
+ </span><span class="uncovered0"><a name="line368"></a>368 q.group {
969
+ </span><span class="uncovered1"><a name="line369"></a>369 m = self.mode
970
+ </span><span class="uncovered0"><a name="line370"></a>370 q.text sprintf(&quot;mode=0%o&quot;, m)
971
+ </span><span class="uncovered1"><a name="line371"></a>371 q.breakable
972
+ </span><span class="uncovered0"><a name="line372"></a>372 q.text sprintf(&quot;(%s %c%c%c%c%c%c%c%c%c)&quot;,
973
+ </span><span class="uncovered1"><a name="line373"></a>373 self.ftype,
974
+ </span><span class="uncovered0"><a name="line374"></a>374 (m &amp; 0400 == 0 ? ?- : ?r),
975
+ </span><span class="uncovered1"><a name="line375"></a>375 (m &amp; 0200 == 0 ? ?- : ?w),
976
+ </span><span class="uncovered0"><a name="line376"></a>376 (m &amp; 0100 == 0 ? (m &amp; 04000 == 0 ? ?- : ?S) :
977
+ </span><span class="uncovered1"><a name="line377"></a>377 (m &amp; 04000 == 0 ? ?x : ?s)),
978
+ </span><span class="uncovered0"><a name="line378"></a>378 (m &amp; 0040 == 0 ? ?- : ?r),
979
+ </span><span class="uncovered1"><a name="line379"></a>379 (m &amp; 0020 == 0 ? ?- : ?w),
980
+ </span><span class="uncovered0"><a name="line380"></a>380 (m &amp; 0010 == 0 ? (m &amp; 02000 == 0 ? ?- : ?S) :
981
+ </span><span class="uncovered1"><a name="line381"></a>381 (m &amp; 02000 == 0 ? ?x : ?s)),
982
+ </span><span class="uncovered0"><a name="line382"></a>382 (m &amp; 0004 == 0 ? ?- : ?r),
983
+ </span><span class="uncovered1"><a name="line383"></a>383 (m &amp; 0002 == 0 ? ?- : ?w),
984
+ </span><span class="uncovered0"><a name="line384"></a>384 (m &amp; 0001 == 0 ? (m &amp; 01000 == 0 ? ?- : ?T) :
985
+ </span><span class="uncovered1"><a name="line385"></a>385 (m &amp; 01000 == 0 ? ?x : ?t)))
986
+ </span><span class="uncovered0"><a name="line386"></a>386 }
987
+ </span><span class="uncovered1"><a name="line387"></a>387 q.comma_breakable
988
+ </span><span class="uncovered0"><a name="line388"></a>388 q.text &quot;nlink=&quot;; q.pp self.nlink; q.comma_breakable
989
+ </span><span class="uncovered1"><a name="line389"></a>389 q.group {
990
+ </span><span class="uncovered0"><a name="line390"></a>390 q.text &quot;uid=&quot;; q.pp self.uid
991
+ </span><span class="uncovered1"><a name="line391"></a>391 begin
992
+ </span><span class="uncovered0"><a name="line392"></a>392 pw = Etc.getpwuid(self.uid)
993
+ </span><span class="uncovered1"><a name="line393"></a>393 rescue ArgumentError
994
+ </span><span class="uncovered0"><a name="line394"></a>394 end
995
+ </span><span class="uncovered1"><a name="line395"></a>395 if pw
996
+ </span><span class="uncovered0"><a name="line396"></a>396 q.breakable; q.text &quot;(#{pw.name})&quot;
997
+ </span><span class="uncovered1"><a name="line397"></a>397 end
998
+ </span><span class="uncovered0"><a name="line398"></a>398 }
999
+ </span><span class="uncovered1"><a name="line399"></a>399 q.comma_breakable
1000
+ </span><span class="uncovered0"><a name="line400"></a>400 q.group {
1001
+ </span><span class="uncovered1"><a name="line401"></a>401 q.text &quot;gid=&quot;; q.pp self.gid
1002
+ </span><span class="uncovered0"><a name="line402"></a>402 begin
1003
+ </span><span class="uncovered1"><a name="line403"></a>403 gr = Etc.getgrgid(self.gid)
1004
+ </span><span class="uncovered0"><a name="line404"></a>404 rescue ArgumentError
1005
+ </span><span class="uncovered1"><a name="line405"></a>405 end
1006
+ </span><span class="uncovered0"><a name="line406"></a>406 if gr
1007
+ </span><span class="uncovered1"><a name="line407"></a>407 q.breakable; q.text &quot;(#{gr.name})&quot;
1008
+ </span><span class="uncovered0"><a name="line408"></a>408 end
1009
+ </span><span class="uncovered1"><a name="line409"></a>409 }
1010
+ </span><span class="uncovered0"><a name="line410"></a>410 q.comma_breakable
1011
+ </span><span class="uncovered1"><a name="line411"></a>411 q.group {
1012
+ </span><span class="uncovered0"><a name="line412"></a>412 q.text sprintf(&quot;rdev=0x%x&quot;, self.rdev)
1013
+ </span><span class="uncovered1"><a name="line413"></a>413 q.breakable
1014
+ </span><span class="uncovered0"><a name="line414"></a>414 q.text sprintf('(%d, %d)', self.rdev_major, self.rdev_minor)
1015
+ </span><span class="uncovered1"><a name="line415"></a>415 }
1016
+ </span><span class="uncovered0"><a name="line416"></a>416 q.comma_breakable
1017
+ </span><span class="uncovered1"><a name="line417"></a>417 q.text &quot;size=&quot;; q.pp self.size; q.comma_breakable
1018
+ </span><span class="uncovered0"><a name="line418"></a>418 q.text &quot;blksize=&quot;; q.pp self.blksize; q.comma_breakable
1019
+ </span><span class="uncovered1"><a name="line419"></a>419 q.text &quot;blocks=&quot;; q.pp self.blocks; q.comma_breakable
1020
+ </span><span class="uncovered0"><a name="line420"></a>420 q.group {
1021
+ </span><span class="uncovered1"><a name="line421"></a>421 t = self.atime
1022
+ </span><span class="uncovered0"><a name="line422"></a>422 q.text &quot;atime=&quot;; q.pp t
1023
+ </span><span class="uncovered1"><a name="line423"></a>423 q.breakable; q.text &quot;(#{t.tv_sec})&quot;
1024
+ </span><span class="uncovered0"><a name="line424"></a>424 }
1025
+ </span><span class="uncovered1"><a name="line425"></a>425 q.comma_breakable
1026
+ </span><span class="uncovered0"><a name="line426"></a>426 q.group {
1027
+ </span><span class="uncovered1"><a name="line427"></a>427 t = self.mtime
1028
+ </span><span class="uncovered0"><a name="line428"></a>428 q.text &quot;mtime=&quot;; q.pp t
1029
+ </span><span class="uncovered1"><a name="line429"></a>429 q.breakable; q.text &quot;(#{t.tv_sec})&quot;
1030
+ </span><span class="uncovered0"><a name="line430"></a>430 }
1031
+ </span><span class="uncovered1"><a name="line431"></a>431 q.comma_breakable
1032
+ </span><span class="uncovered0"><a name="line432"></a>432 q.group {
1033
+ </span><span class="uncovered1"><a name="line433"></a>433 t = self.ctime
1034
+ </span><span class="uncovered0"><a name="line434"></a>434 q.text &quot;ctime=&quot;; q.pp t
1035
+ </span><span class="uncovered1"><a name="line435"></a>435 q.breakable; q.text &quot;(#{t.tv_sec})&quot;
1036
+ </span><span class="uncovered0"><a name="line436"></a>436 }
1037
+ </span><span class="uncovered1"><a name="line437"></a>437 }
1038
+ </span><span class="uncovered0"><a name="line438"></a>438 end
1039
+ </span><span class="uncovered1"><a name="line439"></a>439 end
1040
+ </span><span class="uncovered0"><a name="line440"></a>440 end
1041
+ </span><span class="inferred1"><a name="line441"></a>441
1042
+ </span><span class="marked0"><a name="line442"></a>442 class MatchData
1043
+ </span><span class="marked1"><a name="line443"></a>443 def pretty_print(q)
1044
+ </span><span class="uncovered0"><a name="line444"></a>444 q.object_group(self) {
1045
+ </span><span class="uncovered1"><a name="line445"></a>445 q.breakable
1046
+ </span><span class="uncovered0"><a name="line446"></a>446 q.seplist(1..self.size, lambda { q.breakable }) {|i|
1047
+ </span><span class="uncovered1"><a name="line447"></a>447 q.pp self[i-1]
1048
+ </span><span class="uncovered0"><a name="line448"></a>448 }
1049
+ </span><span class="uncovered1"><a name="line449"></a>449 }
1050
+ </span><span class="uncovered0"><a name="line450"></a>450 end
1051
+ </span><span class="uncovered1"><a name="line451"></a>451 end
1052
+ </span><span class="inferred0"><a name="line452"></a>452
1053
+ </span><span class="marked1"><a name="line453"></a>453 class Object
1054
+ </span><span class="marked0"><a name="line454"></a>454 include PP::ObjectMixin
1055
+ </span><span class="inferred1"><a name="line455"></a>455 end
1056
+ </span><span class="inferred0"><a name="line456"></a>456
1057
+ </span><span class="marked1"><a name="line457"></a>457 [Numeric, Symbol, FalseClass, TrueClass, NilClass, Module].each {|c|
1058
+ </span><span class="marked0"><a name="line458"></a>458 c.class_eval {
1059
+ </span><span class="marked1"><a name="line459"></a>459 def pretty_print_cycle(q)
1060
+ </span><span class="uncovered0"><a name="line460"></a>460 q.text inspect
1061
+ </span><span class="uncovered1"><a name="line461"></a>461 end
1062
+ </span><span class="uncovered0"><a name="line462"></a>462 }
1063
+ </span><span class="uncovered1"><a name="line463"></a>463 }
1064
+ </span><span class="inferred0"><a name="line464"></a>464
1065
+ </span><span class="marked1"><a name="line465"></a>465 [Numeric, FalseClass, TrueClass, Module].each {|c|
1066
+ </span><span class="marked0"><a name="line466"></a>466 c.class_eval {
1067
+ </span><span class="marked1"><a name="line467"></a>467 def pretty_print(q)
1068
+ </span><span class="uncovered0"><a name="line468"></a>468 q.text inspect
1069
+ </span><span class="uncovered1"><a name="line469"></a>469 end
1070
+ </span><span class="uncovered0"><a name="line470"></a>470 }
1071
+ </span><span class="uncovered1"><a name="line471"></a>471 }
1072
+ </span><span class="inferred0"><a name="line472"></a>472
1073
+ </span><span class="inferred1"><a name="line473"></a>473 # :enddoc:
1074
+ </span><span class="marked0"><a name="line474"></a>474 if __FILE__ == $0
1075
+ </span><span class="uncovered1"><a name="line475"></a>475 require 'test/unit'
1076
+ </span><span class="uncovered0"><a name="line476"></a>476
1077
+ </span><span class="uncovered1"><a name="line477"></a>477 class PPTest &lt; Test::Unit::TestCase
1078
+ </span><span class="uncovered0"><a name="line478"></a>478 def test_list0123_12
1079
+ </span><span class="uncovered1"><a name="line479"></a>479 assert_equal(&quot;[0, 1, 2, 3]\n&quot;, PP.pp([0,1,2,3], '', 12))
1080
+ </span><span class="uncovered0"><a name="line480"></a>480 end
1081
+ </span><span class="uncovered1"><a name="line481"></a>481
1082
+ </span><span class="uncovered0"><a name="line482"></a>482 def test_list0123_11
1083
+ </span><span class="uncovered1"><a name="line483"></a>483 assert_equal(&quot;[0,\n 1,\n 2,\n 3]\n&quot;, PP.pp([0,1,2,3], '', 11))
1084
+ </span><span class="uncovered0"><a name="line484"></a>484 end
1085
+ </span><span class="uncovered1"><a name="line485"></a>485
1086
+ </span><span class="uncovered0"><a name="line486"></a>486 OverriddenStruct = Struct.new(&quot;OverriddenStruct&quot;, :members, :class)
1087
+ </span><span class="uncovered1"><a name="line487"></a>487 def test_struct_override_members # [ruby-core:7865]
1088
+ </span><span class="uncovered0"><a name="line488"></a>488 a = OverriddenStruct.new(1,2)
1089
+ </span><span class="uncovered1"><a name="line489"></a>489 assert_equal(&quot;#&lt;struct Struct::OverriddenStruct members=1, class=2&gt;\n&quot;, PP.pp(a, ''))
1090
+ </span><span class="uncovered0"><a name="line490"></a>490 end
1091
+ </span><span class="uncovered1"><a name="line491"></a>491 end
1092
+ </span><span class="uncovered0"><a name="line492"></a>492
1093
+ </span><span class="uncovered1"><a name="line493"></a>493 class HasInspect
1094
+ </span><span class="uncovered0"><a name="line494"></a>494 def initialize(a)
1095
+ </span><span class="uncovered1"><a name="line495"></a>495 @a = a
1096
+ </span><span class="uncovered0"><a name="line496"></a>496 end
1097
+ </span><span class="uncovered1"><a name="line497"></a>497
1098
+ </span><span class="uncovered0"><a name="line498"></a>498 def inspect
1099
+ </span><span class="uncovered1"><a name="line499"></a>499 return &quot;&lt;inspect:#{@a.inspect}&gt;&quot;
1100
+ </span><span class="uncovered0"><a name="line500"></a>500 end
1101
+ </span><span class="uncovered1"><a name="line501"></a>501 end
1102
+ </span><span class="uncovered0"><a name="line502"></a>502
1103
+ </span><span class="uncovered1"><a name="line503"></a>503 class HasPrettyPrint
1104
+ </span><span class="uncovered0"><a name="line504"></a>504 def initialize(a)
1105
+ </span><span class="uncovered1"><a name="line505"></a>505 @a = a
1106
+ </span><span class="uncovered0"><a name="line506"></a>506 end
1107
+ </span><span class="uncovered1"><a name="line507"></a>507
1108
+ </span><span class="uncovered0"><a name="line508"></a>508 def pretty_print(q)
1109
+ </span><span class="uncovered1"><a name="line509"></a>509 q.text &quot;&lt;pretty_print:&quot;
1110
+ </span><span class="uncovered0"><a name="line510"></a>510 q.pp @a
1111
+ </span><span class="uncovered1"><a name="line511"></a>511 q.text &quot;&gt;&quot;
1112
+ </span><span class="uncovered0"><a name="line512"></a>512 end
1113
+ </span><span class="uncovered1"><a name="line513"></a>513 end
1114
+ </span><span class="uncovered0"><a name="line514"></a>514
1115
+ </span><span class="uncovered1"><a name="line515"></a>515 class HasBoth
1116
+ </span><span class="uncovered0"><a name="line516"></a>516 def initialize(a)
1117
+ </span><span class="uncovered1"><a name="line517"></a>517 @a = a
1118
+ </span><span class="uncovered0"><a name="line518"></a>518 end
1119
+ </span><span class="uncovered1"><a name="line519"></a>519
1120
+ </span><span class="uncovered0"><a name="line520"></a>520 def inspect
1121
+ </span><span class="uncovered1"><a name="line521"></a>521 return &quot;&lt;inspect:#{@a.inspect}&gt;&quot;
1122
+ </span><span class="uncovered0"><a name="line522"></a>522 end
1123
+ </span><span class="uncovered1"><a name="line523"></a>523
1124
+ </span><span class="uncovered0"><a name="line524"></a>524 def pretty_print(q)
1125
+ </span><span class="uncovered1"><a name="line525"></a>525 q.text &quot;&lt;pretty_print:&quot;
1126
+ </span><span class="uncovered0"><a name="line526"></a>526 q.pp @a
1127
+ </span><span class="uncovered1"><a name="line527"></a>527 q.text &quot;&gt;&quot;
1128
+ </span><span class="uncovered0"><a name="line528"></a>528 end
1129
+ </span><span class="uncovered1"><a name="line529"></a>529 end
1130
+ </span><span class="uncovered0"><a name="line530"></a>530
1131
+ </span><span class="uncovered1"><a name="line531"></a>531 class PrettyPrintInspect &lt; HasPrettyPrint
1132
+ </span><span class="uncovered0"><a name="line532"></a>532 alias inspect pretty_print_inspect
1133
+ </span><span class="uncovered1"><a name="line533"></a>533 end
1134
+ </span><span class="uncovered0"><a name="line534"></a>534
1135
+ </span><span class="uncovered1"><a name="line535"></a>535 class PrettyPrintInspectWithoutPrettyPrint
1136
+ </span><span class="uncovered0"><a name="line536"></a>536 alias inspect pretty_print_inspect
1137
+ </span><span class="uncovered1"><a name="line537"></a>537 end
1138
+ </span><span class="uncovered0"><a name="line538"></a>538
1139
+ </span><span class="uncovered1"><a name="line539"></a>539 class PPInspectTest &lt; Test::Unit::TestCase
1140
+ </span><span class="uncovered0"><a name="line540"></a>540 def test_hasinspect
1141
+ </span><span class="uncovered1"><a name="line541"></a>541 a = HasInspect.new(1)
1142
+ </span><span class="uncovered0"><a name="line542"></a>542 assert_equal(&quot;&lt;inspect:1&gt;\n&quot;, PP.pp(a, ''))
1143
+ </span><span class="uncovered1"><a name="line543"></a>543 end
1144
+ </span><span class="uncovered0"><a name="line544"></a>544
1145
+ </span><span class="uncovered1"><a name="line545"></a>545 def test_hasprettyprint
1146
+ </span><span class="uncovered0"><a name="line546"></a>546 a = HasPrettyPrint.new(1)
1147
+ </span><span class="uncovered1"><a name="line547"></a>547 assert_equal(&quot;&lt;pretty_print:1&gt;\n&quot;, PP.pp(a, ''))
1148
+ </span><span class="uncovered0"><a name="line548"></a>548 end
1149
+ </span><span class="uncovered1"><a name="line549"></a>549
1150
+ </span><span class="uncovered0"><a name="line550"></a>550 def test_hasboth
1151
+ </span><span class="uncovered1"><a name="line551"></a>551 a = HasBoth.new(1)
1152
+ </span><span class="uncovered0"><a name="line552"></a>552 assert_equal(&quot;&lt;pretty_print:1&gt;\n&quot;, PP.pp(a, ''))
1153
+ </span><span class="uncovered1"><a name="line553"></a>553 end
1154
+ </span><span class="uncovered0"><a name="line554"></a>554
1155
+ </span><span class="uncovered1"><a name="line555"></a>555 def test_pretty_print_inspect
1156
+ </span><span class="uncovered0"><a name="line556"></a>556 a = PrettyPrintInspect.new(1)
1157
+ </span><span class="uncovered1"><a name="line557"></a>557 assert_equal(&quot;&lt;pretty_print:1&gt;&quot;, a.inspect)
1158
+ </span><span class="uncovered0"><a name="line558"></a>558 a = PrettyPrintInspectWithoutPrettyPrint.new
1159
+ </span><span class="uncovered1"><a name="line559"></a>559 assert_raise(RuntimeError) { a.inspect }
1160
+ </span><span class="uncovered0"><a name="line560"></a>560 end
1161
+ </span><span class="uncovered1"><a name="line561"></a>561
1162
+ </span><span class="uncovered0"><a name="line562"></a>562 def test_proc
1163
+ </span><span class="uncovered1"><a name="line563"></a>563 a = proc {1}
1164
+ </span><span class="uncovered0"><a name="line564"></a>564 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1165
+ </span><span class="uncovered1"><a name="line565"></a>565 end
1166
+ </span><span class="uncovered0"><a name="line566"></a>566
1167
+ </span><span class="uncovered1"><a name="line567"></a>567 def test_to_s_with_iv
1168
+ </span><span class="uncovered0"><a name="line568"></a>568 a = Object.new
1169
+ </span><span class="uncovered1"><a name="line569"></a>569 def a.to_s() &quot;aaa&quot; end
1170
+ </span><span class="uncovered0"><a name="line570"></a>570 a.instance_eval { @a = nil }
1171
+ </span><span class="uncovered1"><a name="line571"></a>571 result = PP.pp(a, '')
1172
+ </span><span class="uncovered0"><a name="line572"></a>572 assert_equal(&quot;#{a.inspect}\n&quot;, result)
1173
+ </span><span class="uncovered1"><a name="line573"></a>573 assert_match(/\A#&lt;Object.*&gt;\n\z/m, result)
1174
+ </span><span class="uncovered0"><a name="line574"></a>574 a = 1.0
1175
+ </span><span class="uncovered1"><a name="line575"></a>575 a.instance_eval { @a = nil }
1176
+ </span><span class="uncovered0"><a name="line576"></a>576 result = PP.pp(a, '')
1177
+ </span><span class="uncovered1"><a name="line577"></a>577 assert_equal(&quot;#{a.inspect}\n&quot;, result)
1178
+ </span><span class="uncovered0"><a name="line578"></a>578 end
1179
+ </span><span class="uncovered1"><a name="line579"></a>579
1180
+ </span><span class="uncovered0"><a name="line580"></a>580 def test_to_s_without_iv
1181
+ </span><span class="uncovered1"><a name="line581"></a>581 a = Object.new
1182
+ </span><span class="uncovered0"><a name="line582"></a>582 def a.to_s() &quot;aaa&quot; end
1183
+ </span><span class="uncovered1"><a name="line583"></a>583 result = PP.pp(a, '')
1184
+ </span><span class="uncovered0"><a name="line584"></a>584 assert_equal(&quot;#{a.inspect}\n&quot;, result)
1185
+ </span><span class="uncovered1"><a name="line585"></a>585 assert_equal(&quot;aaa\n&quot;, result)
1186
+ </span><span class="uncovered0"><a name="line586"></a>586 end
1187
+ </span><span class="uncovered1"><a name="line587"></a>587 end
1188
+ </span><span class="uncovered0"><a name="line588"></a>588
1189
+ </span><span class="uncovered1"><a name="line589"></a>589 class PPCycleTest &lt; Test::Unit::TestCase
1190
+ </span><span class="uncovered0"><a name="line590"></a>590 def test_array
1191
+ </span><span class="uncovered1"><a name="line591"></a>591 a = []
1192
+ </span><span class="uncovered0"><a name="line592"></a>592 a &lt;&lt; a
1193
+ </span><span class="uncovered1"><a name="line593"></a>593 assert_equal(&quot;[[...]]\n&quot;, PP.pp(a, ''))
1194
+ </span><span class="uncovered0"><a name="line594"></a>594 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1195
+ </span><span class="uncovered1"><a name="line595"></a>595 end
1196
+ </span><span class="uncovered0"><a name="line596"></a>596
1197
+ </span><span class="uncovered1"><a name="line597"></a>597 def test_hash
1198
+ </span><span class="uncovered0"><a name="line598"></a>598 a = {}
1199
+ </span><span class="uncovered1"><a name="line599"></a>599 a[0] = a
1200
+ </span><span class="uncovered0"><a name="line600"></a>600 assert_equal(&quot;{0=&gt;{...}}\n&quot;, PP.pp(a, ''))
1201
+ </span><span class="uncovered1"><a name="line601"></a>601 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1202
+ </span><span class="uncovered0"><a name="line602"></a>602 end
1203
+ </span><span class="uncovered1"><a name="line603"></a>603
1204
+ </span><span class="uncovered0"><a name="line604"></a>604 S = Struct.new(&quot;S&quot;, :a, :b)
1205
+ </span><span class="uncovered1"><a name="line605"></a>605 def test_struct
1206
+ </span><span class="uncovered0"><a name="line606"></a>606 a = S.new(1,2)
1207
+ </span><span class="uncovered1"><a name="line607"></a>607 a.b = a
1208
+ </span><span class="uncovered0"><a name="line608"></a>608 assert_equal(&quot;#&lt;struct Struct::S a=1, b=#&lt;struct Struct::S:...&gt;&gt;\n&quot;, PP.pp(a, ''))
1209
+ </span><span class="uncovered1"><a name="line609"></a>609 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1210
+ </span><span class="uncovered0"><a name="line610"></a>610 end
1211
+ </span><span class="uncovered1"><a name="line611"></a>611
1212
+ </span><span class="uncovered0"><a name="line612"></a>612 def test_object
1213
+ </span><span class="uncovered1"><a name="line613"></a>613 a = Object.new
1214
+ </span><span class="uncovered0"><a name="line614"></a>614 a.instance_eval {@a = a}
1215
+ </span><span class="uncovered1"><a name="line615"></a>615 assert_equal(a.inspect + &quot;\n&quot;, PP.pp(a, ''))
1216
+ </span><span class="uncovered0"><a name="line616"></a>616 end
1217
+ </span><span class="uncovered1"><a name="line617"></a>617
1218
+ </span><span class="uncovered0"><a name="line618"></a>618 def test_anonymous
1219
+ </span><span class="uncovered1"><a name="line619"></a>619 a = Class.new.new
1220
+ </span><span class="uncovered0"><a name="line620"></a>620 assert_equal(a.inspect + &quot;\n&quot;, PP.pp(a, ''))
1221
+ </span><span class="uncovered1"><a name="line621"></a>621 end
1222
+ </span><span class="uncovered0"><a name="line622"></a>622
1223
+ </span><span class="uncovered1"><a name="line623"></a>623 def test_withinspect
1224
+ </span><span class="uncovered0"><a name="line624"></a>624 a = []
1225
+ </span><span class="uncovered1"><a name="line625"></a>625 a &lt;&lt; HasInspect.new(a)
1226
+ </span><span class="uncovered0"><a name="line626"></a>626 assert_equal(&quot;[&lt;inspect:[...]&gt;]\n&quot;, PP.pp(a, ''))
1227
+ </span><span class="uncovered1"><a name="line627"></a>627 assert_equal(&quot;#{a.inspect}\n&quot;, PP.pp(a, ''))
1228
+ </span><span class="uncovered0"><a name="line628"></a>628 end
1229
+ </span><span class="uncovered1"><a name="line629"></a>629
1230
+ </span><span class="uncovered0"><a name="line630"></a>630 def test_share_nil
1231
+ </span><span class="uncovered1"><a name="line631"></a>631 begin
1232
+ </span><span class="uncovered0"><a name="line632"></a>632 PP.sharing_detection = true
1233
+ </span><span class="uncovered1"><a name="line633"></a>633 a = [nil, nil]
1234
+ </span><span class="uncovered0"><a name="line634"></a>634 assert_equal(&quot;[nil, nil]\n&quot;, PP.pp(a, ''))
1235
+ </span><span class="uncovered1"><a name="line635"></a>635 ensure
1236
+ </span><span class="uncovered0"><a name="line636"></a>636 PP.sharing_detection = false
1237
+ </span><span class="uncovered1"><a name="line637"></a>637 end
1238
+ </span><span class="uncovered0"><a name="line638"></a>638 end
1239
+ </span><span class="uncovered1"><a name="line639"></a>639 end
1240
+ </span><span class="uncovered0"><a name="line640"></a>640
1241
+ </span><span class="uncovered1"><a name="line641"></a>641 class PPSingleLineTest &lt; Test::Unit::TestCase
1242
+ </span><span class="uncovered0"><a name="line642"></a>642 def test_hash
1243
+ </span><span class="uncovered1"><a name="line643"></a>643 assert_equal(&quot;{1=&gt;1}&quot;, PP.singleline_pp({ 1 =&gt; 1}, '')) # [ruby-core:02699]
1244
+ </span><span class="uncovered0"><a name="line644"></a>644 assert_equal(&quot;[1#{', 1'*99}]&quot;, PP.singleline_pp([1]*100, ''))
1245
+ </span><span class="uncovered1"><a name="line645"></a>645 end
1246
+ </span><span class="uncovered0"><a name="line646"></a>646 end
1247
+ </span><span class="uncovered1"><a name="line647"></a>647 end
1248
1248
  </span></pre><hr/>
1249
1249
  <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a>
1250
1250
  version 0.8.1.2.</p>