XCUIElement+FBCaching.m 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /**
  2. * Copyright (c) 2015-present, Facebook, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. */
  9. #import "XCUIElement+FBCaching.h"
  10. #import <objc/runtime.h>
  11. #import "FBXCElementSnapshotWrapper+Helpers.h"
  12. #import "XCUIElement+FBWebDriverAttributes.h"
  13. #import "XCUIElement+FBUtilities.h"
  14. #import "XCUIElement+FBUID.h"
  15. @implementation XCUIElement (FBCaching)
  16. static char XCUIELEMENT_IS_RESOLVED_FROM_CACHE_KEY;
  17. @dynamic fb_isResolvedFromCache;
  18. - (void)setFb_isResolvedFromCache:(NSNumber *)isResolvedFromCache
  19. {
  20. objc_setAssociatedObject(self, &XCUIELEMENT_IS_RESOLVED_FROM_CACHE_KEY, isResolvedFromCache, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  21. }
  22. - (NSNumber *)fb_isResolvedFromCache
  23. {
  24. return (NSNumber *)objc_getAssociatedObject(self, &XCUIELEMENT_IS_RESOLVED_FROM_CACHE_KEY);
  25. }
  26. static char XCUIELEMENT_CACHE_ID_KEY;
  27. @dynamic fb_cacheId;
  28. - (NSString *)fb_cacheId
  29. {
  30. id result = objc_getAssociatedObject(self, &XCUIELEMENT_CACHE_ID_KEY);
  31. if ([result isKindOfClass:NSString.class]) {
  32. return (NSString *)result;
  33. }
  34. NSString *uid;
  35. if ([self isKindOfClass:XCUIApplication.class]) {
  36. uid = self.fb_uid;
  37. } else {
  38. id<FBXCElementSnapshot> snapshot = self.fb_cachedSnapshot ?: self.fb_takeSnapshot;
  39. uid = [FBXCElementSnapshotWrapper wdUIDWithSnapshot:snapshot];
  40. }
  41. objc_setAssociatedObject(self, &XCUIELEMENT_CACHE_ID_KEY, uid, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  42. return uid;
  43. }
  44. @end