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