選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

RangeTest.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. /*
  2. * Copyright 2000-2013 Vaadin Ltd.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.vaadin.shared.ui.grid;
  17. import static org.junit.Assert.assertEquals;
  18. import static org.junit.Assert.assertTrue;
  19. import org.junit.Test;
  20. @SuppressWarnings("static-method")
  21. public class RangeTest {
  22. @Test(expected = IllegalArgumentException.class)
  23. public void startAfterEndTest() {
  24. Range.between(10, 9);
  25. }
  26. @Test(expected = IllegalArgumentException.class)
  27. public void negativeLengthTest() {
  28. Range.withLength(10, -1);
  29. }
  30. @Test
  31. public void constructorEquivalenceTest() {
  32. assertEquals("10 == [10,11[", Range.withOnly(10), Range.between(10, 11));
  33. assertEquals("[10,20[ == 10, length 10", Range.between(10, 20),
  34. Range.withLength(10, 10));
  35. assertEquals("10 == 10, length 1", Range.withOnly(10),
  36. Range.withLength(10, 1));
  37. }
  38. @Test
  39. public void boundsTest() {
  40. {
  41. final Range range = Range.between(0, 10);
  42. assertEquals("between(0, 10) start", 0, range.getStart());
  43. assertEquals("between(0, 10) end", 10, range.getEnd());
  44. }
  45. {
  46. final Range single = Range.withOnly(10);
  47. assertEquals("withOnly(10) start", 10, single.getStart());
  48. assertEquals("withOnly(10) end", 11, single.getEnd());
  49. }
  50. {
  51. final Range length = Range.withLength(10, 5);
  52. assertEquals("withLength(10, 5) start", 10, length.getStart());
  53. assertEquals("withLength(10, 5) end", 15, length.getEnd());
  54. }
  55. }
  56. @Test
  57. @SuppressWarnings("boxing")
  58. public void equalsTest() {
  59. final Range range1 = Range.between(0, 10);
  60. final Range range2 = Range.withLength(0, 11);
  61. assertTrue("null", !range1.equals(null));
  62. assertTrue("reflexive", range1.equals(range1));
  63. assertEquals("symmetric", range1.equals(range2), range2.equals(range1));
  64. }
  65. @Test
  66. public void containsTest() {
  67. final int start = 0;
  68. final int end = 10;
  69. final Range range = Range.between(start, end);
  70. assertTrue("start should be contained", range.contains(start));
  71. assertTrue("start-1 should not be contained",
  72. !range.contains(start - 1));
  73. assertTrue("end should not be contained", !range.contains(end));
  74. assertTrue("end-1 should be contained", range.contains(end - 1));
  75. assertTrue("[0..10[ contains 5", Range.between(0, 10).contains(5));
  76. assertTrue("empty range does not contain 5", !Range.between(5, 5)
  77. .contains(5));
  78. }
  79. @Test
  80. public void emptyTest() {
  81. assertTrue("[0..0[ should be empty", Range.between(0, 0).isEmpty());
  82. assertTrue("Range of length 0 should be empty", Range.withLength(0, 0)
  83. .isEmpty());
  84. assertTrue("[0..1[ should not be empty", !Range.between(0, 1).isEmpty());
  85. assertTrue("Range of length 1 should not be empty",
  86. !Range.withLength(0, 1).isEmpty());
  87. }
  88. @Test
  89. public void splitTest() {
  90. final Range startRange = Range.between(0, 10);
  91. final Range[] splitRanges = startRange.splitAt(5);
  92. assertEquals("[0..10[ split at 5, lower", Range.between(0, 5),
  93. splitRanges[0]);
  94. assertEquals("[0..10[ split at 5, upper", Range.between(5, 10),
  95. splitRanges[1]);
  96. }
  97. @Test
  98. public void split_valueBefore() {
  99. Range range = Range.between(10, 20);
  100. Range[] splitRanges = range.splitAt(5);
  101. assertEquals(Range.between(10, 10), splitRanges[0]);
  102. assertEquals(range, splitRanges[1]);
  103. }
  104. @Test
  105. public void split_valueAfter() {
  106. Range range = Range.between(10, 20);
  107. Range[] splitRanges = range.splitAt(25);
  108. assertEquals(range, splitRanges[0]);
  109. assertEquals(Range.between(20, 20), splitRanges[1]);
  110. }
  111. @Test
  112. public void emptySplitTest() {
  113. final Range range = Range.between(5, 10);
  114. final Range[] split1 = range.splitAt(0);
  115. assertTrue("split1, [0]", split1[0].isEmpty());
  116. assertEquals("split1, [1]", range, split1[1]);
  117. final Range[] split2 = range.splitAt(15);
  118. assertEquals("split2, [0]", range, split2[0]);
  119. assertTrue("split2, [1]", split2[1].isEmpty());
  120. }
  121. @Test
  122. public void lengthTest() {
  123. assertEquals("withLength length", 5, Range.withLength(10, 5).length());
  124. assertEquals("between length", 5, Range.between(10, 15).length());
  125. assertEquals("withOnly 10 length", 1, Range.withOnly(10).length());
  126. }
  127. @Test
  128. public void intersectsTest() {
  129. assertTrue("[0..10[ intersects [5..15[", Range.between(0, 10)
  130. .intersects(Range.between(5, 15)));
  131. assertTrue("[0..10[ does not intersect [10..20[", !Range.between(0, 10)
  132. .intersects(Range.between(10, 20)));
  133. }
  134. @Test
  135. public void intersects_emptyInside() {
  136. assertTrue("[5..5[ does intersect with [0..10[", Range.between(5, 5)
  137. .intersects(Range.between(0, 10)));
  138. assertTrue("[0..10[ does intersect with [5..5[", Range.between(0, 10)
  139. .intersects(Range.between(5, 5)));
  140. }
  141. @Test
  142. public void intersects_emptyOutside() {
  143. assertTrue("[15..15[ does not intersect with [0..10[",
  144. !Range.between(15, 15).intersects(Range.between(0, 10)));
  145. assertTrue("[0..10[ does not intersect with [15..15[",
  146. !Range.between(0, 10).intersects(Range.between(15, 15)));
  147. }
  148. @Test
  149. public void subsetTest() {
  150. assertTrue("[5..10[ is subset of [0..20[", Range.between(5, 10)
  151. .isSubsetOf(Range.between(0, 20)));
  152. final Range range = Range.between(0, 10);
  153. assertTrue("range is subset of self", range.isSubsetOf(range));
  154. assertTrue("[0..10[ is not subset of [5..15[", !Range.between(0, 10)
  155. .isSubsetOf(Range.between(5, 15)));
  156. }
  157. @Test
  158. public void offsetTest() {
  159. assertEquals(Range.between(5, 15), Range.between(0, 10).offsetBy(5));
  160. }
  161. @Test
  162. public void rangeStartsBeforeTest() {
  163. final Range former = Range.between(0, 5);
  164. final Range latter = Range.between(1, 5);
  165. assertTrue("former should starts before latter",
  166. former.startsBefore(latter));
  167. assertTrue("latter shouldn't start before latter",
  168. !latter.startsBefore(former));
  169. assertTrue("no overlap allowed",
  170. !Range.between(0, 5).startsBefore(Range.between(0, 10)));
  171. }
  172. @Test
  173. public void rangeStartsAfterTest() {
  174. final Range former = Range.between(0, 5);
  175. final Range latter = Range.between(5, 10);
  176. assertTrue("latter should start after former",
  177. latter.startsAfter(former));
  178. assertTrue("former shouldn't start after latter",
  179. !former.startsAfter(latter));
  180. assertTrue("no overlap allowed",
  181. !Range.between(5, 10).startsAfter(Range.between(0, 6)));
  182. }
  183. @Test
  184. public void rangeEndsBeforeTest() {
  185. final Range former = Range.between(0, 5);
  186. final Range latter = Range.between(5, 10);
  187. assertTrue("latter should end before former", former.endsBefore(latter));
  188. assertTrue("former shouldn't end before latter",
  189. !latter.endsBefore(former));
  190. assertTrue("no overlap allowed",
  191. !Range.between(5, 10).endsBefore(Range.between(9, 15)));
  192. }
  193. @Test
  194. public void rangeEndsAfterTest() {
  195. final Range former = Range.between(1, 5);
  196. final Range latter = Range.between(1, 6);
  197. assertTrue("latter should end after former", latter.endsAfter(former));
  198. assertTrue("former shouldn't end after latter",
  199. !former.endsAfter(latter));
  200. assertTrue("no overlap allowed",
  201. !Range.between(0, 10).endsAfter(Range.between(5, 10)));
  202. }
  203. @Test(expected = IllegalArgumentException.class)
  204. public void combine_notOverlappingFirstSmaller() {
  205. Range.between(0, 10).combineWith(Range.between(11, 20));
  206. }
  207. @Test(expected = IllegalArgumentException.class)
  208. public void combine_notOverlappingSecondLarger() {
  209. Range.between(11, 20).combineWith(Range.between(0, 10));
  210. }
  211. @Test(expected = IllegalArgumentException.class)
  212. public void combine_firstEmptyNotOverlapping() {
  213. Range.between(15, 15).combineWith(Range.between(0, 10));
  214. }
  215. @Test(expected = IllegalArgumentException.class)
  216. public void combine_secondEmptyNotOverlapping() {
  217. Range.between(0, 10).combineWith(Range.between(15, 15));
  218. }
  219. @Test
  220. public void combine_barelyOverlapping() {
  221. Range r1 = Range.between(0, 10);
  222. Range r2 = Range.between(10, 20);
  223. // Test both ways, should give the same result
  224. Range combined1 = r1.combineWith(r2);
  225. Range combined2 = r2.combineWith(r1);
  226. assertEquals(combined1, combined2);
  227. assertEquals(0, combined1.getStart());
  228. assertEquals(20, combined1.getEnd());
  229. }
  230. @Test
  231. public void combine_subRange() {
  232. Range r1 = Range.between(0, 10);
  233. Range r2 = Range.between(2, 8);
  234. // Test both ways, should give the same result
  235. Range combined1 = r1.combineWith(r2);
  236. Range combined2 = r2.combineWith(r1);
  237. assertEquals(combined1, combined2);
  238. assertEquals(r1, combined1);
  239. }
  240. @Test
  241. public void combine_intersecting() {
  242. Range r1 = Range.between(0, 10);
  243. Range r2 = Range.between(5, 15);
  244. // Test both ways, should give the same result
  245. Range combined1 = r1.combineWith(r2);
  246. Range combined2 = r2.combineWith(r1);
  247. assertEquals(combined1, combined2);
  248. assertEquals(0, combined1.getStart());
  249. assertEquals(15, combined1.getEnd());
  250. }
  251. @Test
  252. public void combine_emptyInside() {
  253. Range r1 = Range.between(0, 10);
  254. Range r2 = Range.between(5, 5);
  255. // Test both ways, should give the same result
  256. Range combined1 = r1.combineWith(r2);
  257. Range combined2 = r2.combineWith(r1);
  258. assertEquals(combined1, combined2);
  259. assertEquals(r1, combined1);
  260. }
  261. @Test
  262. public void expand_basic() {
  263. Range r1 = Range.between(5, 10);
  264. Range r2 = r1.expand(2, 3);
  265. assertEquals(Range.between(3, 13), r2);
  266. }
  267. @Test
  268. public void expand_negativeLegal() {
  269. Range r1 = Range.between(5, 10);
  270. Range r2 = r1.expand(-2, -2);
  271. assertEquals(Range.between(7, 8), r2);
  272. Range r3 = r1.expand(-3, -2);
  273. assertEquals(Range.between(8, 8), r3);
  274. Range r4 = r1.expand(3, -8);
  275. assertEquals(Range.between(2, 2), r4);
  276. }
  277. @Test(expected = IllegalArgumentException.class)
  278. public void expand_negativeIllegal1() {
  279. Range r1 = Range.between(5, 10);
  280. // Should throw because the start would contract beyond the end
  281. r1.expand(-3, -3);
  282. }
  283. @Test(expected = IllegalArgumentException.class)
  284. public void expand_negativeIllegal2() {
  285. Range r1 = Range.between(5, 10);
  286. // Should throw because the end would contract beyond the start
  287. r1.expand(3, -9);
  288. }
  289. @Test
  290. public void restrictTo_fullyInside() {
  291. Range r1 = Range.between(5, 10);
  292. Range r2 = Range.between(4, 11);
  293. Range r3 = r1.restrictTo(r2);
  294. assertTrue(r1 == r3);
  295. }
  296. @Test
  297. public void restrictTo_fullyOutside() {
  298. Range r1 = Range.between(4, 11);
  299. Range r2 = Range.between(5, 10);
  300. Range r3 = r1.restrictTo(r2);
  301. assertTrue(r2 == r3);
  302. }
  303. @Test
  304. public void restrictTo_notInterstecting() {
  305. Range r1 = Range.between(5, 10);
  306. Range r2 = Range.between(15, 20);
  307. Range r3 = r1.restrictTo(r2);
  308. assertTrue("Non-intersecting ranges should produce an empty result",
  309. r3.isEmpty());
  310. Range r4 = r2.restrictTo(r1);
  311. assertTrue("Non-intersecting ranges should produce an empty result",
  312. r4.isEmpty());
  313. }
  314. @Test
  315. public void restrictTo_startOutside() {
  316. Range r1 = Range.between(5, 10);
  317. Range r2 = Range.between(7, 15);
  318. Range r3 = r1.restrictTo(r2);
  319. assertEquals(Range.between(7, 10), r3);
  320. assertEquals(r2.restrictTo(r1), r3);
  321. }
  322. @Test
  323. public void restrictTo_endOutside() {
  324. Range r1 = Range.between(5, 10);
  325. Range r2 = Range.between(4, 7);
  326. Range r3 = r1.restrictTo(r2);
  327. assertEquals(Range.between(5, 7), r3);
  328. assertEquals(r2.restrictTo(r1), r3);
  329. }
  330. @Test
  331. public void restrictTo_empty() {
  332. Range r1 = Range.between(5, 10);
  333. Range r2 = Range.between(0, 0);
  334. Range r3 = r1.restrictTo(r2);
  335. assertTrue(r3.isEmpty());
  336. Range r4 = r2.restrictTo(r1);
  337. assertTrue(r4.isEmpty());
  338. }
  339. }