index-ts3.test-d.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import {expectAssignable, expectError, expectNotAssignable, expectType} from 'tsd';
  2. import {
  3. CronDate,
  4. CronExpression,
  5. CronFields, DateType,
  6. parseExpression,
  7. parseFile, ParserOptions,
  8. parseString,
  9. fieldsToExpression,
  10. StringResult
  11. } from '../types/ts3';
  12. const interval = parseExpression('0 1 2 3 * 1-3,5');
  13. const intervalIterator = parseExpression('0 1 2 3 * 1-3,5', {iterator: true});
  14. expectType<readonly number[]>(interval.fields.second);
  15. expectType<readonly number[]>(interval.fields.minute);
  16. expectType<readonly number[]>(interval.fields.hour);
  17. expectType<readonly (number | 'L')[]>(interval.fields.dayOfMonth);
  18. expectType<readonly number[]>(interval.fields.month);
  19. expectType<readonly number[]>(interval.fields.dayOfWeek);
  20. expectError(interval.fields = interval.fields);
  21. expectError(interval.fields.second = []);
  22. expectError(interval.fields.second.push(1));
  23. expectError(interval.fields.minute = []);
  24. expectError(interval.fields.minute.push(1));
  25. expectError(interval.fields.hour = []);
  26. expectError(interval.fields.hour.push(1));
  27. expectError(interval.fields.dayOfMonth = []);
  28. expectError(interval.fields.dayOfMonth.push(1));
  29. expectError(interval.fields.month = []);
  30. expectError(interval.fields.month.push(1));
  31. expectError(interval.fields.dayOfWeek = []);
  32. expectError(interval.fields.dayOfWeek.push(1));
  33. expectAssignable<typeof interval.fields.second[0]>(0);
  34. expectAssignable<typeof interval.fields.second[0]>(59);
  35. expectAssignable<typeof interval.fields.minute[0]>(0);
  36. expectAssignable<typeof interval.fields.minute[0]>(59);
  37. expectAssignable<typeof interval.fields.hour[0]>(0);
  38. expectAssignable<typeof interval.fields.hour[0]>(23);
  39. expectAssignable<typeof interval.fields.dayOfMonth[0]>(1);
  40. expectAssignable<typeof interval.fields.dayOfMonth[0]>(31);
  41. expectAssignable<typeof interval.fields.dayOfMonth[0]>('L');
  42. expectAssignable<typeof interval.fields.month[0]>(1);
  43. expectAssignable<typeof interval.fields.month[0]>(12);
  44. expectAssignable<typeof interval.fields.dayOfWeek[0]>(0);
  45. expectAssignable<typeof interval.fields.dayOfWeek[0]>(7);
  46. const parseOptions: ParserOptions<true> = {
  47. currentDate: 'f',
  48. startDate: 4,
  49. endDate: new Date(),
  50. iterator: true,
  51. utc: true,
  52. tz: 'f',
  53. nthDayOfWeek: 5,
  54. }
  55. expectAssignable<{
  56. currentDate?: string | number | Date
  57. startDate?: string | number | Date
  58. endDate?: string | number | Date
  59. iterator?: boolean
  60. utc?: boolean
  61. tz?: string
  62. nthDayOfWeek?: number
  63. }>(parseOptions)
  64. expectType<CronExpression>(parseExpression('0 1 2 3 * 1-3,5'))
  65. expectType<CronExpression<true>>(parseExpression('0 1 2 3 * 1-3,5', parseOptions))
  66. const fields: CronFields = {
  67. second: [1, 1],
  68. minute: [1],
  69. hour: [1],
  70. dayOfMonth: [1],
  71. month: [1],
  72. dayOfWeek: [1],
  73. }
  74. expectType<CronExpression>(fieldsToExpression(fields))
  75. expectType<CronExpression<true>>(fieldsToExpression(fields, parseOptions))
  76. expectType<string>(fieldsToExpression(fields).stringify())
  77. expectType<string>(fieldsToExpression(fields, parseOptions).stringify())
  78. expectType<string>(fieldsToExpression(fields, parseOptions).stringify(true))
  79. expectType<void>(parseFile('path', (err: any, data: StringResult) => console.log(data)))
  80. expectType<StringResult>(parseString('path'))
  81. const stringResult = parseString('path');
  82. expectType<{
  83. variables: Record<string, string>,
  84. expressions: CronExpression[],
  85. errors: Record<string, any>,
  86. }>(stringResult)
  87. expectType<CronFields>(interval.fields)
  88. expectType<CronDate>(interval.next())
  89. expectType<CronDate>(interval.prev())
  90. expectType<boolean>(interval.hasNext())
  91. expectType<boolean>(interval.hasPrev())
  92. expectType<string>(interval.stringify())
  93. expectType<string>(interval.stringify(true))
  94. expectType<void>(interval.reset())
  95. expectType<void>(interval.reset("Sdf"))
  96. expectType<void>(interval.reset(5))
  97. expectType<void>(interval.reset(new Date()))
  98. expectType<CronDate[]>(interval.iterate(5))
  99. expectType<CronDate[]>(interval.iterate(5, (item: CronDate, i: number) => {}))
  100. expectAssignable<DateType>(new Date())
  101. expectAssignable<DateType>(5)
  102. expectAssignable<DateType>("SDf")
  103. expectType<IteratorResult<CronDate, CronDate>>(intervalIterator.next())
  104. expectType<IteratorResult<CronDate, CronDate>>(intervalIterator.prev())
  105. expectType<IteratorResult<CronDate, CronDate>[]>(intervalIterator.iterate(5))
  106. expectType<IteratorResult<CronDate, CronDate>[]>(intervalIterator.iterate(5, (item: IteratorResult<CronDate, CronDate>, i: number) => {}))