@@ -507,6 +507,66 @@ class LCObjectTestCase: BaseTestCase {
507507 XCTAssertEqual ( object [ dictionaryKey] ? . dictionaryValue ? [ " 1 " ] as? String , " a " )
508508 XCTAssertEqual ( object [ dictionaryKey] ? . dictionaryValue ? [ " 2 " ] as? Double , 42 )
509509 }
510+
511+ func testKeyPath( ) {
512+ do {
513+ let object = self . object ( )
514+ try object. set ( " foo.bar " , value: 1 )
515+ XCTFail ( )
516+ } catch {
517+ XCTAssertTrue ( error is LCError )
518+ }
519+
520+ let object = self . object ( )
521+ object. dictionaryField = LCDictionary ( [
522+ " number " : 1 ,
523+ " foo " : " foo " ,
524+ " foos " : [ " bar " ] ,
525+ " unset " : " unset " ] )
526+ object. stringField = " string literal "
527+ XCTAssertTrue ( object. save ( ) . isSuccess)
528+
529+ do {
530+ try object. increase ( " dictionaryField.number " )
531+ try object. set ( " dictionaryField.foo " , value: " bar " )
532+ try object. unset ( " dictionaryField.unset " )
533+ try object. append ( " dictionaryField.foos " , element: " bars " )
534+ try object. remove ( " dictionaryField.foos " , element: " bar " )
535+ try object. append ( " dictionaryField.foos " , element: " bar " , unique: true )
536+ XCTAssertTrue ( object. save ( ) . isSuccess)
537+ let dictionaryField = object. dictionaryField as? LCDictionary
538+ XCTAssertNil ( dictionaryField? . unset)
539+ XCTAssertEqual ( dictionaryField? . number as? LCNumber , LCNumber ( 2 ) )
540+ XCTAssertEqual ( dictionaryField? . foo as? LCString , LCString ( " bar " ) )
541+ XCTAssertEqual ( dictionaryField? . foos as? LCArray , LCArray ( [ " bars " , " bar " ] ) )
542+ XCTAssertNil ( object [ " dictionaryField.number " ] )
543+ XCTAssertNil ( object [ " dictionaryField.unset " ] )
544+ XCTAssertNil ( object [ " dictionaryField.foo " ] )
545+ XCTAssertNil ( object [ " dictionaryField.foos " ] )
546+
547+ let shadow = self . object ( object. objectId)
548+ XCTAssertTrue ( shadow. fetch ( ) . isSuccess)
549+ XCTAssertEqual ( shadow. dictionaryField as? LCDictionary , dictionaryField)
550+ } catch {
551+ XCTFail ( " \( error) " )
552+ }
553+
554+ do {
555+ try object. set ( " stringField.foo " , value: " bar " )
556+ XCTAssertNotNil ( object. save ( ) . error)
557+ XCTAssertEqual ( object. stringField as? LCString , LCString ( " string literal " ) )
558+ XCTAssertNil ( object [ " stringField.foo " ] )
559+ } catch {
560+ XCTFail ( " \( error) " )
561+ }
562+
563+ do {
564+ try object. insertRelation ( " dictionaryField.relation " , object: self . object ( ) )
565+ XCTFail ( )
566+ } catch {
567+ XCTAssertTrue ( error is LCError )
568+ }
569+ }
510570}
511571
512572class TestObject : LCObject {
0 commit comments