mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-27 14:22:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			113 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| describe("correct behavior", () => {
 | |
|     test("length is 2", () => {
 | |
|         expect(Temporal.Duration.compare).toHaveLength(2);
 | |
|     });
 | |
| 
 | |
|     function checkCommonResults(duration1, duration2) {
 | |
|         expect(Temporal.Duration.compare(duration1, duration1)).toBe(0);
 | |
|         expect(Temporal.Duration.compare(duration2, duration2)).toBe(0);
 | |
|         expect(Temporal.Duration.compare(duration1, duration2)).toBe(-1);
 | |
|         expect(Temporal.Duration.compare(duration2, duration1)).toBe(1);
 | |
|     }
 | |
| 
 | |
|     test("basic functionality", () => {
 | |
|         const duration1 = new Temporal.Duration(0, 0, 0, 1);
 | |
|         const duration2 = new Temporal.Duration(0, 0, 0, 2);
 | |
|         checkCommonResults(duration1, duration2);
 | |
|     });
 | |
| 
 | |
|     test("duration-like objects", () => {
 | |
|         const duration1 = { years: 0, months: 0, weeks: 0, days: 1 };
 | |
|         const duration2 = { years: 0, months: 0, weeks: 0, days: 2 };
 | |
|         checkCommonResults(duration1, duration2);
 | |
|     });
 | |
| 
 | |
|     test("duration strings", () => {
 | |
|         const duration1 = "P1D";
 | |
|         const duration2 = "P2D";
 | |
|         checkCommonResults(duration1, duration2);
 | |
|     });
 | |
| });
 | |
| 
 | |
| describe("errors", () => {
 | |
|     test("invalid duration-like object", () => {
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare({});
 | |
|         }).toThrowWithMessage(TypeError, "Invalid duration-like object");
 | |
| 
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare({ years: 0, months: 0, weeks: 0, days: 1 }, {});
 | |
|         }).toThrowWithMessage(TypeError, "Invalid duration-like object");
 | |
|     });
 | |
| 
 | |
|     test("relativeTo is required for comparing calendar units (year, month, week)", () => {
 | |
|         const duration1 = new Temporal.Duration(1);
 | |
|         const duration2 = new Temporal.Duration(2);
 | |
| 
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare(duration1, duration2);
 | |
|         }).toThrowWithMessage(
 | |
|             RangeError,
 | |
|             "A starting point is required for balancing calendar units"
 | |
|         );
 | |
| 
 | |
|         const duration3 = new Temporal.Duration(0, 3);
 | |
|         const duration4 = new Temporal.Duration(0, 4);
 | |
| 
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare(duration3, duration4);
 | |
|         }).toThrowWithMessage(
 | |
|             RangeError,
 | |
|             "A starting point is required for balancing calendar units"
 | |
|         );
 | |
| 
 | |
|         const duration5 = new Temporal.Duration(0, 0, 5);
 | |
|         const duration6 = new Temporal.Duration(0, 0, 6);
 | |
| 
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare(duration5, duration6);
 | |
|         }).toThrowWithMessage(
 | |
|             RangeError,
 | |
|             "A starting point is required for balancing calendar units"
 | |
|         );
 | |
| 
 | |
|         // Still throws if year/month/week of one the duration objects is non-zero.
 | |
|         const duration7 = new Temporal.Duration(0, 0, 0, 7);
 | |
|         const duration8 = new Temporal.Duration(0, 0, 8);
 | |
| 
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare(duration7, duration8);
 | |
|         }).toThrowWithMessage(
 | |
|             RangeError,
 | |
|             "A starting point is required for balancing calendar units"
 | |
|         );
 | |
| 
 | |
|         const duration9 = new Temporal.Duration(0, 0, 9);
 | |
|         const duration10 = new Temporal.Duration(0, 0, 0, 10);
 | |
| 
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare(duration9, duration10);
 | |
|         }).toThrowWithMessage(
 | |
|             RangeError,
 | |
|             "A starting point is required for balancing calendar units"
 | |
|         );
 | |
|     });
 | |
| 
 | |
|     test("custom time zone doesn't have a getOffsetNanosecondsFor function", () => {
 | |
|         const zonedDateTime = new Temporal.ZonedDateTime(0n, {});
 | |
|         const duration = new Temporal.Duration();
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare(duration, duration, { relativeTo: zonedDateTime });
 | |
|         }).toThrowWithMessage(TypeError, "null is not a function");
 | |
|     });
 | |
| 
 | |
|     test("UTC designator only allowed with bracketed time zone", () => {
 | |
|         const duration = new Temporal.Duration();
 | |
|         expect(() => {
 | |
|             Temporal.Duration.compare(duration, duration, { relativeTo: "2022-08-18T17:01Z" });
 | |
|         }).toThrowWithMessage(
 | |
|             RangeError,
 | |
|             "Invalid relativeTo string '2022-08-18T17:01Z': must not contain a UTC designator without bracketed time zone"
 | |
|         );
 | |
|     });
 | |
| });
 | 
