/Todo-txt-unit-tests/TaskTest.m

https://github.com/rhussmann/todo.txt-touch-ios · Objective C · 790 lines · 643 code · 77 blank · 70 comment · 1 complexity · 1cd5baaf216427b4a460e771dc8cc7ad MD5 · raw file

  1. /**
  2. * This file is part of Todo.txt, an iOS app for managing your todo.txt file.
  3. *
  4. * @author Todo.txt contributors <todotxt@yahoogroups.com>
  5. * @copyright 2011-2013 Todo.txt contributors (http://todotxt.com)
  6. *
  7. * Dual-licensed under the GNU General Public License and the MIT License
  8. *
  9. * @license GNU General Public License http://www.gnu.org/licenses/gpl.html
  10. *
  11. * Todo.txt is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
  12. * License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any
  13. * later version.
  14. *
  15. * Todo.txt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
  16. * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  17. * details.
  18. *
  19. * You should have received a copy of the GNU General Public License along with Todo.txt. If not, see
  20. * <http://www.gnu.org/licenses/>.
  21. *
  22. *
  23. * @license The MIT License http://www.opensource.org/licenses/mit-license.php
  24. *
  25. * Permission is hereby granted, free of charge, to any person obtaining
  26. * a copy of this software and associated documentation files (the
  27. * "Software"), to deal in the Software without restriction, including
  28. * without limitation the rights to use, copy, modify, merge, publish,
  29. * distribute, sublicense, and/or sell copies of the Software, and to
  30. * permit persons to whom the Software is furnished to do so, subject to
  31. * the following conditions:
  32. *
  33. * The above copyright notice and this permission notice shall be
  34. * included in all copies or substantial portions of the Software.
  35. *
  36. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  37. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  38. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  39. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  40. * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  41. * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  42. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  43. */
  44. #import "TaskTest.h"
  45. #import "Task.h"
  46. #import "Util.h"
  47. @implementation TaskTest
  48. - (void)testConstructor_simple
  49. {
  50. NSString *input = @"A Simple test with no curve balls";
  51. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  52. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  53. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  54. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  55. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  56. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  57. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  58. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  59. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  60. STAssertFalse(task.deleted, @"Task should not be deleted");
  61. STAssertFalse(task.completed, @"Task should not be completed");
  62. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  63. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  64. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  65. }
  66. - (void)testConstructor_simple_prependDate
  67. {
  68. NSString *input = @"A Simple test with no curve balls";
  69. NSDate *date = [Util dateFromString:@"20110228" withFormat:@"yyyyMMdd"];
  70. Task *task = [[[Task alloc] initWithId:1 withRawText:input withDefaultPrependedDate:date] autorelease];
  71. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  72. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  73. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  74. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  75. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  76. STAssertEqualObjects(@"2011-02-28", task.prependedDate, @"prependedDate should be 2011-11-28");
  77. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  78. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  79. STAssertFalse(task.deleted, @"Task should not be deleted");
  80. STAssertFalse(task.completed, @"Task should not be completed");
  81. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  82. STAssertEqualObjects(@"2011-02-28 A Simple test with no curve balls", task.inFileFormat, @"inFileFormat should be \"2011-02-28 A Simple test with no curve balls\"");
  83. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  84. }
  85. - (void)testConstructor_withPriority
  86. {
  87. NSString *input = @"(A) A priority test with no curve balls";
  88. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  89. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  90. STAssertEqualObjects(@"A priority test with no curve balls", task.originalText, @"originalText should be \"A priority test with no curve balls\"");
  91. STAssertEqualObjects(@"A priority test with no curve balls", task.text, @"text should be \"A priority test with no curve balls\"");
  92. STAssertEquals([Priority byName:PriorityA], task.originalPriority, @"originalPriority should be A");
  93. STAssertEquals([Priority byName:PriorityA], task.priority, @"priority should be A");
  94. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  95. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  96. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  97. STAssertFalse(task.deleted, @"Task should not be deleted");
  98. STAssertFalse(task.completed, @"Task should not be completed");
  99. STAssertEqualObjects(@"A priority test with no curve balls", task.inScreenFormat, @"inScreenFormat should be \"A priority test with no curve balls\"");
  100. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  101. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  102. }
  103. - (void)testConstructor_withPrependedDate
  104. {
  105. NSString *input = @"2011-11-28 A priority test with no curve balls";
  106. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  107. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  108. STAssertEqualObjects(@"A priority test with no curve balls", task.originalText, @"originalText should be \"A priority test with no curve balls\"");
  109. STAssertEqualObjects(@"A priority test with no curve balls", task.text, @"text should be \"A priority test with no curve balls\"");
  110. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  111. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  112. STAssertEqualObjects(@"2011-11-28", task.prependedDate, @"prependedDate should be 2011-11-28");
  113. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  114. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  115. STAssertFalse(task.deleted, @"Task should not be deleted");
  116. STAssertFalse(task.completed, @"Task should not be completed");
  117. STAssertEqualObjects(@"A priority test with no curve balls", task.inScreenFormat, @"inScreenFormat should be \"A priority test with no curve balls\"");
  118. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  119. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  120. }
  121. - (void)testConstructor_withPrependedDate_prependDate
  122. {
  123. NSString *input = @"2011-11-28 A priority test with no curve balls";
  124. NSDate *date = [Util dateFromString:@"20110228" withFormat:@"yyyyMMdd"];
  125. Task *task = [[[Task alloc] initWithId:1 withRawText:input withDefaultPrependedDate:date] autorelease];
  126. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  127. STAssertEqualObjects(@"A priority test with no curve balls", task.originalText, @"originalText should be \"A priority test with no curve balls\"");
  128. STAssertEqualObjects(@"A priority test with no curve balls", task.text, @"text should be \"A priority test with no curve balls\"");
  129. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  130. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  131. STAssertEqualObjects(@"2011-11-28", task.prependedDate, @"prependedDate should be 2011-11-28");
  132. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  133. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  134. STAssertFalse(task.deleted, @"Task should not be deleted");
  135. STAssertFalse(task.completed, @"Task should not be completed");
  136. STAssertEqualObjects(@"A priority test with no curve balls", task.inScreenFormat, @"inScreenFormat should be \"A priority test with no curve balls\"");
  137. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  138. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  139. }
  140. - (void)testConstructor_withContext
  141. {
  142. NSString *input = @"A simple test @phone";
  143. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  144. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  145. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  146. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  147. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  148. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  149. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  150. STAssertEquals(1U, task.contexts.count, @"should be 3 contexts");
  151. STAssertTrue([task.contexts containsObject:@"phone"], @"Task should contain context \"phone\"");
  152. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  153. STAssertFalse(task.deleted, @"Task should not be deleted");
  154. STAssertFalse(task.completed, @"Task should not be completed");
  155. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  156. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  157. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  158. }
  159. - (void)testConstructor_withMultipleContexts
  160. {
  161. NSString *input = @"A simple test with @multiple @contexts @phone";
  162. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  163. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  164. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  165. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  166. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  167. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  168. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  169. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  170. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  171. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  172. STAssertTrue([task.contexts containsObject:@"phone"], @"Task should contain context \"phone\"");
  173. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  174. STAssertFalse(task.deleted, @"Task should not be deleted");
  175. STAssertFalse(task.completed, @"Task should not be completed");
  176. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  177. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  178. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  179. }
  180. - (void)testConstructor_withInterspersedContexts
  181. {
  182. NSString *input = @"@simple test @with multiple contexts @phone";
  183. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  184. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  185. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  186. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  187. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  188. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  189. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  190. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  191. STAssertTrue([task.contexts containsObject:@"simple"], @"Task should contain context \"simple\"");
  192. STAssertTrue([task.contexts containsObject:@"with"], @"Task should contain context \"with\"");
  193. STAssertTrue([task.contexts containsObject:@"phone"], @"Task should contain context \"phone\"");
  194. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  195. STAssertFalse(task.deleted, @"Task should not be deleted");
  196. STAssertFalse(task.completed, @"Task should not be completed");
  197. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  198. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  199. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  200. }
  201. - (void)testConstructor_withProject
  202. {
  203. NSString *input = @"A simple test +myproject";
  204. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  205. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  206. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  207. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  208. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  209. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  210. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  211. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  212. STAssertEquals(1U, task.projects.count, @"should be 1 project");
  213. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  214. STAssertFalse(task.deleted, @"Task should not be deleted");
  215. STAssertFalse(task.completed, @"Task should not be completed");
  216. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  217. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  218. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  219. }
  220. - (void)testConstructor_withMultipleProjects
  221. {
  222. NSString *input = @"A simple test with +multiple +projects +associated";
  223. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  224. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  225. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  226. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  227. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  228. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  229. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  230. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  231. STAssertEquals(3U, task.projects.count, @"should be 3 projects");
  232. STAssertTrue([task.projects containsObject:@"multiple"], @"Task should contain project \"multiple\"");
  233. STAssertTrue([task.projects containsObject:@"projects"], @"Task should contain project \"projects\"");
  234. STAssertTrue([task.projects containsObject:@"associated"], @"Task should contain project \"associated\"");
  235. STAssertFalse(task.deleted, @"Task should not be deleted");
  236. STAssertFalse(task.completed, @"Task should not be completed");
  237. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  238. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  239. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  240. }
  241. - (void)testConstructor_withInterspersedProjects
  242. {
  243. NSString *input = @"A +simple test +with +multiple projects +myproject";
  244. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  245. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  246. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  247. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  248. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  249. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  250. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  251. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  252. STAssertEquals(4U, task.projects.count, @"should be 4 projects");
  253. STAssertTrue([task.projects containsObject:@"simple"], @"Task should contain project \"simple\"");
  254. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  255. STAssertTrue([task.projects containsObject:@"multiple"], @"Task should contain project \"multiple\"");
  256. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  257. STAssertFalse(task.deleted, @"Task should not be deleted");
  258. STAssertFalse(task.completed, @"Task should not be completed");
  259. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  260. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  261. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  262. }
  263. - (void)testConstructor_withLink
  264. {
  265. NSString *input = @"A simple test with an http://www.url.com";
  266. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  267. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  268. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  269. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  270. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  271. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  272. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  273. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  274. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  275. //FIXME: No support for links yet
  276. //STAssertEquals(1U, task.links.count, @"should be 1 link");
  277. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.url.com"]], @"Task should contain link \"http://www.url.com\"");
  278. STAssertFalse(task.deleted, @"Task should not be deleted");
  279. STAssertFalse(task.completed, @"Task should not be completed");
  280. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  281. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  282. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  283. }
  284. - (void)testConstructor_withMultipleLinks
  285. {
  286. NSString *input = @"A simple test with two http://www.urls.com http://www.another.one";
  287. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  288. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  289. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  290. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  291. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  292. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  293. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  294. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  295. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  296. //FIXME: No support for links yet
  297. //STAssertEquals(2U, task.links.count, @"should be 2 links");
  298. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.url.com"]], @"Task should contain link \"http://www.url.com\"");
  299. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.another.one"]], @"Task should contain link \"http://www.another.one\"");
  300. STAssertFalse(task.deleted, @"Task should not be deleted");
  301. STAssertFalse(task.completed, @"Task should not be completed");
  302. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  303. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  304. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  305. }
  306. - (void)testConstructor_withInterspersedLinks
  307. {
  308. NSString *input = @"A simple https://ww.url.com test with two http://www.urls.com http://www.another.one";
  309. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  310. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  311. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  312. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  313. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  314. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  315. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  316. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  317. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  318. //FIXME: No support for links yet
  319. //STAssertEquals(3U, task.links.count, @"should be 3 links");
  320. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.url.com"]], @"Task should contain link \"http://www.url.com\"");
  321. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.urls.com"]], @"Task should contain link \"http://www.urls.com\"");
  322. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.another.one"]], @"Task should contain link \"http://www.another.one\"");
  323. STAssertFalse(task.deleted, @"Task should not be deleted");
  324. STAssertFalse(task.completed, @"Task should not be completed");
  325. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  326. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  327. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  328. }
  329. - (void)testConstructor_complex
  330. {
  331. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject and links http://www.link.com";
  332. NSString *priority = @"D";
  333. NSString *date = @"2011-12-01";
  334. NSString *input = [NSString stringWithFormat:@"(%@) %@ %@", priority, date, text];
  335. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  336. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  337. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  338. STAssertEqualObjects(text, task.text, @"text should be %@", text);
  339. STAssertEquals([Priority byCode:priority], task.originalPriority, @"originalPriority should be %@", priority);
  340. STAssertEquals([Priority byCode:priority], task.priority, @"priority should be %@", priority);
  341. STAssertEqualObjects(date, task.prependedDate, @"prependedDate should be %@", date);
  342. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  343. STAssertTrue([task.contexts containsObject:@"complex"], @"Task should contain context \"complex\"");
  344. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  345. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  346. STAssertEquals(2U, task.projects.count, @"should be 2 projects");
  347. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  348. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  349. //FIXME: No support for links yet
  350. //STAssertEquals(1U, task.links.count, @"should be 1 link");
  351. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.link.com"]], @"Task should contain link \"http://www.link.com\"");
  352. STAssertFalse(task.deleted, @"Task should not be deleted");
  353. STAssertFalse(task.completed, @"Task should not be completed");
  354. STAssertEqualObjects(text, task.inScreenFormat, @"inScreenFormat should be %@", input);
  355. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  356. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  357. }
  358. - (void)testConstructor_email
  359. {
  360. NSString *input = @"Email me@steveh.ca about unit testing";
  361. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  362. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  363. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  364. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  365. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  366. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  367. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  368. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  369. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  370. //FIXME: No support for links yet
  371. //STAssertEqualObjects([NSArray array], task.links, @"links should be empty");
  372. STAssertFalse(task.deleted, @"Task should not be deleted");
  373. STAssertFalse(task.completed, @"Task should not be completed");
  374. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  375. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  376. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  377. }
  378. - (void)testConstructor_empty
  379. {
  380. NSString *input = @"";
  381. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  382. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  383. STAssertEqualObjects(input, task.originalText, @"originalText should be %@", input);
  384. STAssertEqualObjects(input, task.text, @"text should be %@", input);
  385. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  386. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  387. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  388. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  389. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  390. //FIXME: No support for links yet
  391. //STAssertEqualObjects([NSArray array], task.links, @"links should be empty");
  392. STAssertTrue(task.deleted, @"Task should be deleted");
  393. STAssertFalse(task.completed, @"Task should not be completed");
  394. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  395. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  396. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  397. }
  398. - (void)testConstructor_nil
  399. {
  400. Task *task = [[[Task alloc] initWithId:1 withRawText:nil] autorelease];
  401. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  402. STAssertEqualObjects(@"", task.originalText, @"originalText should be empty");
  403. STAssertEqualObjects(@"", task.text, @"text should be empty");
  404. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  405. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  406. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  407. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  408. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  409. //FIXME: No support for links yet
  410. //STAssertEqualObjects([NSArray array], task.links, @"links should be empty");
  411. STAssertTrue(task.deleted, @"Task should be deleted");
  412. STAssertFalse(task.completed, @"Task should not be completed");
  413. STAssertEqualObjects(@"", task.inScreenFormat, @"inScreenFormat should be empty");
  414. STAssertEqualObjects(@"", task.inFileFormat, @"inFileFormat should be empty");
  415. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  416. }
  417. - (void)testConstructor_completedTask
  418. {
  419. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject with http://www.link.com";
  420. NSString *date = @"2011-02-28";
  421. NSString *input = [NSString stringWithFormat:@"x %@ %@", date, text];
  422. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  423. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  424. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  425. STAssertEqualObjects(text, task.text, @"text should be %@", text);
  426. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  427. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  428. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  429. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  430. STAssertTrue([task.contexts containsObject:@"complex"], @"Task should contain context \"complex\"");
  431. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  432. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  433. STAssertEquals(2U, task.projects.count, @"should be 2 projects");
  434. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  435. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  436. //FIXME: No support for links yet
  437. //STAssertEquals(1U, task.links.count, @"should be 1 link");
  438. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.link.com"]], @"Task should contain link \"http://www.link.com\"");
  439. STAssertFalse(task.deleted, @"Task should not be deleted");
  440. STAssertTrue(task.completed, @"Task should be completed");
  441. STAssertEqualObjects(input, task.inScreenFormat, @"inScreenFormat should be %@", input);
  442. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat should be %@", input);
  443. STAssertEqualObjects(date, task.completionDate, @"completionDate should be %@", date);
  444. }
  445. - (void)testConstructor_completedTask_upperCase
  446. {
  447. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject with http://www.link.com";
  448. NSString *date = @"2011-02-28";
  449. NSString *input = [NSString stringWithFormat:@"X %@ %@", date, text];
  450. NSString *expected = [NSString stringWithFormat:@"x %@ %@", date, text];
  451. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  452. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  453. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  454. STAssertEqualObjects(text, task.text, @"text should be %@", text);
  455. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  456. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  457. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  458. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  459. STAssertTrue([task.contexts containsObject:@"complex"], @"Task should contain context \"complex\"");
  460. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  461. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  462. STAssertEquals(2U, task.projects.count, @"should be 2 projects");
  463. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  464. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  465. //FIXME: No support for links yet
  466. //STAssertEquals(1U, task.links.count, @"should be 1 link");
  467. //STAssertTrue([task.links containsObject:[NSURL URLWithString:@"http://www.link.com"]], @"Task should contain link \"http://www.link.com\"");
  468. STAssertFalse(task.deleted, @"Task should not be deleted");
  469. STAssertTrue(task.completed, @"Task should be completed");
  470. STAssertEqualObjects(expected, task.inScreenFormat, @"inScreenFormat should be %@", input);
  471. STAssertEqualObjects(expected, task.inFileFormat, @"inFileFormat should be %@", input);
  472. STAssertEqualObjects(date, task.completionDate, @"completionDate should be %@", date);
  473. }
  474. - (void)testEqualsAndHashCode_simple {
  475. NSString *input = @"(D) 2011-12-01 A @complex test with @multiple projects and @contexts myproject";
  476. Task *task1 = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  477. Task *task2 = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  478. STAssertTrue([task1 isEqual:task1], @"task1 should equal itself");
  479. STAssertTrue([task2 isEqual:task2], @"task2 should equal itself");
  480. STAssertTrue([task1 isEqual:task2], @"task1 should equal task2");
  481. STAssertTrue([task2 isEqual:task1], @"task2 should equal task1");
  482. STAssertEquals(task1.hash, task2.hash, @"task1 should equal itself");
  483. }
  484. - (void)testCopyInto {
  485. NSString *input1 = @"(D) 2011-12-01 A @complex test with @multiple projects and @contexts myproject";
  486. NSString *input2 = @"A simple text input";
  487. Task *task1 = [[[Task alloc] initWithId:1 withRawText:input1] autorelease];
  488. Task *task2 = [[[Task alloc] initWithId:2 withRawText:input2] autorelease];
  489. [task1 copyInto:task2];
  490. STAssertEquals(task1.taskId, task2.taskId, @"Should have same taskID");
  491. STAssertFalse([task1.originalText isEqualToString:task2.originalText], @"Should have same originalText");
  492. STAssertEqualObjects(@"A @complex test with @multiple projects and @contexts myproject", task1.originalText, @"task1 originalText should be \"A @complex test with @multiple projects and @contexts myproject\"");
  493. STAssertEqualObjects(@"A simple text input", task2.originalText, @"task2 originalText should be \"A simple text input\"");
  494. STAssertEqualObjects(task1.text, task2.text, @"Texts should be equal");
  495. STAssertFalse(task1.originalPriority == task2.originalPriority, @"Should have same originalPriority");
  496. STAssertEquals([Priority byName:PriorityD], task1.originalPriority, @"task1 originalPriority should be D");
  497. STAssertEquals([Priority NONE], task2.originalPriority, @"task2 originalPriority should be NONE");
  498. STAssertEquals(task1.priority, task2.priority, @"Should have same priority");
  499. STAssertEqualObjects(task1.prependedDate, task2.prependedDate, @"Should have same prependedDate");
  500. STAssertEqualObjects(task1.contexts, task2.contexts, @"Should have same contexts");
  501. STAssertEqualObjects(task1.projects, task2.projects, @"Should have same projects");
  502. STAssertEquals(task1.deleted, task2.deleted, @"Should have same deleted");
  503. STAssertEquals(task1.completed, task2.completed, @"Should have same completed");
  504. STAssertEqualObjects(task1, task2, @"Tasks should be equal");
  505. STAssertEqualObjects(@"A @complex test with @multiple projects and @contexts myproject", task1.inScreenFormat, @"task1 inScreenFormat should be \"A @complex test with @multiple projects and @contexts myproject\"");
  506. STAssertEqualObjects(@"A @complex test with @multiple projects and @contexts myproject", task2.inScreenFormat, @"task2 inScreenFormat should be \"A @complex test with @multiple projects and @contexts myproject\"");
  507. STAssertEqualObjects(input1, task1.inFileFormat, @"task1 inFileFormat should be \"%@\"", input1);
  508. STAssertEqualObjects(input1, task2.inFileFormat, @"task2 inFileFormat should be \"%@\"", input1);
  509. STAssertEqualObjects(@"", task1.completionDate, @"task1 completionDate should be blank");
  510. STAssertEqualObjects(task1.completionDate, task2.completionDate, @"Should have same completionDate");
  511. }
  512. - (void)testMarkComplete
  513. {
  514. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject";
  515. NSString *priority = @"D";
  516. NSString *date = @"2011-02-28";
  517. NSString *input = [NSString stringWithFormat:@"(%@) %@ %@", priority, date, text];
  518. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  519. NSString *completedDate = @"2011-02-28";
  520. NSString *completedText = [NSString stringWithFormat:@"x %@ %@ %@", completedDate, date, text];
  521. [task markComplete:[Util dateFromString:completedDate withFormat:@"yyyy-MM-dd"]];
  522. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  523. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  524. STAssertEqualObjects(text, task.text, @"text should be %@", text);
  525. STAssertEquals([Priority byCode:priority], task.originalPriority, @"originalPriority should be %@", priority);
  526. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  527. STAssertEqualObjects(date, task.prependedDate, @"prependedDate should be %@", date);
  528. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  529. STAssertTrue([task.contexts containsObject:@"complex"], @"Task should contain context \"complex\"");
  530. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  531. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  532. STAssertEquals(2U, task.projects.count, @"should be 2 projects");
  533. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  534. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  535. STAssertFalse(task.deleted, @"Task should not be deleted");
  536. STAssertTrue(task.completed, @"Task should be completed");
  537. STAssertEqualObjects(completedText, task.inScreenFormat, @"inScreenFormat should be %@", completedText);
  538. STAssertEqualObjects(completedText, task.inFileFormat, @"inFileFormat should be %@", completedText);
  539. STAssertEqualObjects(completedDate, task.completionDate, @"completionDate should be %@", completedDate);
  540. }
  541. - (void)testMarkComplete_twice
  542. {
  543. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject";
  544. NSString *priority = @"D";
  545. NSString *date = @"2011-02-28";
  546. NSString *input = [NSString stringWithFormat:@"(%@) %@ %@", priority, date, text];
  547. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  548. NSString *completedDate = @"2011-02-28";
  549. NSString *completedText = [NSString stringWithFormat:@"x %@ %@ %@", completedDate, date, text];
  550. [task markComplete:[Util dateFromString:completedDate withFormat:@"yyyy-MM-dd"]];
  551. [task markComplete:[Util dateFromString:completedDate withFormat:@"yyyy-MM-dd"]];
  552. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  553. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  554. STAssertEqualObjects(text, task.text, @"text should be %@", text);
  555. STAssertEquals([Priority byCode:priority], task.originalPriority, @"originalPriority should be %@", priority);
  556. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  557. STAssertEqualObjects(date, task.prependedDate, @"prependedDate should be %@", date);
  558. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  559. STAssertTrue([task.contexts containsObject:@"complex"], @"Task should contain context \"complex\"");
  560. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  561. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  562. STAssertEquals(2U, task.projects.count, @"should be 2 projects");
  563. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  564. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  565. STAssertFalse(task.deleted, @"Task should not be deleted");
  566. STAssertTrue(task.completed, @"Task should be completed");
  567. STAssertEqualObjects(completedText, task.inScreenFormat, @"inScreenFormat should be %@", completedText);
  568. STAssertEqualObjects(completedText, task.inFileFormat, @"inFileFormat should be %@", completedText);
  569. STAssertEqualObjects(completedDate, task.completionDate, @"completionDate should be %@", completedDate);
  570. }
  571. - (void)testMarkIncomplete
  572. {
  573. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject";
  574. NSString *date = @"2011-02-28";
  575. NSString *input = [NSString stringWithFormat:@"x %@ %@", date, text];
  576. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  577. [task markIncomplete];
  578. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  579. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  580. STAssertEqualObjects(text, task.text, @"text should be %@", text);
  581. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  582. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  583. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  584. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  585. STAssertTrue([task.contexts containsObject:@"complex"], @"Task should contain context \"complex\"");
  586. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  587. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  588. STAssertEquals(2U, task.projects.count, @"should be 2 projects");
  589. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  590. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  591. STAssertFalse(task.deleted, @"Task should not be deleted");
  592. STAssertFalse(task.completed, @"Task should not be completed");
  593. STAssertEqualObjects(text, task.inScreenFormat, @"inScreenFormat should be %@", text);
  594. STAssertEqualObjects(text, task.inFileFormat, @"inFileFormat should be %@", text);
  595. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  596. }
  597. - (void)testMarkIncomplete_twice
  598. {
  599. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject";
  600. NSString *date = @"2011-02-28";
  601. NSString *input = [NSString stringWithFormat:@"x %@ %@", date, text];
  602. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  603. [task markIncomplete];
  604. [task markIncomplete];
  605. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  606. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  607. STAssertEqualObjects(text, task.text, @"text should be %@", text);
  608. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  609. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  610. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  611. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  612. STAssertTrue([task.contexts containsObject:@"complex"], @"Task should contain context \"complex\"");
  613. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  614. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  615. STAssertEquals(2U, task.projects.count, @"should be 2 projects");
  616. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  617. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  618. STAssertFalse(task.deleted, @"Task should not be deleted");
  619. STAssertFalse(task.completed, @"Task should not be completed");
  620. STAssertEqualObjects(text, task.inScreenFormat, @"inScreenFormat should be %@", text);
  621. STAssertEqualObjects(text, task.inFileFormat, @"inFileFormat should be %@", text);
  622. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  623. }
  624. - (void)testMarkIncomplete_withPrependedDate
  625. {
  626. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject";
  627. NSString *date = @"2011-02-17";
  628. NSString *completedDate = @"2011-02-28";
  629. NSString *input = [NSString stringWithFormat:@"x %@ %@ %@", completedDate, date, text];
  630. NSString *incompleteText = [NSString stringWithFormat:@"%@ %@", date, text];
  631. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  632. [task markIncomplete];
  633. [task markIncomplete];
  634. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  635. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  636. STAssertEqualObjects(text, task.text, @"text should be %@", text);
  637. STAssertEquals([Priority NONE], task.originalPriority, @"originalPriority should be NONE");
  638. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  639. STAssertEqualObjects(date, task.prependedDate, @"prependedDate should be %@", date);
  640. STAssertEquals(3U, task.contexts.count, @"should be 3 contexts");
  641. STAssertTrue([task.contexts containsObject:@"complex"], @"Task should contain context \"complex\"");
  642. STAssertTrue([task.contexts containsObject:@"multiple"], @"Task should contain context \"multiple\"");
  643. STAssertTrue([task.contexts containsObject:@"contexts"], @"Task should contain context \"contexts\"");
  644. STAssertEquals(2U, task.projects.count, @"should be 2 projects");
  645. STAssertTrue([task.projects containsObject:@"with"], @"Task should contain project \"with\"");
  646. STAssertTrue([task.projects containsObject:@"myproject"], @"Task should contain project \"myproject\"");
  647. STAssertFalse(task.deleted, @"Task should not be deleted");
  648. STAssertFalse(task.completed, @"Task should not be completed");
  649. STAssertEqualObjects(text, task.inScreenFormat, @"inScreenFormat should be %@", text);
  650. STAssertEqualObjects(incompleteText, task.inFileFormat, @"inFileFormat should be %@", text);
  651. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  652. }
  653. - (void)testDelete_simple {
  654. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject";
  655. NSString *priority = @"D";
  656. NSString *date = @"2011-12-01";
  657. NSString *input = [NSString stringWithFormat:@"(%@) %@ %@", priority, date, text];
  658. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  659. [task deleteTask];
  660. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  661. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  662. STAssertEqualObjects(@"", task.text, @"text should be blank");
  663. STAssertEquals([Priority byCode:priority], task.originalPriority, @"originalPriority should be %@", priority);
  664. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  665. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  666. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  667. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  668. STAssertTrue(task.deleted, @"Task should be deleted");
  669. STAssertFalse(task.completed, @"Task should not be completed");
  670. STAssertEqualObjects(@"", task.inScreenFormat, @"inScreenFormat should be blank");
  671. STAssertEqualObjects(@"", task.inFileFormat, @"inFileFormat should be blank");
  672. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  673. }
  674. - (void)testDelete_twice {
  675. NSString *text = @"A @complex test +with @multiple projects and @contexts +myproject";
  676. NSString *priority = @"D";
  677. NSString *date = @"2011-12-01";
  678. NSString *input = [NSString stringWithFormat:@"(%@) %@ %@", priority, date, text];
  679. Task *task = [[[Task alloc] initWithId:1 withRawText:input] autorelease];
  680. [task deleteTask];
  681. [task deleteTask];
  682. STAssertEquals(1U, task.taskId, @"Task ID should be 1");
  683. STAssertEqualObjects(text, task.originalText, @"originalText should be %@", text);
  684. STAssertEqualObjects(@"", task.text, @"text should be blank");
  685. STAssertEquals([Priority byCode:priority], task.originalPriority, @"originalPriority should be %@", priority);
  686. STAssertEquals([Priority NONE], task.priority, @"priority should be NONE");
  687. STAssertEqualObjects(@"", task.prependedDate, @"prependedDate should be blank");
  688. STAssertEqualObjects([NSArray array], task.contexts, @"contexts should be empty");
  689. STAssertEqualObjects([NSArray array], task.projects, @"projects should be empty");
  690. STAssertTrue(task.deleted, @"Task should be deleted");
  691. STAssertFalse(task.completed, @"Task should not be completed");
  692. STAssertEqualObjects(@"", task.inScreenFormat, @"inScreenFormat should be blank");
  693. STAssertEqualObjects(@"", task.inFileFormat, @"inFileFormat should be blank");
  694. STAssertEqualObjects(@"", task.completionDate, @"completionDate should be blank");
  695. }
  696. - (void)testInFileFormat_simple {
  697. NSString *input = @"A Simple test with no curve balls";
  698. Task *task = [[[Task alloc] initWithId:0 withRawText:input] autorelease];
  699. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat shoud be \"%@\"", input);
  700. }
  701. - (void)testInFileFormat_withPriority {
  702. NSString *input = @"(A) Simple test with a priority";
  703. Task *task = [[[Task alloc] initWithId:0 withRawText:input] autorelease];
  704. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat shoud be \"%@\"", input);
  705. }
  706. - (void)testInFileFormat_withPrependedDate {
  707. NSString *input = @"2011-01-29 Simple test with a prepended date";
  708. Task *task = [[[Task alloc] initWithId:0 withRawText:input] autorelease];
  709. STAssertEqualObjects(input, task.inFileFormat, @"inFileFormat shoud be \"%@\"", input);
  710. }
  711. - (void)testInFileFormat_withPriorityAndPrependedDate {
  712. NSString *input = @"(B) 2011-01-29 Simple test with a priority and a prepended date";
  713. Task *task = [[[Task alloc] initWithId:0 withRaw