Bgerstle has uploaded a new change for review.

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

Change subject: save user lang selection
......................................................................

save user lang selection

Change-Id: I8f3eef90811ca600941efcc6db256d471fd87a49
---
M Wikipedia.xcodeproj/project.pbxproj
M Wikipedia/UI-V5/Global.h
M Wikipedia/View Controllers/Languages/LanguagesViewController.m
M Wikipedia/View Controllers/Languages/MWKLanguageLinkController.h
M Wikipedia/View Controllers/Languages/MWKLanguageLinkController.m
A Wikipedia/View Controllers/Languages/MWKLanguageLinkController_Private.h
A WikipediaUnitTests/MWKLanguageLinkControllerTests.m
A WikipediaUnitTests/Supporting Files/WikipediaUnitTests-Prefix.pch
8 files changed, 241 insertions(+), 7 deletions(-)


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

diff --git a/Wikipedia.xcodeproj/project.pbxproj 
b/Wikipedia.xcodeproj/project.pbxproj
index a9f9e1e..27dae01 100644
--- a/Wikipedia.xcodeproj/project.pbxproj
+++ b/Wikipedia.xcodeproj/project.pbxproj
@@ -245,6 +245,7 @@
                BC69C3141AB0C1FF0090B039 /* WMFImageInfoController.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = BC69C3131AB0C1FF0090B039 /* 
WMFImageInfoController.m */; };
                BC6BF4001B19213600362968 /* XCTestCase+WMFLocaleTesting.m in 
Sources */ = {isa = PBXBuildFile; fileRef = BC6BF3FE1B19209900362968 /* 
XCTestCase+WMFLocaleTesting.m */; };
                BC7DFCD61AA4E5FE000035C3 /* WMFImageURLParsing.m in Sources */ 
= {isa = PBXBuildFile; fileRef = BC7DFCD51AA4E5FE000035C3 /* 
WMFImageURLParsing.m */; };
+               BC7E4A521B34B53E00EECD8B /* MWKLanguageLinkControllerTests.m in 
Sources */ = {isa = PBXBuildFile; fileRef = BC7E4A511B34B53E00EECD8B /* 
MWKLanguageLinkControllerTests.m */; };
                BC86B9361A92966B00B4C039 /* 
AFHTTPRequestOperationManager+UniqueRequests.m in Sources */ = {isa = 
PBXBuildFile; fileRef = BC86B9351A92966B00B4C039 /* 
AFHTTPRequestOperationManager+UniqueRequests.m */; };
                BC86B93D1A929CC500B4C039 /* 
UICollectionViewFlowLayout+NSCopying.m in Sources */ = {isa = PBXBuildFile; 
fileRef = BC86B93C1A929CC500B4C039 /* UICollectionViewFlowLayout+NSCopying.m 
*/; };
                BC86B9401A929D7900B4C039 /* 
UICollectionViewFlowLayout+WMFItemSizeThatFits.m in Sources */ = {isa = 
PBXBuildFile; fileRef = BC86B93F1A929D7900B4C039 /* 
UICollectionViewFlowLayout+WMFItemSizeThatFits.m */; };
@@ -764,6 +765,7 @@
                BC092BA01B19135700093C59 /* WMFApiJsonResponseSerializer.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
name = WMFApiJsonResponseSerializer.h; path = 
Serializers/WMFApiJsonResponseSerializer.h; sourceTree = "<group>"; };
                BC092BA11B19135700093C59 /* WMFApiJsonResponseSerializer.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; name = WMFApiJsonResponseSerializer.m; path = 
Serializers/WMFApiJsonResponseSerializer.m; sourceTree = "<group>"; };
                BC092BA61B19189100093C59 /* MWKSiteInfoFetcherTests.m */ = {isa 
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; 
path = MWKSiteInfoFetcherTests.m; sourceTree = "<group>"; };
+               BC14F89F1B34B72500860018 /* WikipediaUnitTests-Prefix.pch */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
"WikipediaUnitTests-Prefix.pch"; sourceTree = "<group>"; };
                BC2375981AB78D8A00B0BAA8 /* 
NSParagraphStyle+WMFNaturalAlignmentStyle.h */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
"NSParagraphStyle+WMFNaturalAlignmentStyle.h"; sourceTree = "<group>"; };
                BC2375991AB78D8A00B0BAA8 /* 
NSParagraphStyle+WMFNaturalAlignmentStyle.m */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = 
"NSParagraphStyle+WMFNaturalAlignmentStyle.m"; sourceTree = "<group>"; };
                BC23759D1AB8928600B0BAA8 /* WMFDateFormatterTests.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WMFDateFormatterTests.m; sourceTree = "<group>"; };
@@ -796,6 +798,8 @@
                BC7DFCCB1AA4BA8A000035C3 /* WMFCodingStyle.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WMFCodingStyle.h; 
sourceTree = "<group>"; };
                BC7DFCD41AA4E5FE000035C3 /* WMFImageURLParsing.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
WMFImageURLParsing.h; sourceTree = "<group>"; };
                BC7DFCD51AA4E5FE000035C3 /* WMFImageURLParsing.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= WMFImageURLParsing.m; sourceTree = "<group>"; };
+               BC7E4A501B34B4B900EECD8B /* MWKLanguageLinkController_Private.h 
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; path = MWKLanguageLinkController_Private.h; sourceTree = 
"<group>"; };
+               BC7E4A511B34B53E00EECD8B /* MWKLanguageLinkControllerTests.m */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = MWKLanguageLinkControllerTests.m; sourceTree = 
"<group>"; };
                BC86B9341A92966B00B4C039 /* 
AFHTTPRequestOperationManager+UniqueRequests.h */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
"AFHTTPRequestOperationManager+UniqueRequests.h"; sourceTree = "<group>"; };
                BC86B9351A92966B00B4C039 /* 
AFHTTPRequestOperationManager+UniqueRequests.m */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = 
"AFHTTPRequestOperationManager+UniqueRequests.m"; sourceTree = "<group>"; };
                BC86B93B1A929CC500B4C039 /* 
UICollectionViewFlowLayout+NSCopying.h */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
"UICollectionViewFlowLayout+NSCopying.h"; sourceTree = "<group>"; };
@@ -1285,6 +1289,7 @@
                                041A3B5818E11ED90079FF1C /* LanguageCell.h */,
                                041A3B5918E11ED90079FF1C /* LanguageCell.m */,
                                BC34E4681B31AD8B00258928 /* 
MWKLanguageLinkController.h */,
+                               BC7E4A501B34B4B900EECD8B /* 
MWKLanguageLinkController_Private.h */,
                                BC34E4691B31AD8B00258928 /* 
MWKLanguageLinkController.m */,
                                BC34E4721B31D92100258928 /* 
LangaugeSelectionDelegate.h */,
                        );
@@ -2143,6 +2148,7 @@
                                BCAFC5CF1AFD5E7D004615BA /* 
MWKArticle+WMFSharingTests.m */,
                                BC5FE5741B1DFF5400273BC0 /* 
ArticleFetcherTests.m */,
                                BC092BA61B19189100093C59 /* 
MWKSiteInfoFetcherTests.m */,
+                               BC7E4A511B34B53E00EECD8B /* 
MWKLanguageLinkControllerTests.m */,
                        );
                        name = Tests;
                        path = WikipediaUnitTests;
@@ -2164,6 +2170,7 @@
                        isa = PBXGroup;
                        children = (
                                BCA6764D1AC05FD600A16160 /* Info.plist */,
+                               BC14F89F1B34B72500860018 /* 
WikipediaUnitTests-Prefix.pch */,
                        );
                        path = "Supporting Files";
                        sourceTree = "<group>";
@@ -2978,6 +2985,7 @@
                                BCEC778F1AC9AEC800D9DDA5 /* 
MWKImage+AssociationTestUtils.m in Sources */,
                                04F1226A1ACB822D002FC3B5 /* 
NSString+FormattedAttributedStringTests.m in Sources */,
                                BCCED2D01AE03BE20094EB7E /* 
MWKSectionListTests.m in Sources */,
+                               BC7E4A521B34B53E00EECD8B /* 
MWKLanguageLinkControllerTests.m in Sources */,
                                BC0FED6B1AAA0268002488D7 /* 
MWKDataStoreStorageTests.m in Sources */,
                                0484B9071ABB50FA00874073 /* WMFArticleParsing.m 
in Sources */,
                                BC0FED751AAA026C002488D7 /* 
NSArray+BKIndexTests.m in Sources */,
@@ -3600,6 +3608,7 @@
                                        
"$(SDKROOT)/Developer/Library/Frameworks",
                                        "$(inherited)",
                                );
+                               GCC_PREFIX_HEADER = 
"WikipediaUnitTests/Supporting Files/WikipediaUnitTests-Prefix.pch";
                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                                INFOPLIST_FILE = "WikipediaUnitTests/Supporting 
Files/Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 8.1;
@@ -3707,6 +3716,7 @@
                                        
"$(SDKROOT)/Developer/Library/Frameworks",
                                        "$(inherited)",
                                );
+                               GCC_PREFIX_HEADER = 
"WikipediaUnitTests/Supporting Files/WikipediaUnitTests-Prefix.pch";
                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                                INFOPLIST_FILE = "WikipediaUnitTests/Supporting 
Files/Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 8.1;
@@ -3729,9 +3739,12 @@
                                        
"$(SDKROOT)/Developer/Library/Frameworks",
                                        "$(inherited)",
                                );
+                               GCC_PREFIX_HEADER = 
"WikipediaUnitTests/Supporting Files/WikipediaUnitTests-Prefix.pch";
                                GCC_PREPROCESSOR_DEFINITIONS = (
                                        "$(inherited)",
                                        
"FB_REFERENCE_IMAGE_DIR=\"$(PROJECT_DIR)/WikipediaUnitTests/Reference 
Snapshots\"",
+                                       "MKT_SHORTHAND=1",
+                                       "HC_SHORTHAND=1",
                                );
                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                                INFOPLIST_FILE = "WikipediaUnitTests/Supporting 
Files/Info.plist";
@@ -3756,6 +3769,7 @@
                                        
"$(SDKROOT)/Developer/Library/Frameworks",
                                        "$(inherited)",
                                );
+                               GCC_PREFIX_HEADER = 
"WikipediaUnitTests/Supporting Files/WikipediaUnitTests-Prefix.pch";
                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                                INFOPLIST_FILE = "WikipediaUnitTests/Supporting 
Files/Info.plist";
                                IPHONEOS_DEPLOYMENT_TARGET = 8.1;
diff --git a/Wikipedia/UI-V5/Global.h b/Wikipedia/UI-V5/Global.h
index 9e7cf48..b6bca8a 100644
--- a/Wikipedia/UI-V5/Global.h
+++ b/Wikipedia/UI-V5/Global.h
@@ -9,6 +9,7 @@
 #endif // end DEBUG
 
 #import "WMFGCDHelpers.h"
+#import "NSObjectUtilities.h"
 
 #import "RootViewController.h"
 #import "CenterNavController.h"
diff --git a/Wikipedia/View Controllers/Languages/LanguagesViewController.m 
b/Wikipedia/View Controllers/Languages/LanguagesViewController.m
index 4f124b3..c0e5e3c 100644
--- a/Wikipedia/View Controllers/Languages/LanguagesViewController.m
+++ b/Wikipedia/View Controllers/Languages/LanguagesViewController.m
@@ -261,7 +261,9 @@
 
 - (void)tableView:(UITableView*)tableView 
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
-    [self.languageSelectionDelegate languageSelected:[self 
languageAtIndexPath:indexPath] sender:self];
+    MWKLanguageLink* selectedLanguage = [self languageAtIndexPath:indexPath];
+    [self.langLinkController saveSelectedLanguage:selectedLanguage];
+    [self.languageSelectionDelegate languageSelected:selectedLanguage 
sender:self];
 }
 
 #pragma mark - UITextFieldDelegate
diff --git a/Wikipedia/View Controllers/Languages/MWKLanguageLinkController.h 
b/Wikipedia/View Controllers/Languages/MWKLanguageLinkController.h
index 40168ba..2e4a4db 100644
--- a/Wikipedia/View Controllers/Languages/MWKLanguageLinkController.h
+++ b/Wikipedia/View Controllers/Languages/MWKLanguageLinkController.h
@@ -44,6 +44,10 @@
                       success:(dispatch_block_t)success
                       failure:(void (^ __nullable)(NSError* __nonnull))failure;
 
+- (void)saveSelectedLanguage:(MWKLanguageLink*)language;
+
+- (void)saveSelectedLanguageCode:(NSString*)languageCode;
+
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/Wikipedia/View Controllers/Languages/MWKLanguageLinkController.m 
b/Wikipedia/View Controllers/Languages/MWKLanguageLinkController.m
index cfde35d..f3e498a 100644
--- a/Wikipedia/View Controllers/Languages/MWKLanguageLinkController.m
+++ b/Wikipedia/View Controllers/Languages/MWKLanguageLinkController.m
@@ -6,7 +6,7 @@
 //  Copyright (c) 2015 Wikimedia Foundation. All rights reserved.
 //
 
-#import "MWKLanguageLinkController.h"
+#import "MWKLanguageLinkController_Private.h"
 #import "MWKTitle.h"
 #import "MWKLanguageLink.h"
 #import "MWKLanguageLinkFetcher.h"
@@ -21,6 +21,35 @@
 #import <BlocksKit/BlocksKit.h>
 
 NS_ASSUME_NONNULL_BEGIN
+
+static NSString* const WMFPreviousLanguagesKey = 
@"WMFPreviousSelectedLanguagesKey";
+
+void WMFDeletePreviouslySelectedLanguages() {
+    [[NSUserDefaults standardUserDefaults] 
removeObjectForKey:WMFPreviousLanguagesKey];
+    [[NSUserDefaults standardUserDefaults] synchronize];
+}
+
+NSArray* WMFReadPreviouslySelectedLanguages() {
+    return [[NSUserDefaults standardUserDefaults] 
arrayForKey:WMFPreviousLanguagesKey] ? : @[];
+}
+
+/// Get the union of OS preferred languages & previously selected languages.
+static NSArray* WMFReadPreviousAndPreferredLanguages() {
+    NSMutableSet* preferredLanguages = [NSMutableSet setWithArray:[NSLocale 
preferredLanguages]];
+    [preferredLanguages 
addObjectsFromArray:WMFReadPreviouslySelectedLanguages()];
+    return [preferredLanguages allObjects];
+}
+
+/// Uniquely append @c languageCode to the list of previously selected 
languages.
+static NSArray* WMFAppendAndWriteToPreviousLanguages(NSString* languageCode) {
+    NSMutableArray* langCodes = 
WMFReadPreviouslySelectedLanguages().mutableCopy;
+    if (![langCodes containsObject:languageCode]) {
+        [langCodes addObject:languageCode];
+        [[NSUserDefaults standardUserDefaults] setObject:langCodes 
forKey:WMFPreviousLanguagesKey];
+        [[NSUserDefaults standardUserDefaults] synchronize];
+    }
+    return langCodes;
+}
 
 /**
  * List of unsupported language codes.
@@ -39,8 +68,6 @@
 }
 
 @interface MWKLanguageLinkController ()
-
-@property (copy, nonatomic) NSArray* languageLinks;
 
 @property (readonly, strong, nonatomic) MWKLanguageLinkFetcher* fetcher;
 
@@ -92,6 +119,14 @@
 
 #pragma mark - Getters & Setters
 
+- (NSArray*)languageCodes {
+    return [self.languageLinks 
valueForKey:WMF_SAFE_KEYPATH(MWKLanguageLink.new, languageCode)];
+}
+
+- (NSArray*)filteredPreferredLanguageCodes {
+    return [self.filteredPreferredLanguages 
valueForKey:WMF_SAFE_KEYPATH(MWKLanguageLink.new, languageCode)];
+}
+
 - (void)setLanguageFilter:(NSString* __nullable)filterString {
     if (WMF_EQUAL(self.languageFilter, isEqualToString:, filterString)) {
         return;
@@ -130,17 +165,30 @@
 }
 
 - (void)updateFilteredLanguages {
+    [self 
updateFilteredLanguagesWithPreviousLanguages:WMFReadPreviousAndPreferredLanguages()];
+}
+
+- 
(void)updateFilteredLanguagesWithPreviousLanguages:(NSArray*)previousLanguages {
     NSArray* sortedAndFilteredLanguages = [self 
sortedAndFilteredLanguageLinks];
-
+    NSArray* preferredLangs             = 
WMFReadPreviousAndPreferredLanguages();
     self.filteredPreferredLanguages = [sortedAndFilteredLanguages 
bk_select:^BOOL (MWKLanguageLink* langLink) {
-        return [[NSLocale preferredLanguages] 
containsObject:langLink.languageCode];
+        return [preferredLangs containsObject:langLink.languageCode];
     }];
-
     self.filteredOtherLanguages = [sortedAndFilteredLanguages bk_select:^BOOL 
(MWKLanguageLink* langLink) {
         return ![self.filteredPreferredLanguages containsObject:langLink];
     }];
 }
 
+#pragma mark - Saving
+
+- (void)saveSelectedLanguage:(MWKLanguageLink*)language {
+    [self saveSelectedLanguageCode:language.languageCode];
+}
+
+- (void)saveSelectedLanguageCode:(NSString*)languageCode {
+    [self 
updateFilteredLanguagesWithPreviousLanguages:WMFAppendAndWriteToPreviousLanguages(languageCode)];
+}
+
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/Wikipedia/View 
Controllers/Languages/MWKLanguageLinkController_Private.h b/Wikipedia/View 
Controllers/Languages/MWKLanguageLinkController_Private.h
new file mode 100644
index 0000000..39085c9
--- /dev/null
+++ b/Wikipedia/View Controllers/Languages/MWKLanguageLinkController_Private.h
@@ -0,0 +1,37 @@
+//
+//  MWKLanguageLinkController_Private.h
+//  Wikipedia
+//
+//  Created by Brian Gerstle on 6/19/15.
+//  Copyright (c) 2015 Wikimedia Foundation. All rights reserved.
+//
+
+#import "MWKLanguageLinkController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Delete all previously selected languages.
+ * @warning For testing only!
+ */
+extern void WMFDeletePreviouslySelectedLanguages();
+
+/**
+ * Reads previously selected languages from storage.
+ * @return The previously selected languages, or an empty array of none were 
previously selected.
+ */
+extern NSArray* WMFReadPreviouslySelectedLanguages();
+
+@interface MWKLanguageLinkController ()
+
+@property (copy, nonatomic) NSArray* languageLinks;
+
+/// @return All the language codes in @c filteredPreferredLanguages
+- (NSArray*)filteredPreferredLanguageCodes;
+
+/// @return All the language codes in @c languageLinks
+- (NSArray*)languageCodes;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/WikipediaUnitTests/MWKLanguageLinkControllerTests.m 
b/WikipediaUnitTests/MWKLanguageLinkControllerTests.m
new file mode 100644
index 0000000..a9af389
--- /dev/null
+++ b/WikipediaUnitTests/MWKLanguageLinkControllerTests.m
@@ -0,0 +1,113 @@
+//
+//  MWKLanguageLinkControllerTests.m
+//  Wikipedia
+//
+//  Created by Brian Gerstle on 6/19/15.
+//  Copyright (c) 2015 Wikimedia Foundation. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <XCTest/XCTest.h>
+#import "MWKLanguageLinkController_Private.h"
+#import "MWKLanguageLink.h"
+#import <OCHamcrest/OCHamcrest.h>
+
+@interface MWKLanguageLinkControllerTests : XCTestCase
+@property (strong, nonatomic) MWKLanguageLinkController* controller;
+@end
+
+@implementation MWKLanguageLinkControllerTests
+
+- (void)setUp {
+    [super setUp];
+
+    NSAssert([[NSLocale preferredLanguages] containsObject:@"en"],
+             @"For simplicity these tests assume the simulator has 'English' 
has one of its preferred languages.");
+
+    // all tests must start w/ a clean slate
+    WMFDeletePreviouslySelectedLanguages();
+    [self instantiateController];
+}
+
+- (void)testReadPreviouslySelectedLanguagesReturnsEmpty {
+    assertThat(WMFReadPreviouslySelectedLanguages(), hasCountOf(0));
+}
+
+- (void)testDefaultsToDevicePreferredLanguages {
+    NSParameterAssert(self.controller.filteredPreferredLanguageCodes.count > 
0);
+
+    /*
+       using weaker "intersection" test since there might be a case where the 
sim preferred languages have
+       more than what's defined in the static language data
+     */
+    XCTAssertTrue([[NSSet 
setWithArray:self.controller.filteredPreferredLanguageCodes]
+                   intersectsSet:
+                   [NSSet setWithArray:[NSLocale preferredLanguages]]]);
+
+    [self verifyAllLanguageArrayProperties];
+}
+
+- 
(void)testSaveSelectedLanguageUpdatesTheControllersFilteredPreferredLanguages {
+    NSAssert(![self.controller.filteredPreferredLanguageCodes 
containsObject:@"test"],
+             @"'test' shouldn't be a default member of preferred languages!");
+
+    [self.controller saveSelectedLanguageCode:@"test"];
+
+    assertThat(self.controller.filteredPreferredLanguageCodes, 
hasItem(@"test"));
+    [self verifyAllLanguageArrayProperties];
+}
+
+- (void)testUniqueAppendToPreferredLanguages {
+    [self.controller saveSelectedLanguageCode:@"test"];
+    NSArray* firstAppend = [self.controller.filteredOtherLanguages copy];
+
+    [self.controller saveSelectedLanguageCode:@"test"];
+    NSArray* secondAppend = [self.controller.filteredOtherLanguages copy];
+
+    assertThat(firstAppend, is(equalTo(secondAppend)));
+
+    [self verifyAllLanguageArrayProperties];
+}
+
+- (void)testPersistentSaves {
+    id firstController = self.controller;
+    [firstController saveSelectedLanguageCode:@"test"];
+    [self instantiateController];
+    NSParameterAssert(firstController != self.controller);
+    assertThat(self.controller.filteredPreferredLanguageCodes, 
hasItem(@"test"));
+}
+
+#pragma mark - Utils
+
+- (void)instantiateController {
+    self.controller = [MWKLanguageLinkController new];
+    // temporarily repurpose static lang data for testing
+    [self.controller loadStaticSiteLanguageData];
+}
+
+- (void)verifyAllLanguageArrayProperties {
+    [self verifyPreferredAndOtherSumIsAllLanguages];
+    [self verifyPreferredAndOtherAreDisjoint];
+}
+
+- (void)verifyPreferredAndOtherAreDisjoint {
+    XCTAssertFalse([[NSSet 
setWithArray:self.controller.filteredPreferredLanguages]
+                    intersectsSet:
+                    [NSSet 
setWithArray:self.controller.filteredOtherLanguages]],
+                   @"'preferred' and 'other' languages shouldn't intersect: \n 
preferred: %@ \nother: %@",
+                   self.controller.filteredPreferredLanguages, 
self.controller.filteredOtherLanguages);
+}
+
+- (void)verifyPreferredAndOtherSumIsAllLanguages {
+    NSSet* joinedLanguages = [NSSet setWithArray:
+                              [self.controller.filteredPreferredLanguages
+                               
arrayByAddingObjectsFromArray:self.controller.filteredOtherLanguages]];
+
+    assertThat(joinedLanguages,
+               hasCountOf(self.controller.filteredOtherLanguages.count
+                          + self.controller.filteredPreferredLanguages.count));
+
+    assertThat([NSSet setWithArray:self.controller.languageLinks], 
is(equalTo(joinedLanguages)));
+}
+
+@end
diff --git a/WikipediaUnitTests/Supporting Files/WikipediaUnitTests-Prefix.pch 
b/WikipediaUnitTests/Supporting Files/WikipediaUnitTests-Prefix.pch
new file mode 100644
index 0000000..0413211
--- /dev/null
+++ b/WikipediaUnitTests/Supporting Files/WikipediaUnitTests-Prefix.pch
@@ -0,0 +1,15 @@
+//
+//  WikipediaUnitTests-Prefix.pch
+//  Wikipedia
+//
+//  Created by Brian Gerstle on 6/19/15.
+//  Copyright (c) 2015 Wikimedia Foundation. All rights reserved.
+//
+
+#ifndef Wikipedia_WikipediaUnitTests_Prefix_pch
+#define Wikipedia_WikipediaUnitTests_Prefix_pch
+
+#import <XCTest/XCTest.h>
+#import "Global.h"
+
+#endif

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8f3eef90811ca600941efcc6db256d471fd87a49
Gerrit-PatchSet: 1
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Bgerstle <bgers...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to