@@ -80,3 +80,153 @@ class TestAppendUIDData < Test::Unit::TestCase
8080 end
8181
8282end
83+
84+ class TestCopyUIDData < Test ::Unit ::TestCase
85+ # alias for convenience
86+ CopyUIDData = Net ::IMAP ::CopyUIDData
87+ SequenceSet = Net ::IMAP ::SequenceSet
88+ DataFormatError = Net ::IMAP ::DataFormatError
89+ UINT32_MAX = 2 **32 - 1
90+
91+ test "#uidvalidity must be valid nz-number" do
92+ assert_equal 1 , CopyUIDData . new ( 1 , 99 , 99 ) . uidvalidity
93+ assert_equal UINT32_MAX , CopyUIDData . new ( UINT32_MAX , 1 , 1 ) . uidvalidity
94+ assert_raise DataFormatError do CopyUIDData . new ( 0 , 1 , 1 ) end
95+ assert_raise DataFormatError do CopyUIDData . new ( 2 **32 , 1 , 1 ) end
96+ end
97+
98+ test "#source_uids must be valid uid-set" do
99+ assert_equal SequenceSet [ 1 ] , CopyUIDData . new ( 99 , "1" , 99 ) . source_uids
100+ assert_equal SequenceSet [ 5 ..8 ] , CopyUIDData . new ( 1 , 5 ..8 , 1 ..4 ) . source_uids
101+ assert_equal ( SequenceSet [ UINT32_MAX ] ,
102+ CopyUIDData . new ( 1 , UINT32_MAX . to_s , 1 ) . source_uids )
103+ assert_raise DataFormatError do CopyUIDData . new ( 99 , nil , 99 ) end
104+ assert_raise DataFormatError do CopyUIDData . new ( 1 , 0 , 1 ) end
105+ assert_raise DataFormatError do CopyUIDData . new ( 1 , "*" , 1 ) end
106+ end
107+
108+ test "#assigned_uids must be a valid uid-set" do
109+ assert_equal SequenceSet [ 1 ] , CopyUIDData . new ( 99 , 1 , "1" ) . assigned_uids
110+ assert_equal SequenceSet [ 1 ..9 ] , CopyUIDData . new ( 1 , 1 ..9 , "1:9" ) . assigned_uids
111+ assert_equal ( SequenceSet [ UINT32_MAX ] ,
112+ CopyUIDData . new ( 1 , 1 , UINT32_MAX . to_s ) . assigned_uids )
113+ assert_raise DataFormatError do CopyUIDData . new ( 1 , 1 , 0 ) end
114+ assert_raise DataFormatError do CopyUIDData . new ( 1 , 1 , "*" ) end
115+ assert_raise DataFormatError do CopyUIDData . new ( 1 , 1 , "1:*" ) end
116+ end
117+
118+ test "#size returns the number of UIDs" do
119+ assert_equal ( 10 , CopyUIDData . new ( 1 , "9,8,7,6,1:5,10" , "1:10" ) . size )
120+ assert_equal ( 4_000_000_000 ,
121+ CopyUIDData . new (
122+ 1 , "2000000000:4000000000,1:1999999999" , 1 ..4_000_000_000
123+ ) . size )
124+ end
125+
126+ test "#source_uids and #assigned_uids must be same size" do
127+ assert_raise DataFormatError do CopyUIDData . new ( 1 , 1 ..5 , 1 ) end
128+ assert_raise DataFormatError do CopyUIDData . new ( 1 , 1 , 1 ..5 ) end
129+ end
130+
131+ test "#source_uids is converted to SequenceSet" do
132+ assert_equal SequenceSet [ 1 ] , CopyUIDData . new ( 99 , "1" , 99 ) . source_uids
133+ assert_equal SequenceSet [ 5 , 6 , 7 , 8 ] , CopyUIDData . new ( 1 , 5 ..8 , 1 ..4 ) . source_uids
134+ end
135+
136+ test "#assigned_uids is converted to SequenceSet" do
137+ assert_equal SequenceSet [ 1 ] , CopyUIDData . new ( 99 , 1 , "1" ) . assigned_uids
138+ assert_equal SequenceSet [ 1 , 2 , 3 , 4 ] , CopyUIDData . new ( 1 , "1:4" , 1 ..4 ) . assigned_uids
139+ end
140+
141+ test "#uid_mapping maps source_uids to assigned_uids" do
142+ uidplus = CopyUIDData . new ( 9999 , "20:19,500:495" , "92:97,101:100" )
143+ assert_equal (
144+ {
145+ 19 => 92 ,
146+ 20 => 93 ,
147+ 495 => 94 ,
148+ 496 => 95 ,
149+ 497 => 96 ,
150+ 498 => 97 ,
151+ 499 => 100 ,
152+ 500 => 101 ,
153+ } ,
154+ uidplus . uid_mapping
155+ )
156+ end
157+
158+ test "#uid_mapping for with source_uids in unsorted order" do
159+ uidplus = CopyUIDData . new ( 1 , "495:500,20:19" , "92:97,101:100" )
160+ assert_equal (
161+ {
162+ 495 => 92 ,
163+ 496 => 93 ,
164+ 497 => 94 ,
165+ 498 => 95 ,
166+ 499 => 96 ,
167+ 500 => 97 ,
168+ 19 => 100 ,
169+ 20 => 101 ,
170+ } ,
171+ uidplus . uid_mapping
172+ )
173+ end
174+
175+ test "#assigned_uid_for(source_uid)" do
176+ uidplus = CopyUIDData . new ( 1 , "495:500,20:19" , "92:97,101:100" )
177+ assert_equal 92 , uidplus . assigned_uid_for ( 495 )
178+ assert_equal 93 , uidplus . assigned_uid_for ( 496 )
179+ assert_equal 94 , uidplus . assigned_uid_for ( 497 )
180+ assert_equal 95 , uidplus . assigned_uid_for ( 498 )
181+ assert_equal 96 , uidplus . assigned_uid_for ( 499 )
182+ assert_equal 97 , uidplus . assigned_uid_for ( 500 )
183+ assert_equal 100 , uidplus . assigned_uid_for ( 19 )
184+ assert_equal 101 , uidplus . assigned_uid_for ( 20 )
185+ end
186+
187+ test "#[](source_uid)" do
188+ uidplus = CopyUIDData . new ( 1 , "495:500,20:19" , "92:97,101:100" )
189+ assert_equal 92 , uidplus [ 495 ]
190+ assert_equal 93 , uidplus [ 496 ]
191+ assert_equal 94 , uidplus [ 497 ]
192+ assert_equal 95 , uidplus [ 498 ]
193+ assert_equal 96 , uidplus [ 499 ]
194+ assert_equal 97 , uidplus [ 500 ]
195+ assert_equal 100 , uidplus [ 19 ]
196+ assert_equal 101 , uidplus [ 20 ]
197+ end
198+
199+ test "#source_uid_for(assigned_uid)" do
200+ uidplus = CopyUIDData . new ( 1 , "495:500,20:19" , "92:97,101:100" )
201+ assert_equal 495 , uidplus . source_uid_for ( 92 )
202+ assert_equal 496 , uidplus . source_uid_for ( 93 )
203+ assert_equal 497 , uidplus . source_uid_for ( 94 )
204+ assert_equal 498 , uidplus . source_uid_for ( 95 )
205+ assert_equal 499 , uidplus . source_uid_for ( 96 )
206+ assert_equal 500 , uidplus . source_uid_for ( 97 )
207+ assert_equal 19 , uidplus . source_uid_for ( 100 )
208+ assert_equal 20 , uidplus . source_uid_for ( 101 )
209+ end
210+
211+ test "#each_uid_pair" do
212+ uidplus = CopyUIDData . new ( 1 , "495:500,20:19" , "92:97,101:100" )
213+ expected = {
214+ 495 => 92 ,
215+ 496 => 93 ,
216+ 497 => 94 ,
217+ 498 => 95 ,
218+ 499 => 96 ,
219+ 500 => 97 ,
220+ 19 => 100 ,
221+ 20 => 101 ,
222+ }
223+ actual = { }
224+ uidplus . each_uid_pair do |src , dst | actual [ src ] = dst end
225+ assert_equal expected , actual
226+ assert_equal expected , uidplus . each_uid_pair . to_h
227+ assert_equal expected . to_a , uidplus . each_uid_pair . to_a
228+ assert_equal expected , uidplus . each_pair . to_h
229+ assert_equal expected , uidplus . each . to_h
230+ end
231+
232+ end
0 commit comments