mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:42:44 +00:00 
			
		
		
		
	LibJS: Implement Temporal.PlainDateTime.prototype.nanosecond
This commit is contained in:
		
							parent
							
								
									23bf840326
								
							
						
					
					
						commit
						518a9f3eab
					
				
					 3 changed files with 29 additions and 0 deletions
				
			
		|  | @ -37,6 +37,7 @@ void PlainDateTimePrototype::initialize(GlobalObject& global_object) | ||||||
|     define_native_accessor(vm.names.second, second_getter, {}, Attribute::Configurable); |     define_native_accessor(vm.names.second, second_getter, {}, Attribute::Configurable); | ||||||
|     define_native_accessor(vm.names.millisecond, millisecond_getter, {}, Attribute::Configurable); |     define_native_accessor(vm.names.millisecond, millisecond_getter, {}, Attribute::Configurable); | ||||||
|     define_native_accessor(vm.names.microsecond, microsecond_getter, {}, Attribute::Configurable); |     define_native_accessor(vm.names.microsecond, microsecond_getter, {}, Attribute::Configurable); | ||||||
|  |     define_native_accessor(vm.names.nanosecond, nanosecond_getter, {}, Attribute::Configurable); | ||||||
| 
 | 
 | ||||||
|     u8 attr = Attribute::Writable | Attribute::Configurable; |     u8 attr = Attribute::Writable | Attribute::Configurable; | ||||||
|     define_native_function(vm.names.valueOf, value_of, 0, attr); |     define_native_function(vm.names.valueOf, value_of, 0, attr); | ||||||
|  | @ -199,6 +200,19 @@ JS_DEFINE_NATIVE_FUNCTION(PlainDateTimePrototype::microsecond_getter) | ||||||
|     return Value(date_time->iso_microsecond()); |     return Value(date_time->iso_microsecond()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // 5.3.13 get Temporal.PlainDateTime.prototype.nanosecond, https://tc39.es/proposal-temporal/#sec-get-temporal.plaindatetime.prototype.nanosecond
 | ||||||
|  | JS_DEFINE_NATIVE_FUNCTION(PlainDateTimePrototype::nanosecond_getter) | ||||||
|  | { | ||||||
|  |     // 1. Let dateTime be the this value.
 | ||||||
|  |     // 2. Perform ? RequireInternalSlot(dateTime, [[InitializedTemporalDateTime]]).
 | ||||||
|  |     auto* date_time = typed_this(global_object); | ||||||
|  |     if (vm.exception()) | ||||||
|  |         return {}; | ||||||
|  | 
 | ||||||
|  |     // 3. Return 𝔽(dateTime.[[ISONanosecond]]).
 | ||||||
|  |     return Value(date_time->iso_nanosecond()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // 5.3.35 Temporal.PlainDateTime.prototype.valueOf ( ), https://tc39.es/proposal-temporal/#sec-temporal.plaindatetime.prototype.valueof
 | // 5.3.35 Temporal.PlainDateTime.prototype.valueOf ( ), https://tc39.es/proposal-temporal/#sec-temporal.plaindatetime.prototype.valueof
 | ||||||
| JS_DEFINE_NATIVE_FUNCTION(PlainDateTimePrototype::value_of) | JS_DEFINE_NATIVE_FUNCTION(PlainDateTimePrototype::value_of) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -29,6 +29,7 @@ private: | ||||||
|     JS_DECLARE_NATIVE_FUNCTION(second_getter); |     JS_DECLARE_NATIVE_FUNCTION(second_getter); | ||||||
|     JS_DECLARE_NATIVE_FUNCTION(millisecond_getter); |     JS_DECLARE_NATIVE_FUNCTION(millisecond_getter); | ||||||
|     JS_DECLARE_NATIVE_FUNCTION(microsecond_getter); |     JS_DECLARE_NATIVE_FUNCTION(microsecond_getter); | ||||||
|  |     JS_DECLARE_NATIVE_FUNCTION(nanosecond_getter); | ||||||
|     JS_DECLARE_NATIVE_FUNCTION(value_of); |     JS_DECLARE_NATIVE_FUNCTION(value_of); | ||||||
|     JS_DECLARE_NATIVE_FUNCTION(to_plain_date); |     JS_DECLARE_NATIVE_FUNCTION(to_plain_date); | ||||||
|     JS_DECLARE_NATIVE_FUNCTION(get_iso_fields); |     JS_DECLARE_NATIVE_FUNCTION(get_iso_fields); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | describe("correct behavior", () => { | ||||||
|  |     test("basic functionality", () => { | ||||||
|  |         const plainDateTime = new Temporal.PlainDateTime(2021, 7, 30, 1, 4, 32, 111, 420, 963); | ||||||
|  |         expect(plainDateTime.nanosecond).toBe(963); | ||||||
|  |     }); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | test("errors", () => { | ||||||
|  |     test("this value must be a Temporal.PlainDateTime object", () => { | ||||||
|  |         expect(() => { | ||||||
|  |             Reflect.get(Temporal.PlainDateTime.prototype, "nanosecond", "foo"); | ||||||
|  |         }).toThrowWithMessage(TypeError, "Not a Temporal.PlainDateTime"); | ||||||
|  |     }); | ||||||
|  | }); | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Idan Horowitz
						Idan Horowitz