From 79f6cb2d8f998d80004130c33a3b83a74f90de58 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Tue, 3 Dec 2019 13:33:21 +0100 Subject: [PATCH 01/29] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4ca26ba..16fe1d3 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ Github Current Release Cocoapods Platforms - Xcode 11.0+ + Xcode 11.0+ iOS 9.0+ - Swift 5.1+ + Swift 5.1+ Github Repo Size Github Code Size Github Closed PR's From 3c6619a83a11ddbf05e45180c8734a4fee7efddd Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Tue, 14 Jan 2020 16:51:23 +0100 Subject: [PATCH 02/29] Fix license link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 16fe1d3..27dfd43 100644 --- a/README.md +++ b/README.md @@ -82,4 +82,4 @@ pod 'SHDateFormatter' ## License -SHDateFormatter is available under the MIT license. See the LICENSE file for more info. +Source is available under the MIT license. See the [LICENSE](LICENSE) file for more info. From af9aacb47816f176ee68b7b677d35994ccd675c5 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Sun, 2 Feb 2020 21:10:45 +0100 Subject: [PATCH 03/29] Fix fastfile for Gihthub Actions --- fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 7bbecd9..23c0aa3 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -1,6 +1,6 @@ import_from_git( - url: "git@github.com:Blackjacx/Scripts.git", + url: "https://github.com/Blackjacx/Scripts.git", branch: "master", path: "Fastfile_Pods" ) \ No newline at end of file From 955f4e49c98c9630ee1bdcc84e3ae25986565507 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Sun, 2 Feb 2020 21:45:05 +0100 Subject: [PATCH 04/29] Switch downloaded fast file --- fastlane/Fastfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 23c0aa3..c8c9971 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -2,5 +2,5 @@ import_from_git( url: "https://github.com/Blackjacx/Scripts.git", branch: "master", - path: "Fastfile_Pods" + path: "frameworks/Fastfile" ) \ No newline at end of file From 10f9497dbadeb6b18ffb2e4760d67d310a567e0e Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 01:08:37 +0100 Subject: [PATCH 05/29] Create ci.yml --- .github/workflows/ci.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..eaad0f6 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,36 @@ +name: CI +on: [push, pull_request] +env: + FRAMEWORK_SCHEME: "SHDateFormatter" + FRAMEWORK_WORKSPACE: "SHDateFormatter.xcworkspace" + FASTLANE_XCODE_LIST_TIMEOUT: 999 + FASTLANE_WORK_DIR: . + MINT_PATH: ${{ github.workspace }}/mint + +jobs: + bootstrap-and-test: + name: Test + runs-on: macos + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Download Configuration Files + run: bash <(curl -s https://raw.githubusercontent.com/Blackjacx/Scripts/master/frameworks/bootstrap.sh) -d + - name: Cache RubyGems + uses: actions/cache@v1 + with: + path: vendor/bundle + key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: ${{ runner.os }}-gem- + - name: Cache Mint packages + uses: actions/cache@v1 + with: + path: ${{ env.MINT_PATH }} + key: ${{ runner.os }}-mint-${{ hashFiles('**/Mintfile') }} + restore-keys: ${{ runner.os }}-mint- + - name: Install dependencies + run: bash <(curl -s https://raw.githubusercontent.com/Blackjacx/Scripts/master/frameworks/bootstrap.sh) + - name: Run tests + run: bundle exec fastlane test framework:${{ env.FRAMEWORK_SCHEME }} run_danger:${{ github.event_name }} + env: + DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 02d374423f1bc342385dbac07f80598302141ef9 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 02:22:21 +0100 Subject: [PATCH 06/29] Update ci.yml --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eaad0f6..546c102 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,8 @@ name: CI on: [push, pull_request] env: - FRAMEWORK_SCHEME: "SHDateFormatter" + FRAMEWORK: "SHDateFormatter" + XCOV_SCHEME: "SHDateFormatter-iOS" FRAMEWORK_WORKSPACE: "SHDateFormatter.xcworkspace" FASTLANE_XCODE_LIST_TIMEOUT: 999 FASTLANE_WORK_DIR: . @@ -31,6 +32,6 @@ jobs: - name: Install dependencies run: bash <(curl -s https://raw.githubusercontent.com/Blackjacx/Scripts/master/frameworks/bootstrap.sh) - name: Run tests - run: bundle exec fastlane test framework:${{ env.FRAMEWORK_SCHEME }} run_danger:${{ github.event_name }} + run: bundle exec fastlane test framework:${{ env.FRAMEWORK }} run_danger:${{ github.event_name }} env: DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 2e3709fcbc0d39a157f30e03830099a6a2b3c4a8 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 02:23:04 +0100 Subject: [PATCH 07/29] Delete files --- .codecov.yml | 3 --- Gemfile | 16 ---------------- 2 files changed, 19 deletions(-) delete mode 100644 .codecov.yml delete mode 100644 Gemfile diff --git a/.codecov.yml b/.codecov.yml deleted file mode 100644 index 162b7ce..0000000 --- a/.codecov.yml +++ /dev/null @@ -1,3 +0,0 @@ -coverage: - ignore: - - ./Example/.* \ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 4dac1e4..0000000 --- a/Gemfile +++ /dev/null @@ -1,16 +0,0 @@ -# Autogenerated by fastlane -# -# Ensure this file is checked in to source control! - -source "https://rubygems.org" - -gem 'fastlane' -gem 'cocoapods' -gem 'xcov' -gem 'danger' -gem 'danger-changelog' -gem 'danger-commit_lint' -gem 'danger-swiftlint' - -plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') -eval_gemfile(plugins_path) if File.exist?(plugins_path) From 13adbd861936456b72ac9bf63f82f1a3a970ed5c Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 02:23:34 +0100 Subject: [PATCH 08/29] Move files to hidden gh folder --- {github => .github}/CONTRIBUTING.md | 0 {github => .github}/ISSUE_TEMPLATE.md | 0 {github => .github}/PULL_REQUEST_TEMPLATE.md | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {github => .github}/CONTRIBUTING.md (100%) rename {github => .github}/ISSUE_TEMPLATE.md (100%) rename {github => .github}/PULL_REQUEST_TEMPLATE.md (100%) diff --git a/github/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 100% rename from github/CONTRIBUTING.md rename to .github/CONTRIBUTING.md diff --git a/github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md similarity index 100% rename from github/ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE.md diff --git a/github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from github/PULL_REQUEST_TEMPLATE.md rename to .github/PULL_REQUEST_TEMPLATE.md From 8d97189b6f28328dbaf4ebf771167d85e3fe9482 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 02:25:18 +0100 Subject: [PATCH 09/29] Update .gitignore --- .gitignore | 66 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 0fb4f08..ad434f3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,28 @@ -# OS X -.DS_Store - # Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## CI +codesigndoc_exports + +# Mint dependencies file which is downloaded +Mintfile +# Swiftlint config file which is downloaded +.swiftlint.yml +# Danger config file which is downloaded +Dangerfile +# Ruby gems config file which is downloaded +Gemfile +# Bundler configuration which is bootstrapped +.bundle +# Bundler vendor information which is bootstrapped +vendor + +## Build generated build/ +DerivedData/ + +## Various settings *.pbxuser !default.pbxuser *.mode1v3 @@ -12,29 +32,43 @@ build/ *.perspectivev3 !default.perspectivev3 xcuserdata/ -*.xccheckout -profile + +## Other *.moved-aside -DerivedData +*.xccheckout +*.xcscmblueprint + +## Obj-C/Swift specific *.hmap *.ipa +*.dSYM.zip +*.dSYM -# Auto generated -docs/ +## Playgrounds +timeline.xctimeline +playground.xcworkspace -# Bundler -.bundle +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +# Package.pins +.build/ -Carthage +# CocoaPods +# # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control -# -# Note: if you ignore the Pods directory, make sure to uncomment -# `pod install` in .travis.yml +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # Pods/ +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts +Carthage/Build + # SPM .swiftpm @@ -43,7 +77,7 @@ Pods/ # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: -# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md +# https://docs.fastlane.tools/best-practices/source-control/#source-control fastlane/report.xml fastlane/Preview.html From 7bdb501ee8c749e76159a19acc9b54e242fa8901 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 02:27:07 +0100 Subject: [PATCH 10/29] Update pods and gemd --- Gemfile.lock | 85 +++++++++++++++++++++++++++++----------------------- Podfile.lock | 4 +-- 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index ff2cdde..a49d4e7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.1) + CFPropertyList (3.0.2) activesupport (4.2.11.1) i18n (~> 0.7) minitest (~> 5.1) @@ -61,7 +61,7 @@ GEM concurrent-ruby (1.1.5) cork (0.3.0) colored2 (~> 3.1) - danger (6.1.0) + danger (6.2.0) claide (~> 1.0) claide-plugins (>= 0.9.2) colored2 (~> 3.1) @@ -80,10 +80,13 @@ GEM danger-plugin-api (~> 1.0) danger-plugin-api (1.0.0) danger (> 2.0) - danger-swiftlint (0.23.0) + danger-swiftlint (0.24.0) danger rake (> 10) thor (~> 0.19) + danger-xcov (0.4.1) + danger (>= 2.1) + xcov (>= 1.1.2) declarative (0.0.10) declarative-option (0.1.0) digest-crc (0.4.1) @@ -92,8 +95,8 @@ GEM dotenv (2.7.5) emoji_regex (1.0.1) escape (0.0.4) - excon (0.70.0) - faraday (0.17.1) + excon (0.72.0) + faraday (0.17.3) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.6) faraday (>= 0.7.4) @@ -103,7 +106,7 @@ GEM faraday_middleware (0.13.1) faraday (>= 0.7.4, < 1.0) fastimage (2.1.7) - fastlane (2.137.0) + fastlane (2.141.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.3, < 3.0.0) babosa (>= 1.0.2, < 2.0.0) @@ -112,13 +115,13 @@ GEM commander-fastlane (>= 4.4.6, < 5.0.0) dotenv (>= 2.1.1, < 3.0.0) emoji_regex (>= 0.1, < 2.0) - excon (>= 0.45.0, < 1.0.0) + excon (>= 0.71.0, < 1.0.0) faraday (~> 0.17) faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 0.13.1) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) - google-api-client (>= 0.21.2, < 0.24.0) + google-api-client (>= 0.29.2, < 0.37.0) google-cloud-storage (>= 1.15.0, < 2.0.0) highline (>= 1.7.2, < 2.0.0) json (< 3.0.0) @@ -137,55 +140,58 @@ GEM tty-screen (>= 0.6.3, < 1.0.0) tty-spinner (>= 0.8.0, < 1.0.0) word_wrap (~> 1.0.0) - xcodeproj (>= 1.8.1, < 2.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) fastlane-plugin-changelog (0.15.0) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - git (1.5.0) - google-api-client (0.23.9) + git (1.6.0) + rchardet (~> 1.8) + google-api-client (0.36.4) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.5, < 0.7.0) + googleauth (~> 0.9) httpclient (>= 2.8.1, < 3.0) - mime-types (~> 3.0) + mini_mime (~> 1.0) representable (~> 3.0) retriable (>= 2.0, < 4.0) - signet (~> 0.9) - google-cloud-core (1.4.1) + signet (~> 0.12) + google-cloud-core (1.5.0) google-cloud-env (~> 1.0) + google-cloud-errors (~> 1.0) google-cloud-env (1.3.0) faraday (~> 0.11) - google-cloud-storage (1.16.0) + google-cloud-errors (1.0.0) + google-cloud-storage (1.25.1) + addressable (~> 2.5) digest-crc (~> 0.4) - google-api-client (~> 0.23) + google-api-client (~> 0.33) google-cloud-core (~> 1.2) - googleauth (>= 0.6.2, < 0.10.0) - googleauth (0.6.7) + googleauth (~> 0.9) + mini_mime (~> 1.0) + googleauth (0.10.0) faraday (~> 0.12) jwt (>= 1.4, < 3.0) memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) - signet (~> 0.7) + signet (~> 0.12) highline (1.7.10) http-cookie (1.0.3) domain_name (~> 0.5) httpclient (2.8.3) i18n (0.9.5) concurrent-ruby (~> 1.0) - json (2.2.0) + json (2.3.0) jwt (2.1.0) kramdown (2.1.0) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - memoist (0.16.1) - mime-types (3.3) - mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) - mini_magick (4.9.5) - minitest (5.13.0) + memoist (0.16.2) + mini_magick (4.10.1) + mini_mime (1.0.2) + minitest (5.14.0) molinillo (0.6.6) multi_json (1.14.1) multi_xml (0.6.0) @@ -195,13 +201,15 @@ GEM naturally (2.2.0) netrc (0.11.0) no_proxy_fix (0.1.2) - octokit (4.14.0) + octokit (4.15.0) + faraday (>= 0.9) sawyer (~> 0.8.0, >= 0.5.3) open4 (1.3.4) os (1.0.1) plist (3.5.0) public_suffix (2.0.5) rake (13.0.1) + rchardet (1.8.0) representable (3.0.4) declarative (< 0.1.0) declarative-option (< 0.2.0) @@ -219,7 +227,7 @@ GEM faraday (~> 0.9) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - simctl (1.6.6) + simctl (1.6.7) CFPropertyList naturally slack-notifier (2.3.2) @@ -228,26 +236,26 @@ GEM unicode-display_width (~> 1.1, >= 1.1.1) thor (0.20.3) thread_safe (0.3.6) - tty-cursor (0.7.0) - tty-screen (0.7.0) - tty-spinner (0.9.1) + tty-cursor (0.7.1) + tty-screen (0.7.1) + tty-spinner (0.9.3) tty-cursor (~> 0.7) - tzinfo (1.2.5) + tzinfo (1.2.6) thread_safe (~> 0.1) uber (0.1.0) unf (0.1.4) unf_ext unf_ext (0.0.7.6) - unicode-display_width (1.6.0) + unicode-display_width (1.6.1) word_wrap (1.0.0) - xcodeproj (1.13.0) + xcodeproj (1.14.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.2.6) - xcov (1.7.0) - fastlane (>= 2.82.0, < 3.0.0) + xcov (1.7.2) + fastlane (>= 2.141.0, < 3.0.0) multipart-post slack-notifier terminal-table @@ -268,9 +276,10 @@ DEPENDENCIES danger-changelog danger-commit_lint danger-swiftlint + danger-xcov fastlane fastlane-plugin-changelog xcov BUNDLED WITH - 2.0.1 + 2.1.4 diff --git a/Podfile.lock b/Podfile.lock index 9b55aff..6cc1d22 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - Nimble (8.0.4) + - Nimble (8.0.5) - Quick (2.2.0) DEPENDENCIES: @@ -12,7 +12,7 @@ SPEC REPOS: - Quick SPEC CHECKSUMS: - Nimble: 18d5360282923225d62b09d781f63abc1a0111fc + Nimble: 4ab1aeb9b45553c75b9687196b0fa0713170a332 Quick: 7fb19e13be07b5dfb3b90d4f9824c855a11af40e PODFILE CHECKSUM: 763483d3f1d753931666cf8edc278cad7a865e63 From b1afd00f8f6bb55cb7aaaadb546504972646534d Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 02:28:22 +0100 Subject: [PATCH 11/29] Integrate swiftlint --- SHDateFormatter.xcodeproj/project.pbxproj | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/SHDateFormatter.xcodeproj/project.pbxproj b/SHDateFormatter.xcodeproj/project.pbxproj index 2ae5fe1..cce8ac5 100644 --- a/SHDateFormatter.xcodeproj/project.pbxproj +++ b/SHDateFormatter.xcodeproj/project.pbxproj @@ -173,6 +173,7 @@ isa = PBXNativeTarget; buildConfigurationList = B9C8324321C84B300008ED90 /* Build configuration list for PBXNativeTarget "SHDateFormatter-iOS" */; buildPhases = ( + B902957023E7AE8B00269EA9 /* SwiftLint */, B9C8323921C84B300008ED90 /* Headers */, B9C8323A21C84B300008ED90 /* Sources */, B9C8323B21C84B300008ED90 /* Frameworks */, @@ -272,6 +273,24 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + B902957023E7AE8B00269EA9 /* SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = SwiftLint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mint run swiftlint\n"; + }; FDF77FD1B9B4ED725533FA48 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; From 5221aeca214a0418f9b2c1f9233b864d4c67fa41 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 02:42:51 +0100 Subject: [PATCH 12/29] Clear swiftlint warnings --- Example/source/AppDelegate.swift | 36 +- Example/source/ViewController.swift | 12 +- SHDateFormatter.xcodeproj/project.pbxproj | 33 +- Tests/DateFormatterTests.swift | 326 ++++++++++-------- source/Classes/Date+Utils.swift | 16 +- .../Classes/SHDateFormatter+Extension.swift | 8 +- source/Classes/SHDateFormatter.swift | 6 +- source/Classes/TimeZone+Extensions.swift | 2 +- 8 files changed, 236 insertions(+), 203 deletions(-) diff --git a/Example/source/AppDelegate.swift b/Example/source/AppDelegate.swift index 43c98e8..cf536d8 100644 --- a/Example/source/AppDelegate.swift +++ b/Example/source/AppDelegate.swift @@ -4,7 +4,7 @@ // SHDateFormatter // // Created by Stefan Herold on 10/07/2016. -// Copyright (c) 2016 Stefan Herold. All rights reserved. +// Copyright © 2020 Stefan Herold. All rights reserved. // import UIKit @@ -15,33 +15,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - private func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { - // Override point for customization after application launch. - return true + private func application(application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + true } - func applicationWillResignActive(_ application: UIApplication) { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - } - - + func applicationWillResignActive(_ application: UIApplication) {} + func applicationDidEnterBackground(_ application: UIApplication) {} + func applicationWillEnterForeground(_ application: UIApplication) {} + func applicationDidBecomeActive(_ application: UIApplication) {} + func applicationWillTerminate(_ application: UIApplication) {} } diff --git a/Example/source/ViewController.swift b/Example/source/ViewController.swift index 5769f1b..973b698 100644 --- a/Example/source/ViewController.swift +++ b/Example/source/ViewController.swift @@ -6,12 +6,12 @@ class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - let deDE_Locale = Locale(identifier: "de_DE") - let enUS_Locale = Locale(identifier: "en_US") - let frFR_Locale = Locale(identifier: "fr_FR") + let deDELocale = Locale(identifier: "de_DE") + let enUSLocale = Locale(identifier: "en_US") + let frFRLocale = Locale(identifier: "fr_FR") - print(SHDateFormatter.is12hFormat(deDE_Locale)) - print(SHDateFormatter.is12hFormat(enUS_Locale)) - print(SHDateFormatter.is12hFormat(frFR_Locale)) + print(SHDateFormatter.is12hFormat(deDELocale)) + print(SHDateFormatter.is12hFormat(enUSLocale)) + print(SHDateFormatter.is12hFormat(frFRLocale)) } } diff --git a/SHDateFormatter.xcodeproj/project.pbxproj b/SHDateFormatter.xcodeproj/project.pbxproj index cce8ac5..5f60735 100644 --- a/SHDateFormatter.xcodeproj/project.pbxproj +++ b/SHDateFormatter.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -196,7 +196,7 @@ attributes = { LastSwiftUpdateCheck = 0830; LastUpgradeCheck = 1010; - ORGANIZATIONNAME = CocoaPods; + ORGANIZATIONNAME = "Stefan Herold"; TargetAttributes = { 607FACE41AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; @@ -211,7 +211,7 @@ }; }; buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SHDateFormatter" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 11.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -436,7 +436,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -450,7 +451,11 @@ "$(inherited)", ); INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -462,7 +467,11 @@ baseConfigurationReference = 922B1BD143DA18A28738AA1C /* Pods-TestPods-SHDateFormatter_iOS_Tests.release.xcconfig */; buildSettings = { INFOPLIST_FILE = Tests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -491,7 +500,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = source/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.codingcobra.SHDateFormatter; @@ -527,7 +540,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = source/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.codingcobra.SHDateFormatter; PRODUCT_NAME = SHDateFormatter; diff --git a/Tests/DateFormatterTests.swift b/Tests/DateFormatterTests.swift index 899ffc7..16aa244 100644 --- a/Tests/DateFormatterTests.swift +++ b/Tests/DateFormatterTests.swift @@ -3,17 +3,19 @@ import Quick import Nimble @testable import SHDateFormatter -class DateFormatterTests: QuickSpec { +// swiftlint:disable:next type_body_length +final class DateFormatterTests: QuickSpec { + // swiftlint:disable:next function_body_length override func spec() { - describe("DateFormatter") { + let gmtZone = TimeZone(identifier: "Europe/London")! - let gmtZone = TimeZone(identifier: "Europe/London")! + let deDELocale = Locale(identifier: "de_DE") + let enUSLocale = Locale(identifier: "en_US") + let frFRLocale = Locale(identifier: "fr_FR") - let deDE_Locale = Locale(identifier: "de_DE") - let enUS_Locale = Locale(identifier: "en_US") - let frFR_Locale = Locale(identifier: "fr_FR") + describe("DateFormatter") { func dateFrom(year: Int, month: Int, day: Int, hour: Int, min: Int, sec: Int) -> Date { @@ -48,15 +50,15 @@ class DateFormatterTests: QuickSpec { context("12h format") { it("uses 12h format for locale en_US") { - expect(SHDateFormatter.is12hFormat(enUS_Locale)) == true + expect(SHDateFormatter.is12hFormat(enUSLocale)) == true } it("uses 24h format for locale de_DE") { - expect(SHDateFormatter.is12hFormat(deDE_Locale)) == false + expect(SHDateFormatter.is12hFormat(deDELocale)) == false } it("uses 24h format for locale fr_FR") { - expect(SHDateFormatter.is12hFormat(frFR_Locale)) == false + expect(SHDateFormatter.is12hFormat(frFRLocale)) == false } } @@ -85,131 +87,167 @@ class DateFormatterTests: QuickSpec { let testDate = dateFrom(year: 2000, month: 1, day: 1, hour: 0, min: 0, sec: 0) // 12 am a Saturday with DST - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "Sa" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "Samstag" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "00:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "01.01.2000, 00:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "1.1." } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "01.01.00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "1. Januar 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "2000-01-01T00:00:00Z" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Sat" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Saturday" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "12:00 AM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Jan 1, 2000 at 12:00 AM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone) expect(result) == "1/1" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone) expect(result) == "1/1/00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone) expect(result) == "January 1, 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone) expect(result) == "2000-01-01T00:00:00Z" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone) expect(result) == "sam." } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone) expect(result) == "samedi" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone) expect(result) == "00:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone) expect(result) == "1 janv. 2000 à 00:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone) expect(result) == "01/01" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone) expect(result) == "01/01/2000" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone) expect(result) == "1 janvier 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone) expect(result) == "2000-01-01T00:00:00Z" } } @@ -219,131 +257,131 @@ class DateFormatterTests: QuickSpec { let testDate = dateFrom(year: 2000, month: 1, day: 2, hour: 12, min: 0, sec: 0) // 12 pm a Sunday - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDELocale, timeZone: gmtZone) expect(result) == "So" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDELocale, timeZone: gmtZone) expect(result) == "Sonntag" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDELocale, timeZone: gmtZone) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDELocale, timeZone: gmtZone) expect(result) == "02.01.2000, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDELocale, timeZone: gmtZone) expect(result) == "2.1." } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDELocale, timeZone: gmtZone) expect(result) == "02.01.00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDELocale, timeZone: gmtZone) expect(result) == "2. Januar 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDELocale, timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Sun" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Sunday" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUSLocale, timeZone: gmtZone) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Jan 2, 2000 at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone) expect(result) == "1/2" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone) expect(result) == "1/2/00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone) expect(result) == "January 2, 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone) expect(result) == "dim." } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone) expect(result) == "dimanche" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone) expect(result) == "2 janv. 2000 à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone) expect(result) == "02/01" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone) expect(result) == "02/01/2000" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone) expect(result) == "2 janvier 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } @@ -355,131 +393,131 @@ class DateFormatterTests: QuickSpec { let testDate = todayNoon().minus24Hours() - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Gestern, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Gestern" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Gestern" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Yesterday at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Yesterday" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Yesterday" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "hier à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "hier" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "hier" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } @@ -489,131 +527,131 @@ class DateFormatterTests: QuickSpec { let testDate = todayNoon() - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Heute, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Heute" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Heute" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Today at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Today" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Today" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "aujourd’hui à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "aujourd’hui" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "aujourd’hui" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } @@ -623,131 +661,131 @@ class DateFormatterTests: QuickSpec { let testDate = todayNoon().plus24Hours() - context("\(deDE_Locale.identifier)") { + context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Morgen, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Morgen" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Morgen" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDE_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } - context("\(enUS_Locale.identifier)") { + context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Tomorrow at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Tomorrow" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "Tomorrow" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUS_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } - context("\(frFR_Locale.identifier)") { + context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "demain à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "demain" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "demain" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFR_Locale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } } diff --git a/source/Classes/Date+Utils.swift b/source/Classes/Date+Utils.swift index c403df6..2b3772c 100644 --- a/source/Classes/Date+Utils.swift +++ b/source/Classes/Date+Utils.swift @@ -3,24 +3,22 @@ // SHDateFormatter // // Created by Stefan Herold on 06.07.17. -// Copyright © 2017 StefanHerold. All rights reserved. +// Copyright © 2020 Stefan Herold. All rights reserved. // import Foundation -struct DateConstants { +enum DateConstants { static let dayInSeconds = 86400.0 } -extension Date { +public extension Date { - public func minus24Hours() -> Date { - - return addingTimeInterval(-DateConstants.dayInSeconds) + func minus24Hours() -> Date { + addingTimeInterval(-DateConstants.dayInSeconds) } - public func plus24Hours() -> Date { - - return addingTimeInterval(DateConstants.dayInSeconds) + func plus24Hours() -> Date { + addingTimeInterval(DateConstants.dayInSeconds) } } diff --git a/source/Classes/SHDateFormatter+Extension.swift b/source/Classes/SHDateFormatter+Extension.swift index df65211..50b65a7 100644 --- a/source/Classes/SHDateFormatter+Extension.swift +++ b/source/Classes/SHDateFormatter+Extension.swift @@ -3,14 +3,14 @@ // SHDateFormatter // // Created by Stefan Herold on 07/10/2016. -// Copyright © 2016 StefanHerold. All rights reserved. +// Copyright © 2020 Stefan Herold. All rights reserved. // import Foundation -extension SHDateFormatter { - - public func localizedTimeStringFromDate(date: Date?) -> String { +public extension SHDateFormatter { + + func localizedTimeStringFromDate(date: Date?) -> String { date.map { string(from: $0, format: .shortTimeNoDate) } ?? "--:--" } } diff --git a/source/Classes/SHDateFormatter.swift b/source/Classes/SHDateFormatter.swift index bc9a71f..816f4c5 100644 --- a/source/Classes/SHDateFormatter.swift +++ b/source/Classes/SHDateFormatter.swift @@ -1,6 +1,6 @@ import Foundation -struct Calendars { +enum Calendars { static let gregorian: Calendar = Calendar(identifier: .gregorian) } @@ -44,9 +44,7 @@ public struct SHDateFormatter { let locale = SHDateFormatter.formatter.locale switch format { - case .shortWeekdayName: fallthrough - case .longWeekdayName: fallthrough - case .noTimeShortDateNoYear: + case .shortWeekdayName, .longWeekdayName, .noTimeShortDateNoYear: SHDateFormatter.formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: format.rawValue, options: 0, locale: locale) case .shortTimeNoDate: diff --git a/source/Classes/TimeZone+Extensions.swift b/source/Classes/TimeZone+Extensions.swift index ad6ba39..a32abab 100644 --- a/source/Classes/TimeZone+Extensions.swift +++ b/source/Classes/TimeZone+Extensions.swift @@ -4,7 +4,7 @@ import Foundation public extension TimeZone { static let GMT = TimeZone(identifier: "GMT")! - + enum Europe { public static let Berlin = TimeZone(identifier: "Europe/Berlin")! public static let London = TimeZone(identifier: "Europe/London")! From bb8b500349f9c855d5e7e4cb550e1f1241be7242 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 02:45:32 +0100 Subject: [PATCH 13/29] Pod update --- SHDateFormatter.xcodeproj/project.pbxproj | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/SHDateFormatter.xcodeproj/project.pbxproj b/SHDateFormatter.xcodeproj/project.pbxproj index 5f60735..7d2d0d4 100644 --- a/SHDateFormatter.xcodeproj/project.pbxproj +++ b/SHDateFormatter.xcodeproj/project.pbxproj @@ -296,15 +296,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-TestPods-SHDateFormatter_iOS_Tests/Pods-TestPods-SHDateFormatter_iOS_Tests-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Nimble/Nimble.framework", - "${BUILT_PRODUCTS_DIR}/Quick/Quick.framework", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-TestPods-SHDateFormatter_iOS_Tests/Pods-TestPods-SHDateFormatter_iOS_Tests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Nimble.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Quick.framework", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-TestPods-SHDateFormatter_iOS_Tests/Pods-TestPods-SHDateFormatter_iOS_Tests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; From 37882e3dbdd0f5fe93a5732d3f4d3bd04d6f2be4 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 03:12:01 +0100 Subject: [PATCH 14/29] Clear swiftlint warnings --- Example/source/AppDelegate.swift | 3 - Tests/DateFormatterTests.swift | 419 ++++++++++++++++++++++----- source/Classes/Date+Utils.swift | 1 - source/Classes/SHDateFormatter.swift | 12 +- 4 files changed, 354 insertions(+), 81 deletions(-) diff --git a/Example/source/AppDelegate.swift b/Example/source/AppDelegate.swift index cf536d8..4df9001 100644 --- a/Example/source/AppDelegate.swift +++ b/Example/source/AppDelegate.swift @@ -1,4 +1,3 @@ - // // AppDelegate.swift // SHDateFormatter @@ -14,7 +13,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - private func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { true @@ -26,4 +24,3 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func applicationDidBecomeActive(_ application: UIApplication) {} func applicationWillTerminate(_ application: UIApplication) {} } - diff --git a/Tests/DateFormatterTests.swift b/Tests/DateFormatterTests.swift index 16aa244..a2b8603 100644 --- a/Tests/DateFormatterTests.swift +++ b/Tests/DateFormatterTests.swift @@ -15,6 +15,8 @@ final class DateFormatterTests: QuickSpec { let enUSLocale = Locale(identifier: "en_US") let frFRLocale = Locale(identifier: "fr_FR") + var testDate: Date = Date() + describe("DateFormatter") { func dateFrom(year: Int, month: Int, day: Int, hour: Int, min: Int, sec: Int) -> Date { @@ -85,7 +87,15 @@ final class DateFormatterTests: QuickSpec { context("Test 2000/01/01/12:00am") { - let testDate = dateFrom(year: 2000, month: 1, day: 1, hour: 0, min: 0, sec: 0) // 12 am a Saturday with DST + beforeEach { + // 12 am a Saturday with DST + testDate = dateFrom(year: 2000, + month: 1, + day: 1, + hour: 0, + min: 0, + sec: 0) + } context("\(deDELocale.identifier)") { @@ -189,22 +199,34 @@ final class DateFormatterTests: QuickSpec { } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "1/1" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "1/1/00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "January 1, 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "2000-01-01T00:00:00Z" } } @@ -212,42 +234,66 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "sam." } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "samedi" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "00:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "1 janv. 2000 à 00:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "01/01" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "01/01/2000" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "1 janvier 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "2000-01-01T00:00:00Z" } } @@ -255,47 +301,79 @@ final class DateFormatterTests: QuickSpec { context("Test 2000/01/02/12:00pm") { - let testDate = dateFrom(year: 2000, month: 1, day: 2, hour: 12, min: 0, sec: 0) // 12 pm a Sunday + beforeEach { + // 12 pm a Sunday + testDate = dateFrom(year: 2000, + month: 1, + day: 2, + hour: 12, + min: 0, + sec: 0) + } context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDELocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "So" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDELocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "Sonntag" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDELocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDELocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "02.01.2000, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDELocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "2.1." } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDELocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "02.01.00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDELocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "2. Januar 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDELocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } @@ -303,42 +381,66 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Sun" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Sunday" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "Jan 2, 2000 at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "1/2" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "1/2/00" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "January 2, 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } @@ -346,42 +448,66 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "dim." } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "dimanche" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "2 janv. 2000 à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "02/01" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "02/01/2000" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "2 janvier 2000" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone) expect(result) == "2000-01-02T12:00:00Z" } } @@ -391,47 +517,80 @@ final class DateFormatterTests: QuickSpec { context("Yesterday Noon") { - let testDate = todayNoon().minus24Hours() + beforeEach { + testDate = todayNoon().minus24Hours() + } context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: deDELocale, + timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Gestern, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Gestern" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Gestern" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -439,42 +598,74 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Yesterday at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Yesterday" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Yesterday" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -482,42 +673,74 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "hier à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "hier" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "hier" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -525,47 +748,81 @@ final class DateFormatterTests: QuickSpec { context("Today Noon") { - let testDate = todayNoon() + beforeEach { + testDate = todayNoon() + } context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Heute, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Heute" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Heute" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -573,17 +830,29 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00 PM" } diff --git a/source/Classes/Date+Utils.swift b/source/Classes/Date+Utils.swift index 2b3772c..56202da 100644 --- a/source/Classes/Date+Utils.swift +++ b/source/Classes/Date+Utils.swift @@ -13,7 +13,6 @@ enum DateConstants { } public extension Date { - func minus24Hours() -> Date { addingTimeInterval(-DateConstants.dayInSeconds) } diff --git a/source/Classes/SHDateFormatter.swift b/source/Classes/SHDateFormatter.swift index 816f4c5..222e0f9 100644 --- a/source/Classes/SHDateFormatter.swift +++ b/source/Classes/SHDateFormatter.swift @@ -94,7 +94,11 @@ public struct SHDateFormatter { * - parameter needsRelativeFormatting: Use relative formating when set to true. * - returns: A String object representing the date. */ - public func string(from date: Date?, format: SHDateFormat, locale: Locale? = nil, timeZone: TimeZone? = nil, needsRelativeFormatting: Bool = false) -> String { + public func string(from date: Date?, + format: SHDateFormat, + locale: Locale? = nil, + timeZone: TimeZone? = nil, + needsRelativeFormatting: Bool = false) -> String { var dateString: String = "" guard let date = date else { @@ -121,7 +125,11 @@ public struct SHDateFormatter { * - parameter needsRelativeFormatting: Use relative formating when set to true. * - returns: A Date object representing the date. */ - public func date(from string: String?, format: SHDateFormat, locale: Locale? = nil, timeZone: TimeZone? = nil, needsRelativeFormatting: Bool = false) -> Date? { + public func date(from string: String?, + format: SHDateFormat, + locale: Locale? = nil, + timeZone: TimeZone? = nil, + needsRelativeFormatting: Bool = false) -> Date? { var date: Date? guard let dateString = string else { From d12d7fae5804e99e8f9c2d5472745f7bf5c64244 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 03:19:55 +0100 Subject: [PATCH 15/29] Clear swiftlint warnings --- Tests/DateFormatterTests.swift | 226 +++++++++++++++++++++++++++------ 1 file changed, 188 insertions(+), 38 deletions(-) diff --git a/Tests/DateFormatterTests.swift b/Tests/DateFormatterTests.swift index a2b8603..f0995f0 100644 --- a/Tests/DateFormatterTests.swift +++ b/Tests/DateFormatterTests.swift @@ -857,27 +857,47 @@ final class DateFormatterTests: QuickSpec { } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Today at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Today" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Today" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -885,42 +905,74 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "aujourd’hui à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "aujourd’hui" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "aujourd’hui" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -928,47 +980,81 @@ final class DateFormatterTests: QuickSpec { context("Tomorrow Noon") { - let testDate = todayNoon().plus24Hours() + beforeEach { + testDate = todayNoon().plus24Hours() + } context("\(deDELocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Morgen, 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Morgen" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Morgen" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: deDELocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -976,42 +1062,74 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00 PM" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Tomorrow at 12:00 PM" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Tomorrow" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "Tomorrow" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: enUSLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } @@ -1019,42 +1137,74 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { it("ShortWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortWeekdayName, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("LongWeekdayName") { - let result = SHDateFormatter.shared.string(from: testDate, format: .longWeekdayName, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .longWeekdayName, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("ShortTimeNoDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeNoDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "12:00" } it("ShortTimeMediumDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeMediumDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortTimeMediumDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "demain à 12:00" } it("NoTimeShortDateNoYear") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDateNoYear, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDateNoYear, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } it("NoTimeShortDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeShortDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeShortDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "demain" } it("NoTimeLongDate") { - let result = SHDateFormatter.shared.string(from: testDate, format: .noTimeLongDate, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .noTimeLongDate, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "demain" } it("ISO8601") { - let result = SHDateFormatter.shared.string(from: testDate, format: .ISO8601, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) + let result = SHDateFormatter.shared.string(from: testDate, + format: .ISO8601, + locale: frFRLocale, + timeZone: gmtZone, + needsRelativeFormatting: true) expect(result) == "" } } From aa589978654cc8a0e91fd27f08504238d9509af4 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 03:21:38 +0100 Subject: [PATCH 16/29] Configure Code coverage --- .../xcschemes/SHDateFormatterExample.xcscheme | 8 ++------ .../xcschemes/SHDateFormatter-iOS.xcscheme | 13 ++++++++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Example/SHDateFormatterExample.xcodeproj/xcshareddata/xcschemes/SHDateFormatterExample.xcscheme b/Example/SHDateFormatterExample.xcodeproj/xcshareddata/xcschemes/SHDateFormatterExample.xcscheme index 96c0ec0..55a2d0c 100644 --- a/Example/SHDateFormatterExample.xcodeproj/xcshareddata/xcschemes/SHDateFormatterExample.xcscheme +++ b/Example/SHDateFormatterExample.xcodeproj/xcshareddata/xcschemes/SHDateFormatterExample.xcscheme @@ -27,8 +27,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + + - - + shouldUseLaunchSchemeArgsEnv = "YES" + codeCoverageEnabled = "YES" + onlyGenerateCoverageForSpecifiedTargets = "YES"> + + + + From 670275d3c533c8ef38cf1fcd88008db081d9bc29 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 03:37:40 +0100 Subject: [PATCH 17/29] Update readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 27dfd43..15d6efe 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@

SHDateFormatter

- - Build Status + + CI status Github Current Release @@ -59,7 +59,7 @@ Additionally the following convenience functions are available on the SHDateForm ## Requirements -The framework is compatible with Xcode 11 and Swift 5.1. The minimum version is iOS 9. +The framework is compatible with Xcode 11 and Swift 5.1+. The minimum version is iOS 9. ## Installation From 7acc5996ee282747d5522b42725e81275448f8c5 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Mon, 3 Feb 2020 03:40:32 +0100 Subject: [PATCH 18/29] Remove codecov badge --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 15d6efe..356bbc3 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,6 @@ License - - Codecov - - codebeat badge From fa185ef94a2c95c9dcd40ddd9fe9051bf7c95f71 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Thu, 6 Aug 2020 16:02:48 +0200 Subject: [PATCH 19/29] Update Dependencies --- .gitignore | 10 +++ fastlane/Fastfile | 223 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 228 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index ad434f3..845c0ef 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,19 @@ # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore +# macos +**/.DS_Store +**/.env + ## CI codesigndoc_exports +# Carthage framework bundle - created during release process +*.framework.zip +# Fastlane config script is downloaded +fastlane/Fastfile +# Fastlane plugin config is downloaded +fastlane/Pluginfile # Mint dependencies file which is downloaded Mintfile # Swiftlint config file which is downloaded diff --git a/fastlane/Fastfile b/fastlane/Fastfile index c8c9971..4b893a4 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -1,6 +1,219 @@ +# Customise this file, documentation can be found here: +# https://github.com/fastlane/fastlane/tree/master/fastlane/docs +# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md +# can also be listed using the `fastlane actions` command -import_from_git( - url: "https://github.com/Blackjacx/Scripts.git", - branch: "master", - path: "frameworks/Fastfile" -) \ No newline at end of file +# Change the syntax highlighting to Ruby +# All lines starting with a # are ignored when running `fastlane` + +# If you want to automatically update fastlane if a new version is available: +# update_fastlane + +# +# This file was created by the help of https://gist.github.com/ulhas/e8e529d08849b8cda947 +# + +# NOTE: To use faslane install: +# gem install bundler +# brew install git-flow +# brew install appledoc +# +# Git-flow witll be configured upon installation or the first run of fastlane. +# IMPORTANT: Use the default options !!! +# +# and then run: +# bundle exec fastlane release bump_type:"minor" + +# This is the minimum version number required. +# Update this, if you use features of a newer version. +fastlane_version "2.105.2" + +default_platform :ios + +before_all do + # This block is called, before execute the lane +end + + +after_all do |lane| + # This block is called, only if the executed lane was successful +end + + +error do |lane, exception| + # Reset builld/version number increment after failed release + sh "git reset --hard" +end + + +############################################################################### +# PUBLIC SECTION +############################################################################### + +desc "Creates a release branch" +desc "Runs framework tests" +desc "Increments framework number" +desc "Updates podspec file" +desc "Pushes podspec file to Cocoapods" +desc "Pushes releases to github" +desc "Commits and pushes changes to remote and tags the release commit" +lane :release do |options| + + podspecs = Dir["../*.podspec"] + UI.user_error!("No podspecs found") if podspecs.count == 0 + UI.user_error!("Multiple podspecs found") if podspecs.count > 1 + + framework = File.basename(podspecs[0], ".podspec") + repository_name = "blackjacx/#{framework}" + UI.user_error!("Framework name not found from #{podspecs}") if framework.nil? || framework.empty? + + bump_type = options[:bump_type] + UI.user_error!("bump_type not specified. Please specify \"major\", \"minor\" or \"patch\"!") if bump_type.nil? || bump_type.empty? + + # Ensure the source code is OK and tests are green + ensure_bundle_exec + ensure_git_status_clean + ensure_git_branch(branch: "develop") + + # Delete local branches and tags not on remote to prevent pushing unwanted tags + sh "git fetch --prune --prune-tags" + # Pull develop/master to be sure we're up to date everywherre + sh "git pull && git checkout master && git pull && git checkout develop" + + # Sets CFBundleShortVersionString" + version = increment_version_number(xcodeproj: "#{framework}.xcodeproj", bump_type: bump_type) + UI.user_error!("No version number generated by bump") if version.nil? || version.empty? + UI.user_error!("Git tag #{version} already exists") if git_tag_exists(tag: version) + + # Increment CFBundleVersion by one + build_number = increment_build_number(xcodeproj: "#{framework}.xcodeproj") + UI.user_error!("No build number generated by bump") if build_number.nil? || build_number.empty? + + # Check if Github release exists + github_release = get_github_release(url: repository_name, version: version). + UI.user_error!("Github release #{version} already exists") if !github_release.nil? && !github_release.empty? + + # Updates framework podspec version + version_bump_podspec(path: "#{framework}.podspec", version_number: version) + + update_mit_license + + # Read the "Unreleased" changelog section + changelog = read_changelog( + section_identifier: '[Unreleased]', # Specify what section to read + excluded_markdown_elements: [] # Specify which markdown elements should be excluded + ) + + # Write the changelog to a new section named with the release version + stamp_changelog( + section_identifier: version # Stamp Unreleased section with newly released build number + ) + + # Check if podspec is ok and tests succeed + pod_lib_lint(allow_warnings: true) + test(framework: framework) + + # + # Start the release + # + + release_branch = "release/#{version}" + + sh "git checkout -b #{release_branch}" + sh "git commit -am 'Fastlane: Release on Production #{version}'" + + # Finish the release branch. The shell may hang here because it: + # 1) promts for a merge message. + # + # To get around this do the following: + # 1) git config --global core.mergeoptions --no-edit + tag_message = "production_release_#{version}" + sh "git checkout master" + sh "git merge --no-ff #{release_branch}" + sh "git tag -m #{tag_message} -a #{version}" + sh "git checkout develop" + sh "git merge --no-ff #{release_branch}" + sh "git branch -d #{release_branch}" + + sh "git push origin develop" + sh "git push origin master" + sh "git push origin -f --tags" + + # Pushes framework podspec to Cocoapods specs + # Needs to be done at the end (expects git tag to be available) + pod_push(path: "#{framework}.podspec", allow_warnings: true) + + # Create a Carthage archive which is then added to the github release, to enable carthage caching + carthage_archive_name = "#{framework}.framework.zip" + sh "cd .. && carthage build --no-skip-current" + carthage(command: "archive", output: "#{carthage_archive_name}") + + # Creates new release on Github with changelog + pushes the tag if not done already + set_github_release( + repository_name: repository_name, + api_token: ENV["GITHUB_TOKEN"], + name: version, + tag_name: version, + description: (changelog || "No changelog provided"), + commitish: "master", + upload_assets: ["#{carthage_archive_name}"], + ) +end + + +desc "Runs tests using scan" +lane :test do |options| + framework = options[:framework] + UI.user_error!("No framework specified") if framework.nil? || framework.empty? + + schemes = sh "xcodebuild -workspace ../#{framework}.xcworkspace -list" + + xargs="-maximum-parallel-testing-workers 1 -parallel-testing-enabled NO -maximum-concurrent-test-simulator-destinations 1 -disable-concurrent-destination-testing" + + # only run the cocoapods action if there is a podfile + cocoapods(repo_update: true) if File.file?("../Podfile") + + scan(scheme: "#{framework}-iOS", clean: true, xcargs: xargs) if schemes.include? "iOS" + scan(scheme: "#{framework}-tvOS", clean: true, xcargs: xargs) if schemes.include? "tvOS" + scan(scheme: "#{framework}-watchOS", clean: true, xcargs: xargs) if schemes.include? "watchOS" + scan(scheme: "#{framework}-macOS", clean: true, xcargs: xargs) if schemes.include? "macOS" + + danger(verbose: true) if is_set( options[:run_danger] ) +end + +desc "An contained area for testing new features or running parts of other lanes." +lane :playground do |options| +end + + +############################################################################### +# PRIVATE SECTION +############################################################################### + +desc "Updates the LICENSE file to MIT by replacing year and authors from a template file." +private_lane :update_mit_license do |options| + fAuthors = "../AUTHORS" + UI.user_error!("#{fAuthors} not found! Quit...") unless File.file?("#{fAuthors}") + + fLicense = "../LICENSE" + UI.user_error!("#{fLicense} not found! Quit...") unless File.file?("#{fLicense}") + + authors = File.read("#{fAuthors}") + .gsub(/\n/, ", ") + + data = download(url: "https://raw.githubusercontent.com/Blackjacx/Scripts/master/LICENSE_MIT") + .gsub(//, "#{Time.now.year}") + .gsub(//, "#{authors}") + + newFile = File.open("#{fLicense}", "w") + newFile.write(data) + newFile.close +end + +############################################################################### +# Global Functions +############################################################################### + +def is_set(var) + !var.nil? && !var.empty? && (var == "pull_request" || var == "1" || var == "true") +end \ No newline at end of file From 983f698f1372009ef23f74a845f0665416129b8c Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Thu, 6 Aug 2020 16:04:44 +0200 Subject: [PATCH 20/29] Fix runner in workflow --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 546c102..daf43c2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ env: jobs: bootstrap-and-test: name: Test - runs-on: macos + runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v1 From f13df617ed7cfd570ea4b1a7175bd0082ff238eb Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Thu, 6 Aug 2020 16:06:04 +0200 Subject: [PATCH 21/29] Update used actions --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index daf43c2..8fceccd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,17 +14,17 @@ jobs: runs-on: macos-latest steps: - name: Checkout - uses: actions/checkout@v1 + uses: actions/checkout@v2 - name: Download Configuration Files run: bash <(curl -s https://raw.githubusercontent.com/Blackjacx/Scripts/master/frameworks/bootstrap.sh) -d - name: Cache RubyGems - uses: actions/cache@v1 + uses: actions/cache@v2 with: path: vendor/bundle key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }} restore-keys: ${{ runner.os }}-gem- - name: Cache Mint packages - uses: actions/cache@v1 + uses: actions/cache@v2 with: path: ${{ env.MINT_PATH }} key: ${{ runner.os }}-mint-${{ hashFiles('**/Mintfile') }} From ed4ed143600be979b491496c778ada28b2081a45 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Thu, 6 Aug 2020 15:52:39 +0200 Subject: [PATCH 22/29] Add month name formatting --- Tests/DateFormatterTests.swift | 96 ++++++++++++++++++++++++++++ source/Classes/SHDateFormatter.swift | 4 +- 2 files changed, 99 insertions(+), 1 deletion(-) diff --git a/Tests/DateFormatterTests.swift b/Tests/DateFormatterTests.swift index f0995f0..3b4f043 100644 --- a/Tests/DateFormatterTests.swift +++ b/Tests/DateFormatterTests.swift @@ -115,6 +115,22 @@ final class DateFormatterTests: QuickSpec { expect(result) == "Samstag" } + it("ShortMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonthName, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "Jan" + } + + it("LongMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonthName, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "Januar" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -182,6 +198,22 @@ final class DateFormatterTests: QuickSpec { expect(result) == "Saturday" } + it("ShortMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonthName, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "Jan" + } + + it("LongMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonthName, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "January" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -249,6 +281,22 @@ final class DateFormatterTests: QuickSpec { expect(result) == "samedi" } + it("ShortMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonthName, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "janv." + } + + it("LongMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonthName, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "janvier" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -329,6 +377,22 @@ final class DateFormatterTests: QuickSpec { expect(result) == "Sonntag" } + it("ShortMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonthName, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "Jan" + } + + it("LongMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonthName, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "Januar" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -396,6 +460,22 @@ final class DateFormatterTests: QuickSpec { expect(result) == "Sunday" } + it("ShortMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonthName, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "Jan" + } + + it("LongMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonthName, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "January" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -463,6 +543,22 @@ final class DateFormatterTests: QuickSpec { expect(result) == "dimanche" } + it("ShortMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortMonthName, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "janv." + } + + it("LongMonthName") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longMonthName, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "janvier" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, diff --git a/source/Classes/SHDateFormatter.swift b/source/Classes/SHDateFormatter.swift index 222e0f9..41e1354 100644 --- a/source/Classes/SHDateFormatter.swift +++ b/source/Classes/SHDateFormatter.swift @@ -7,6 +7,8 @@ enum Calendars { public enum SHDateFormat: String { case shortWeekdayName = "EEE" case longWeekdayName = "EEEE" + case shortMonthName = "MMM" + case longMonthName = "MMMM" case shortTimeNoDate case shortTimeMediumDate case noTimeShortDateNoYear = "d.M." @@ -44,7 +46,7 @@ public struct SHDateFormatter { let locale = SHDateFormatter.formatter.locale switch format { - case .shortWeekdayName, .longWeekdayName, .noTimeShortDateNoYear: + case .shortWeekdayName, .longWeekdayName, .shortMonthName, .longMonthName, .noTimeShortDateNoYear: SHDateFormatter.formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: format.rawValue, options: 0, locale: locale) case .shortTimeNoDate: From 40dd40d1530a97fb43450d54fef3694cbbeca2c3 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Thu, 6 Aug 2020 15:55:39 +0200 Subject: [PATCH 23/29] Update Readme --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 356bbc3..9f5d41b 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Cocoapods Platforms Xcode 11.0+ iOS 9.0+ - Swift 5.1+ + Swift 5.2+ Github Repo Size Github Code Size Github Closed PR's @@ -39,6 +39,8 @@ This framework supports encoding as well as decoding many different date and tim * `shortWeekdayName` => Sun, Mon, Tue, ... * `longWeekdayName` => Sunday, Monday, Tuesday, ... +* `shortMonthName` => Jan, Feb, ... +* `longMonthName` => January, February, ... * `shortTimeNoDate` => 12:00 PM, 1:00 AM * `shortTimeMediumDate` => Jan 1, 2000 at 12:00 AM * `noTimeShortDateNoYear` => 12/31 @@ -53,10 +55,6 @@ Additionally the following convenience functions are available on the SHDateForm * `localizedTimeStringFromDate(_:)` - will return `--:--` per default * ... to be continued ... -## Requirements - -The framework is compatible with Xcode 11 and Swift 5.1+. The minimum version is iOS 9. - ## Installation SHDateFormatter is available through [CocoaPods](http://cocoapods.org). To install From b759a6ca53da2b95a40805d1824aec080de5dd49 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Thu, 6 Aug 2020 15:58:08 +0200 Subject: [PATCH 24/29] Update Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e30f3ab..e29542b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [Unreleased] +* [#21](https://github.com/Blackjacx/SHDateFormatter/pull/21): Add month formatting - [@blackjacx](https://github.com/blackjacx). ## [1.4.3] - 2019-12-03 * [#19](https://github.com/Blackjacx/SHDateFormatter/pull/19): Add new accessibility date format & Fix Vulnerabilities & 12/24h check - [@blackjacx](https://github.com/blackjacx). From f20062420c266dc949188a59cef1521f79e07f9d Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Fri, 7 Aug 2020 10:06:48 +0200 Subject: [PATCH 25/29] Add year name formatting --- CHANGELOG.md | 9 +- README.md | 8 +- Tests/DateFormatterTests.swift | 270 ++++++++++++++++++--------- source/Classes/SHDateFormatter.swift | 16 +- 4 files changed, 200 insertions(+), 103 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e29542b..d62d2d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,14 +25,11 @@ * [#5](https://github.com/Blackjacx/SHDateFormatter/pull/5): Improve Robustness By Using Apple's Default Formatting Styles - [@blackjacx](https://github.com/blackjacx). ## [1.0.2] - 2017-10-10 -### Changed -* Refactor project structure +* Refactor project structure - [@blackjacx](https://github.com/blackjacx). ## [1.0.1] - 2017-10-10 -### Fixed -* Fix source-file reference in podspec +* Fix source-file reference in podspec - [@blackjacx](https://github.com/blackjacx). ## [1.0.0] - 2017-09-28 -### Changed * [#4](https://github.com/Blackjacx/SHDateFormatter/pull/4): Conversion to Swift 4 - [@blackjacx](https://github.com/blackjacx). -* opts in for new build system - [@blackjacx](https://github.com/blackjacx). +* Opts in for new build system - [@blackjacx](https://github.com/blackjacx). diff --git a/README.md b/README.md index 9f5d41b..41a4659 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,10 @@ This framework supports encoding as well as decoding many different date and time format. At the moment the follownig are supported (see SHDateFormat): -* `shortWeekdayName` => Sun, Mon, Tue, ... -* `longWeekdayName` => Sunday, Monday, Tuesday, ... -* `shortMonthName` => Jan, Feb, ... -* `longMonthName` => January, February, ... +* `shortWeekday` => Sun, Mon, Tue, ... +* `longWeekday` => Sunday, Monday, Tuesday, ... +* `shortMonth` => Jan, Feb, ... +* `longMonth` => January, February, ... * `shortTimeNoDate` => 12:00 PM, 1:00 AM * `shortTimeMediumDate` => Jan 1, 2000 at 12:00 AM * `noTimeShortDateNoYear` => 12/31 diff --git a/Tests/DateFormatterTests.swift b/Tests/DateFormatterTests.swift index 3b4f043..b4feaa5 100644 --- a/Tests/DateFormatterTests.swift +++ b/Tests/DateFormatterTests.swift @@ -9,7 +9,7 @@ final class DateFormatterTests: QuickSpec { // swiftlint:disable:next function_body_length override func spec() { - let gmtZone = TimeZone(identifier: "Europe/London")! + let gmtZone = TimeZone.GMT let deDELocale = Locale(identifier: "de_DE") let enUSLocale = Locale(identifier: "en_US") @@ -69,7 +69,7 @@ final class DateFormatterTests: QuickSpec { context("General Tests") { it("returns a nil date the input string is nil") { - let result = SHDateFormatter.shared.date(from: nil, format: .shortWeekdayName) + let result = SHDateFormatter.shared.date(from: nil, format: .shortWeekday) expect(result).to(beNil()) } } @@ -80,7 +80,7 @@ final class DateFormatterTests: QuickSpec { context("General Tests") { it("returns an empty string the input date is nil") { - let result = SHDateFormatter.shared.string(from: nil, format: .shortWeekdayName) + let result = SHDateFormatter.shared.string(from: nil, format: .shortWeekday) expect(result) == "" } } @@ -99,38 +99,54 @@ final class DateFormatterTests: QuickSpec { context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: deDELocale, timeZone: gmtZone) expect(result) == "Sa" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: deDELocale, timeZone: gmtZone) expect(result) == "Samstag" } - it("ShortMonthName") { + it("ShortMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortMonthName, + format: .shortMonth, locale: deDELocale, timeZone: gmtZone) expect(result) == "Jan" } - it("LongMonthName") { + it("LongMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longMonthName, + format: .longMonth, locale: deDELocale, timeZone: gmtZone) expect(result) == "Januar" } + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -182,38 +198,54 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Sat" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Saturday" } - it("ShortMonthName") { + it("ShortMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortMonthName, + format: .shortMonth, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Jan" } - it("LongMonthName") { + it("LongMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longMonthName, + format: .longMonth, locale: enUSLocale, timeZone: gmtZone) expect(result) == "January" } + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -265,38 +297,54 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: frFRLocale, timeZone: gmtZone) expect(result) == "sam." } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: frFRLocale, timeZone: gmtZone) expect(result) == "samedi" } - it("ShortMonthName") { + it("ShortMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortMonthName, + format: .shortMonth, locale: frFRLocale, timeZone: gmtZone) expect(result) == "janv." } - it("LongMonthName") { + it("LongMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longMonthName, + format: .longMonth, locale: frFRLocale, timeZone: gmtZone) expect(result) == "janvier" } + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -361,38 +409,54 @@ final class DateFormatterTests: QuickSpec { context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: deDELocale, timeZone: gmtZone) expect(result) == "So" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: deDELocale, timeZone: gmtZone) expect(result) == "Sonntag" } - it("ShortMonthName") { + it("ShortMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortMonthName, + format: .shortMonth, locale: deDELocale, timeZone: gmtZone) expect(result) == "Jan" } - it("LongMonthName") { + it("LongMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longMonthName, + format: .longMonth, locale: deDELocale, timeZone: gmtZone) expect(result) == "Januar" } + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: deDELocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -444,38 +508,54 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Sun" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Sunday" } - it("ShortMonthName") { + it("ShortMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortMonthName, + format: .shortMonth, locale: enUSLocale, timeZone: gmtZone) expect(result) == "Jan" } - it("LongMonthName") { + it("LongMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longMonthName, + format: .longMonth, locale: enUSLocale, timeZone: gmtZone) expect(result) == "January" } + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: enUSLocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -527,38 +607,54 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: frFRLocale, timeZone: gmtZone) expect(result) == "dim." } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: frFRLocale, timeZone: gmtZone) expect(result) == "dimanche" } - it("ShortMonthName") { + it("ShortMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortMonthName, + format: .shortMonth, locale: frFRLocale, timeZone: gmtZone) expect(result) == "janv." } - it("LongMonthName") { + it("LongMonth") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longMonthName, + format: .longMonth, locale: frFRLocale, timeZone: gmtZone) expect(result) == "janvier" } + it("ShortYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .shortYear, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "00" + } + + it("LongYear") { + let result = SHDateFormatter.shared.string(from: testDate, + format: .longYear, + locale: frFRLocale, + timeZone: gmtZone) + expect(result) == "2000" + } + it("ShortTimeNoDate") { let result = SHDateFormatter.shared.string(from: testDate, format: .shortTimeNoDate, @@ -619,17 +715,17 @@ final class DateFormatterTests: QuickSpec { context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) @@ -693,18 +789,18 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) @@ -768,18 +864,18 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) @@ -850,18 +946,18 @@ final class DateFormatterTests: QuickSpec { context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) @@ -925,18 +1021,18 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) @@ -1000,18 +1096,18 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) @@ -1082,18 +1178,18 @@ final class DateFormatterTests: QuickSpec { context("\(deDELocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: deDELocale, timeZone: gmtZone, needsRelativeFormatting: true) @@ -1157,18 +1253,18 @@ final class DateFormatterTests: QuickSpec { context("\(enUSLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: enUSLocale, timeZone: gmtZone, needsRelativeFormatting: true) @@ -1232,18 +1328,18 @@ final class DateFormatterTests: QuickSpec { context("\(frFRLocale.identifier)") { - it("ShortWeekdayName") { + it("ShortWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .shortWeekdayName, + format: .shortWeekday, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) expect(result) == "" } - it("LongWeekdayName") { + it("LongWeekday") { let result = SHDateFormatter.shared.string(from: testDate, - format: .longWeekdayName, + format: .longWeekday, locale: frFRLocale, timeZone: gmtZone, needsRelativeFormatting: true) diff --git a/source/Classes/SHDateFormatter.swift b/source/Classes/SHDateFormatter.swift index 41e1354..b0604ef 100644 --- a/source/Classes/SHDateFormatter.swift +++ b/source/Classes/SHDateFormatter.swift @@ -5,10 +5,12 @@ enum Calendars { } public enum SHDateFormat: String { - case shortWeekdayName = "EEE" - case longWeekdayName = "EEEE" - case shortMonthName = "MMM" - case longMonthName = "MMMM" + case shortWeekday = "EEE" + case longWeekday = "EEEE" + case shortMonth = "MMM" + case longMonth = "MMMM" + case longYear = "yyyy" + case shortYear = "yy" case shortTimeNoDate case shortTimeMediumDate case noTimeShortDateNoYear = "d.M." @@ -46,8 +48,10 @@ public struct SHDateFormatter { let locale = SHDateFormatter.formatter.locale switch format { - case .shortWeekdayName, .longWeekdayName, .shortMonthName, .longMonthName, .noTimeShortDateNoYear: - SHDateFormatter.formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: format.rawValue, options: 0, locale: locale) + case .shortWeekday, .longWeekday, .shortMonth, .longMonth, .longYear, .shortYear, .noTimeShortDateNoYear: + SHDateFormatter.formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: format.rawValue, + options: 0, + locale: locale) case .shortTimeNoDate: SHDateFormatter.formatter.timeStyle = .short From cca3384e85427c55948e984131cdf6950052b3e9 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Fri, 7 Aug 2020 12:12:17 +0200 Subject: [PATCH 26/29] Update gems --- Gemfile.lock | 163 +++++++++++++++++++++++++++++---------------------- 1 file changed, 94 insertions(+), 69 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a49d4e7..2e506bd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,27 +2,43 @@ GEM remote: https://rubygems.org/ specs: CFPropertyList (3.0.2) - activesupport (4.2.11.1) + activesupport (4.2.11.3) i18n (~> 0.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - algoliasearch (1.27.1) + algoliasearch (1.27.3) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) atomos (0.1.3) + aws-eventstream (1.1.0) + aws-partitions (1.352.0) + aws-sdk-core (3.104.3) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.239.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.36.0) + aws-sdk-core (~> 3, >= 3.99.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.75.0) + aws-sdk-core (~> 3, >= 3.104.1) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.1) + aws-sigv4 (1.2.1) + aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.3) claide (1.0.3) claide-plugins (0.9.2) cork nap open4 (~> 1.3) - cocoapods (1.8.4) + cocoapods (1.9.3) activesupport (>= 4.0.2, < 5) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.8.4) + cocoapods-core (= 1.9.3) cocoapods-deintegrate (>= 1.0.3, < 2.0) cocoapods-downloader (>= 1.2.2, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) @@ -37,101 +53,105 @@ GEM molinillo (~> 0.6.6) nap (~> 1.0) ruby-macho (~> 1.4) - xcodeproj (>= 1.11.1, < 2.0) - cocoapods-core (1.8.4) + xcodeproj (>= 1.14.0, < 2.0) + cocoapods-core (1.9.3) activesupport (>= 4.0.2, < 6) algoliasearch (~> 1.0) concurrent-ruby (~> 1.1) fuzzy_match (~> 2.0.4) nap (~> 1.0) + netrc (~> 0.11) + typhoeus (~> 1.0) cocoapods-deintegrate (1.0.4) - cocoapods-downloader (1.3.0) + cocoapods-downloader (1.4.0) cocoapods-plugins (1.0.0) nap cocoapods-search (1.0.0) cocoapods-stats (1.1.0) - cocoapods-trunk (1.4.1) + cocoapods-trunk (1.5.0) nap (>= 0.8, < 2.0) netrc (~> 0.11) - cocoapods-try (1.1.0) + cocoapods-try (1.2.0) colored (1.2) colored2 (3.1.2) commander-fastlane (4.4.6) highline (~> 1.7.2) - concurrent-ruby (1.1.5) + concurrent-ruby (1.1.6) cork (0.3.0) colored2 (~> 3.1) - danger (6.2.0) + danger (8.0.4) claide (~> 1.0) claide-plugins (>= 0.9.2) colored2 (~> 3.1) cork (~> 0.1) - faraday (~> 0.9) + faraday (>= 0.9.0, < 2.0) faraday-http-cache (~> 2.0) - git (~> 1.5) + git (~> 1.7) kramdown (~> 2.0) kramdown-parser-gfm (~> 1.0) no_proxy_fix octokit (~> 4.7) terminal-table (~> 1) - danger-changelog (0.6.0) + danger-changelog (0.6.1) danger-plugin-api (~> 1.0) danger-commit_lint (0.0.7) danger-plugin-api (~> 1.0) danger-plugin-api (1.0.0) danger (> 2.0) - danger-swiftlint (0.24.0) + danger-swiftlint (0.24.3) danger rake (> 10) thor (~> 0.19) - danger-xcov (0.4.1) + danger-xcov (0.5.0) danger (>= 2.1) - xcov (>= 1.1.2) - declarative (0.0.10) + xcov (>= 1.7.3) + declarative (0.0.20) declarative-option (0.1.0) - digest-crc (0.4.1) + digest-crc (0.6.1) + rake (~> 13.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.5) - emoji_regex (1.0.1) + dotenv (2.7.6) + emoji_regex (3.0.0) escape (0.0.4) - excon (0.72.0) - faraday (0.17.3) + ethon (0.12.0) + ffi (>= 1.3.0) + excon (0.76.0) + faraday (1.0.1) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.6) faraday (>= 0.7.4) http-cookie (~> 1.0.0) - faraday-http-cache (2.0.0) - faraday (~> 0.8) - faraday_middleware (0.13.1) - faraday (>= 0.7.4, < 1.0) - fastimage (2.1.7) - fastlane (2.141.0) + faraday-http-cache (2.2.0) + faraday (>= 0.8) + faraday_middleware (1.0.0) + faraday (~> 1.0) + fastimage (2.2.0) + fastlane (2.155.1) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.3, < 3.0.0) - babosa (>= 1.0.2, < 2.0.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) bundler (>= 1.12.0, < 3.0.0) colored commander-fastlane (>= 4.4.6, < 5.0.0) dotenv (>= 2.1.1, < 3.0.0) - emoji_regex (>= 0.1, < 2.0) + emoji_regex (>= 0.1, < 4.0) excon (>= 0.71.0, < 1.0.0) - faraday (~> 0.17) + faraday (~> 1.0) faraday-cookie_jar (~> 0.0.6) - faraday_middleware (~> 0.13.1) + faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) - google-api-client (>= 0.29.2, < 0.37.0) + google-api-client (>= 0.37.0, < 0.39.0) google-cloud-storage (>= 1.15.0, < 2.0.0) highline (>= 1.7.2, < 2.0.0) json (< 3.0.0) - jwt (~> 2.1.0) + jwt (>= 2.1.0, < 3) mini_magick (>= 4.9.4, < 5.0.0) - multi_xml (~> 0.5) multipart-post (~> 2.0.0) plist (>= 3.1.0, < 4.0.0) - public_suffix (~> 2.0.0) - rubyzip (>= 1.3.0, < 2.0.0) + rubyzip (>= 2.0.0, < 3.0.0) security (= 0.1.3) simctl (~> 1.6.3) slack-notifier (>= 2.0.0, < 3.0.0) @@ -144,12 +164,13 @@ GEM xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) fastlane-plugin-changelog (0.15.0) + ffi (1.13.1) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) - git (1.6.0) + git (1.7.0) rchardet (~> 1.8) - google-api-client (0.36.4) + google-api-client (0.38.0) addressable (~> 2.5, >= 2.5.1) googleauth (~> 0.9) httpclient (>= 2.8.1, < 3.0) @@ -160,54 +181,55 @@ GEM google-cloud-core (1.5.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) - google-cloud-env (1.3.0) - faraday (~> 0.11) - google-cloud-errors (1.0.0) - google-cloud-storage (1.25.1) + google-cloud-env (1.3.3) + faraday (>= 0.17.3, < 2.0) + google-cloud-errors (1.0.1) + google-cloud-storage (1.27.0) addressable (~> 2.5) digest-crc (~> 0.4) google-api-client (~> 0.33) google-cloud-core (~> 1.2) googleauth (~> 0.9) mini_mime (~> 1.0) - googleauth (0.10.0) - faraday (~> 0.12) + googleauth (0.13.1) + faraday (>= 0.17.3, < 2.0) jwt (>= 1.4, < 3.0) memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) - signet (~> 0.12) + signet (~> 0.14) highline (1.7.10) http-cookie (1.0.3) domain_name (~> 0.5) httpclient (2.8.3) i18n (0.9.5) concurrent-ruby (~> 1.0) - json (2.3.0) - jwt (2.1.0) - kramdown (2.1.0) + jmespath (1.4.0) + json (2.3.1) + jwt (2.2.1) + kramdown (2.3.0) + rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) memoist (0.16.2) mini_magick (4.10.1) mini_mime (1.0.2) - minitest (5.14.0) + minitest (5.14.1) molinillo (0.6.6) - multi_json (1.14.1) - multi_xml (0.6.0) + multi_json (1.15.0) multipart-post (2.0.0) - nanaimo (0.2.6) + nanaimo (0.3.0) nap (1.1.0) naturally (2.2.0) netrc (0.11.0) no_proxy_fix (0.1.2) - octokit (4.15.0) + octokit (4.18.0) faraday (>= 0.9) sawyer (~> 0.8.0, >= 0.5.3) open4 (1.3.4) - os (1.0.1) + os (1.1.1) plist (3.5.0) - public_suffix (2.0.5) + public_suffix (4.0.5) rake (13.0.1) rchardet (1.8.0) representable (3.0.4) @@ -215,19 +237,20 @@ GEM declarative-option (< 0.2.0) uber (< 0.2.0) retriable (3.1.2) + rexml (3.2.4) rouge (2.0.7) ruby-macho (1.4.0) - rubyzip (1.3.0) + rubyzip (2.3.0) sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) security (0.1.3) - signet (0.12.0) + signet (0.14.0) addressable (~> 2.3) - faraday (~> 0.9) + faraday (>= 0.17.3, < 2.0) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - simctl (1.6.7) + simctl (1.6.8) CFPropertyList naturally slack-notifier (2.3.2) @@ -237,24 +260,26 @@ GEM thor (0.20.3) thread_safe (0.3.6) tty-cursor (0.7.1) - tty-screen (0.7.1) + tty-screen (0.8.1) tty-spinner (0.9.3) tty-cursor (~> 0.7) - tzinfo (1.2.6) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.7) thread_safe (~> 0.1) uber (0.1.0) unf (0.1.4) unf_ext - unf_ext (0.0.7.6) - unicode-display_width (1.6.1) + unf_ext (0.0.7.7) + unicode-display_width (1.7.0) word_wrap (1.0.0) - xcodeproj (1.14.0) + xcodeproj (1.17.1) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) - nanaimo (~> 0.2.6) - xcov (1.7.2) + nanaimo (~> 0.3.0) + xcov (1.7.3) fastlane (>= 2.141.0, < 3.0.0) multipart-post slack-notifier @@ -265,7 +290,7 @@ GEM rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.0) xcpretty (~> 0.2, >= 0.0.7) - xcresult (0.2.0) + xcresult (0.2.1) PLATFORMS ruby From 17a28e8323feac85686edfa16667204f63d2ed64 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Fri, 7 Aug 2020 12:16:49 +0200 Subject: [PATCH 27/29] Update cocoapods --- Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile.lock b/Podfile.lock index 6cc1d22..a58f9a4 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -17,4 +17,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 763483d3f1d753931666cf8edc278cad7a865e63 -COCOAPODS: 1.8.4 +COCOAPODS: 1.9.3 From f32714e046dc8192196c9c374956b5a613dae789 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Fri, 7 Aug 2020 12:20:31 +0200 Subject: [PATCH 28/29] Remove ignored content --- fastlane/Fastfile | 219 -------------------------------------------- fastlane/Pluginfile | 5 - 2 files changed, 224 deletions(-) delete mode 100644 fastlane/Fastfile delete mode 100644 fastlane/Pluginfile diff --git a/fastlane/Fastfile b/fastlane/Fastfile deleted file mode 100644 index 4b893a4..0000000 --- a/fastlane/Fastfile +++ /dev/null @@ -1,219 +0,0 @@ -# Customise this file, documentation can be found here: -# https://github.com/fastlane/fastlane/tree/master/fastlane/docs -# All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md -# can also be listed using the `fastlane actions` command - -# Change the syntax highlighting to Ruby -# All lines starting with a # are ignored when running `fastlane` - -# If you want to automatically update fastlane if a new version is available: -# update_fastlane - -# -# This file was created by the help of https://gist.github.com/ulhas/e8e529d08849b8cda947 -# - -# NOTE: To use faslane install: -# gem install bundler -# brew install git-flow -# brew install appledoc -# -# Git-flow witll be configured upon installation or the first run of fastlane. -# IMPORTANT: Use the default options !!! -# -# and then run: -# bundle exec fastlane release bump_type:"minor" - -# This is the minimum version number required. -# Update this, if you use features of a newer version. -fastlane_version "2.105.2" - -default_platform :ios - -before_all do - # This block is called, before execute the lane -end - - -after_all do |lane| - # This block is called, only if the executed lane was successful -end - - -error do |lane, exception| - # Reset builld/version number increment after failed release - sh "git reset --hard" -end - - -############################################################################### -# PUBLIC SECTION -############################################################################### - -desc "Creates a release branch" -desc "Runs framework tests" -desc "Increments framework number" -desc "Updates podspec file" -desc "Pushes podspec file to Cocoapods" -desc "Pushes releases to github" -desc "Commits and pushes changes to remote and tags the release commit" -lane :release do |options| - - podspecs = Dir["../*.podspec"] - UI.user_error!("No podspecs found") if podspecs.count == 0 - UI.user_error!("Multiple podspecs found") if podspecs.count > 1 - - framework = File.basename(podspecs[0], ".podspec") - repository_name = "blackjacx/#{framework}" - UI.user_error!("Framework name not found from #{podspecs}") if framework.nil? || framework.empty? - - bump_type = options[:bump_type] - UI.user_error!("bump_type not specified. Please specify \"major\", \"minor\" or \"patch\"!") if bump_type.nil? || bump_type.empty? - - # Ensure the source code is OK and tests are green - ensure_bundle_exec - ensure_git_status_clean - ensure_git_branch(branch: "develop") - - # Delete local branches and tags not on remote to prevent pushing unwanted tags - sh "git fetch --prune --prune-tags" - # Pull develop/master to be sure we're up to date everywherre - sh "git pull && git checkout master && git pull && git checkout develop" - - # Sets CFBundleShortVersionString" - version = increment_version_number(xcodeproj: "#{framework}.xcodeproj", bump_type: bump_type) - UI.user_error!("No version number generated by bump") if version.nil? || version.empty? - UI.user_error!("Git tag #{version} already exists") if git_tag_exists(tag: version) - - # Increment CFBundleVersion by one - build_number = increment_build_number(xcodeproj: "#{framework}.xcodeproj") - UI.user_error!("No build number generated by bump") if build_number.nil? || build_number.empty? - - # Check if Github release exists - github_release = get_github_release(url: repository_name, version: version). - UI.user_error!("Github release #{version} already exists") if !github_release.nil? && !github_release.empty? - - # Updates framework podspec version - version_bump_podspec(path: "#{framework}.podspec", version_number: version) - - update_mit_license - - # Read the "Unreleased" changelog section - changelog = read_changelog( - section_identifier: '[Unreleased]', # Specify what section to read - excluded_markdown_elements: [] # Specify which markdown elements should be excluded - ) - - # Write the changelog to a new section named with the release version - stamp_changelog( - section_identifier: version # Stamp Unreleased section with newly released build number - ) - - # Check if podspec is ok and tests succeed - pod_lib_lint(allow_warnings: true) - test(framework: framework) - - # - # Start the release - # - - release_branch = "release/#{version}" - - sh "git checkout -b #{release_branch}" - sh "git commit -am 'Fastlane: Release on Production #{version}'" - - # Finish the release branch. The shell may hang here because it: - # 1) promts for a merge message. - # - # To get around this do the following: - # 1) git config --global core.mergeoptions --no-edit - tag_message = "production_release_#{version}" - sh "git checkout master" - sh "git merge --no-ff #{release_branch}" - sh "git tag -m #{tag_message} -a #{version}" - sh "git checkout develop" - sh "git merge --no-ff #{release_branch}" - sh "git branch -d #{release_branch}" - - sh "git push origin develop" - sh "git push origin master" - sh "git push origin -f --tags" - - # Pushes framework podspec to Cocoapods specs - # Needs to be done at the end (expects git tag to be available) - pod_push(path: "#{framework}.podspec", allow_warnings: true) - - # Create a Carthage archive which is then added to the github release, to enable carthage caching - carthage_archive_name = "#{framework}.framework.zip" - sh "cd .. && carthage build --no-skip-current" - carthage(command: "archive", output: "#{carthage_archive_name}") - - # Creates new release on Github with changelog + pushes the tag if not done already - set_github_release( - repository_name: repository_name, - api_token: ENV["GITHUB_TOKEN"], - name: version, - tag_name: version, - description: (changelog || "No changelog provided"), - commitish: "master", - upload_assets: ["#{carthage_archive_name}"], - ) -end - - -desc "Runs tests using scan" -lane :test do |options| - framework = options[:framework] - UI.user_error!("No framework specified") if framework.nil? || framework.empty? - - schemes = sh "xcodebuild -workspace ../#{framework}.xcworkspace -list" - - xargs="-maximum-parallel-testing-workers 1 -parallel-testing-enabled NO -maximum-concurrent-test-simulator-destinations 1 -disable-concurrent-destination-testing" - - # only run the cocoapods action if there is a podfile - cocoapods(repo_update: true) if File.file?("../Podfile") - - scan(scheme: "#{framework}-iOS", clean: true, xcargs: xargs) if schemes.include? "iOS" - scan(scheme: "#{framework}-tvOS", clean: true, xcargs: xargs) if schemes.include? "tvOS" - scan(scheme: "#{framework}-watchOS", clean: true, xcargs: xargs) if schemes.include? "watchOS" - scan(scheme: "#{framework}-macOS", clean: true, xcargs: xargs) if schemes.include? "macOS" - - danger(verbose: true) if is_set( options[:run_danger] ) -end - -desc "An contained area for testing new features or running parts of other lanes." -lane :playground do |options| -end - - -############################################################################### -# PRIVATE SECTION -############################################################################### - -desc "Updates the LICENSE file to MIT by replacing year and authors from a template file." -private_lane :update_mit_license do |options| - fAuthors = "../AUTHORS" - UI.user_error!("#{fAuthors} not found! Quit...") unless File.file?("#{fAuthors}") - - fLicense = "../LICENSE" - UI.user_error!("#{fLicense} not found! Quit...") unless File.file?("#{fLicense}") - - authors = File.read("#{fAuthors}") - .gsub(/\n/, ", ") - - data = download(url: "https://raw.githubusercontent.com/Blackjacx/Scripts/master/LICENSE_MIT") - .gsub(//, "#{Time.now.year}") - .gsub(//, "#{authors}") - - newFile = File.open("#{fLicense}", "w") - newFile.write(data) - newFile.close -end - -############################################################################### -# Global Functions -############################################################################### - -def is_set(var) - !var.nil? && !var.empty? && (var == "pull_request" || var == "1" || var == "true") -end \ No newline at end of file diff --git a/fastlane/Pluginfile b/fastlane/Pluginfile deleted file mode 100644 index 8f896e8..0000000 --- a/fastlane/Pluginfile +++ /dev/null @@ -1,5 +0,0 @@ -# Autogenerated by fastlane -# -# Ensure this file is checked in to source control! - -gem 'fastlane-plugin-changelog' From 41ab19f6a9fae1aa749879d566ba4f0ad1b9e261 Mon Sep 17 00:00:00 2001 From: Stefan Herold Date: Fri, 7 Aug 2020 12:32:05 +0200 Subject: [PATCH 29/29] Fastlane: Release on Production 1.5.0 --- CHANGELOG.md | 2 ++ LICENSE | 2 +- SHDateFormatter.podspec | 2 +- SHDateFormatter.xcodeproj/project.pbxproj | 8 ++++---- Tests/Info.plist | 4 ++-- source/Info.plist | 4 ++-- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d62d2d3..6aa52cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased] + +## [1.5.0] - 2020-08-07 * [#21](https://github.com/Blackjacx/SHDateFormatter/pull/21): Add month formatting - [@blackjacx](https://github.com/blackjacx). ## [1.4.3] - 2019-12-03 diff --git a/LICENSE b/LICENSE index 6f84544..8e133b4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2019 Stefan Herold +Copyright (c) 2020 Stefan Herold Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/SHDateFormatter.podspec b/SHDateFormatter.podspec index 23a904d..8db4b53 100644 --- a/SHDateFormatter.podspec +++ b/SHDateFormatter.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'SHDateFormatter' - s.version = '1.4.3' + s.version = '1.5.0' s.license = { :type => 'MIT', :file => 'LICENSE' } s.summary = 'A date formatter supporting encoding as well as decoding of many different date and time formats including the often used ISO8601 standard.' s.description = <<-DESC diff --git a/SHDateFormatter.xcodeproj/project.pbxproj b/SHDateFormatter.xcodeproj/project.pbxproj index 7d2d0d4..d68e9a1 100644 --- a/SHDateFormatter.xcodeproj/project.pbxproj +++ b/SHDateFormatter.xcodeproj/project.pbxproj @@ -487,12 +487,12 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 11; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = PCW579R278; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 10; + DYLIB_CURRENT_VERSION = 11; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = source/Info.plist; @@ -528,11 +528,11 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 11; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = PCW579R278; DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 10; + DYLIB_CURRENT_VERSION = 11; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = source/Info.plist; diff --git a/Tests/Info.plist b/Tests/Info.plist index 73ed4c8..3fba1fe 100644 --- a/Tests/Info.plist +++ b/Tests/Info.plist @@ -15,8 +15,8 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 1.4.3 + 1.5.0 CFBundleVersion - 10 + 11 diff --git a/source/Info.plist b/source/Info.plist index 19f3e09..857d3cd 100644 --- a/source/Info.plist +++ b/source/Info.plist @@ -15,8 +15,8 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.4.3 + 1.5.0 CFBundleVersion - 10 + 11