Bgerstle has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/221668

Change subject: restore legacy empty string behavior for titles
......................................................................

restore legacy empty string behavior for titles

also added some more conservative fallbacks & assertions for
internal links just in case

Bug: T103737
Change-Id: Iba79b9a4e65351484e9867f4f750fe751dc7841f
---
M MediaWikiKit/MediaWikiKit/MWKTitle.m
M MediaWikiKit/MediaWikiKitTests/MWKTitleTests.m
M Wikipedia.xcodeproj/project.pbxproj
3 files changed, 39 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/ios/wikipedia 
refs/changes/68/221668/1

diff --git a/MediaWikiKit/MediaWikiKit/MWKTitle.m 
b/MediaWikiKit/MediaWikiKit/MWKTitle.m
index 1dfb19b..2d4cef1 100644
--- a/MediaWikiKit/MediaWikiKit/MWKTitle.m
+++ b/MediaWikiKit/MediaWikiKit/MWKTitle.m
@@ -23,19 +23,23 @@
 
 @implementation MWKTitle
 
-- (instancetype)initWithSite:(MWKSite*)site normalizedTitle:(NSString*)text 
fragment:(NSString* __nullable)fragment {
+- (instancetype)initWithSite:(MWKSite*)site
+             normalizedTitle:(NSString*)text
+                    fragment:(NSString* __nullable)fragment {
     NSParameterAssert(site);
-    NSParameterAssert(text.length);
     self = [super init];
     if (self) {
         self.site     = site;
-        self.text     = text;
+        // HAX: fall back to empty strings in case of nil text to handle API 
edge cases & prevent crashes
+        self.text     = text.length ? text : @"";
         self.fragment = fragment;
     }
     return self;
 }
 
 - (instancetype)initWithInternalLink:(NSString*)relativeInternalLink 
site:(MWKSite*)site {
+    NSAssert(relativeInternalLink.length == 0 || [relativeInternalLink 
wmf_isInternalLink],
+             @"Expected string with internal link prefix but got: %@", 
relativeInternalLink);
     return [self initWithString:[relativeInternalLink wmf_internalLinkPath] 
site:site];
 }
 
@@ -43,11 +47,15 @@
     NSAssert(![string wmf_isInternalLink],
              @"Didn't expect %@ to be an internal link. Use 
initWithInternalLink:site: instead.",
              string);
-    NSArray* bits = [string componentsSeparatedByString:@"#"];
-    NSParameterAssert(bits.count >= 1);
-    return [self initWithSite:site
-              normalizedTitle:[bits[0] wmf_normalizedPageTitle]
-                     fragment:[bits wmf_safeObjectAtIndex:1]];
+    if ([string wmf_isInternalLink]) {
+        // recurse here after stripping internal link prefix
+        return [self initWithInternalLink:string site:site];
+    } else {
+        NSArray* bits = [string componentsSeparatedByString:@"#"];
+        return [self initWithSite:site
+                  normalizedTitle:[[bits firstObject] wmf_normalizedPageTitle]
+                         fragment:[bits wmf_safeObjectAtIndex:1]];
+    }
 }
 
 + (MWKTitle*)titleWithString:(NSString*)str site:(MWKSite*)site {
diff --git a/MediaWikiKit/MediaWikiKitTests/MWKTitleTests.m 
b/MediaWikiKit/MediaWikiKitTests/MWKTitleTests.m
index 4ad903f..88761e9 100644
--- a/MediaWikiKit/MediaWikiKitTests/MWKTitleTests.m
+++ b/MediaWikiKit/MediaWikiKitTests/MWKTitleTests.m
@@ -27,11 +27,23 @@
     site = [[MWKSite alloc] initWithDomain:@"wikipedia.org" language:@"en"];
 }
 
-- (void)tearDown {
-    // Put teardown code here. This method is called after the invocation of 
each test method in the class.
-    [super tearDown];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnonnull"
+
+- (void)testNilResultsInEmptyString {
+    MWKTitle* title;
+    XCTAssertNoThrow((title = [site titleWithString:nil]));
+    assertThat(title.text, is(@""));
 }
 
+- (void)testPermitsEmptyString {
+    MWKTitle* title;
+    XCTAssertNoThrow((title = [site titleWithString:@""]));
+    assertThat(title.text, is(@""));
+}
+
+#pragma clang diagnostic pop
+
 - (void)testSimple {
     MWKTitle* title = [MWKTitle titleWithString:@"Simple" site:site];
     XCTAssertEqualObjects(title.text, @"Simple", @"Text form is full");
diff --git a/Wikipedia.xcodeproj/project.pbxproj 
b/Wikipedia.xcodeproj/project.pbxproj
index 31ab1c9..04c4794 100644
--- a/Wikipedia.xcodeproj/project.pbxproj
+++ b/Wikipedia.xcodeproj/project.pbxproj
@@ -3582,6 +3582,8 @@
                                        "-Werror=arc-retain-cycles",
                                        "-Werror=incompatible-pointer-types",
                                        "-Werror=incomplete-implementation",
+                                       "-Werror=",
+                                       "-Werror=nonnull",
                                );
                                WMF_HOCKEYAPP_IDENTIFIER = 
35ef86a164e10f9c01c634c640ec2f0a;
                                WRAPPER_EXTENSION = app;
@@ -3690,6 +3692,8 @@
                                        "-Werror=arc-retain-cycles",
                                        "-Werror=incompatible-pointer-types",
                                        "-Werror=incomplete-implementation",
+                                       "-Werror=",
+                                       "-Werror=nonnull",
                                );
                                WMF_HOCKEYAPP_IDENTIFIER = 
2295c3698bbd0b050f257772dd2bdbb2;
                                WRAPPER_EXTENSION = app;
@@ -3894,6 +3898,8 @@
                                        "-Werror=arc-retain-cycles",
                                        "-Werror=incompatible-pointer-types",
                                        "-Werror=incomplete-implementation",
+                                       "-Werror=",
+                                       "-Werror=nonnull",
                                );
                                WMF_HOCKEYAPP_IDENTIFIER = 
76947f174e31a9e33fe67d81ff31732e;
                                WRAPPER_EXTENSION = app;
@@ -3933,6 +3939,8 @@
                                        "-Werror=arc-retain-cycles",
                                        "-Werror=incompatible-pointer-types",
                                        "-Werror=incomplete-implementation",
+                                       "-Werror=",
+                                       "-Werror=nonnull",
                                );
                                WMF_HOCKEYAPP_IDENTIFIER = 
5d80da08a6761e5c6456736af7ebad88;
                                WRAPPER_EXTENSION = app;

-- 
To view, visit https://gerrit.wikimedia.org/r/221668
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iba79b9a4e65351484e9867f4f750fe751dc7841f
Gerrit-PatchSet: 1
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Bgerstle <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to