Răsfoiți Sursa

Replace FBSnapshotTestCase with pointfree/swift-snapshot-testing (#4574)

* Replace FBSnapshotTestCase with pointfree/SnapshotTesting

Use github actions for testing

* Added iOS Snapshots

* Update tests for SPM

* Add snapshots for x86 and Silicon

* Use Charts scheme for testing

* Remove Carthage search paths

* Fix x86 snapshots directory name

* Clean iOS and tvOS tests before testing

* Added action for building the iOS demo
Jacob Christie 4 ani în urmă
părinte
comite
eb737573fd
100 a modificat fișierele cu 464 adăugiri și 849 ștergeri
  1. 44 6
      .github/workflows/swift.yml
  2. 0 25
      .travis.yml
  3. 0 1
      Cartfile.private
  4. 0 1
      Cartfile.resolved
  5. 52 80
      Charts.xcodeproj/project.pbxproj
  6. 9 0
      Charts.xcworkspace/xcshareddata/swiftpm/Package.resolved
  7. 0 6
      Gemfile
  8. 0 122
      Gemfile.lock
  9. 0 182
      Rakefile
  10. 0 81
      Tests/Charts/LineChartTests.swift
  11. 0 29
      Tests/Charts/Snapshot.swift
  12. 104 150
      Tests/ChartsTests/BarChartTests.swift
  13. 12 14
      Tests/ChartsTests/ChartDataTests.swift
  14. 20 27
      Tests/ChartsTests/ChartUtilsTests.swift
  15. 18 29
      Tests/ChartsTests/CombinedChartTests.swift
  16. 1 2
      Tests/ChartsTests/EquatableTests.swift
  17. 34 50
      Tests/ChartsTests/HorizontalBarChartTests.swift
  18. 72 0
      Tests/ChartsTests/LineChartTests.swift
  19. 36 44
      Tests/ChartsTests/PieChartTests.swift
  20. 0 0
      Tests/ChartsTests/Resources/Info.plist
  21. 6 0
      Tests/ChartsTests/Resources/Media.xcassets/Contents.json
  22. 0 0
      Tests/ChartsTests/Resources/Media.xcassets/icon.imageset/Contents.json
  23. 0 0
      Tests/ChartsTests/Resources/Media.xcassets/icon.imageset/star-1.png
  24. 0 0
      Tests/ChartsTests/Resources/Media.xcassets/icon.imageset/star-2.png
  25. 0 0
      Tests/ChartsTests/Resources/Media.xcassets/icon.imageset/star.png
  26. 56 0
      Tests/ChartsTests/Utilities.swift
  27. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDefaultBarDataSetLabels-iOS_390-0_844-0.1.png
  28. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDefaultBarDataSetLabels-tvOS_1920-0_1080-0.1.png
  29. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDefaultValues-iOS_390-0_844-0.1.png
  30. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDefaultValues-tvOS_1920-0_1080-0.1.png
  31. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDrawIcons-iOS_390-0_844-0.1.png
  32. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDrawIcons-tvOS_1920-0_1080-0.1.png
  33. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideHorizontalGridlines-iOS_390-0_844-0.1.png
  34. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideHorizontalGridlines-tvOS_1920-0_1080-0.1.png
  35. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideLeftAxis-iOS_390-0_844-0.1.png
  36. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideLeftAxis-tvOS_1920-0_1080-0.1.png
  37. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideRightAxis-iOS_390-0_844-0.1.png
  38. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideRightAxis-tvOS_1920-0_1080-0.1.png
  39. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideVerticalGridlines-iOS_390-0_844-0.1.png
  40. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideVerticalGridlines-tvOS_1920-0_1080-0.1.png
  41. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHidesValues-iOS_390-0_844-0.1.png
  42. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHidesValues-tvOS_1920-0_1080-0.1.png
  43. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxis-iOS_390-0_844-0.1.png
  44. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxis-tvOS_1920-0_1080-0.1.png
  45. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxisWithNegativeValues-iOS_390-0_844-0.1.png
  46. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxisWithNegativeValues-tvOS_1920-0_1080-0.1.png
  47. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxisWithPositiveValues-iOS_390-0_844-0.1.png
  48. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxisWithPositiveValues-tvOS_1920-0_1080-0.1.png
  49. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxis-iOS_390-0_844-0.1.png
  50. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxis-tvOS_1920-0_1080-0.1.png
  51. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxisWithNegativeValues-iOS_390-0_844-0.1.png
  52. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxisWithNegativeValues-tvOS_1920-0_1080-0.1.png
  53. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxisWithPositiveValues-iOS_390-0_844-0.1.png
  54. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxisWithPositiveValues-tvOS_1920-0_1080-0.1.png
  55. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValues-iOS_390-0_844-0.1.png
  56. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValues-tvOS_1920-0_1080-0.1.png
  57. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximum-iOS_390-0_844-0.1.png
  58. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximum-tvOS_1920-0_1080-0.1.png
  59. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximum2-iOS_390-0_844-0.1.png
  60. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximum2-tvOS_1920-0_1080-0.1.png
  61. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum-iOS_390-0_844-0.1.png
  62. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum-tvOS_1920-0_1080-0.1.png
  63. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMinimum-iOS_390-0_844-0.1.png
  64. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMinimum-tvOS_1920-0_1080-0.1.png
  65. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMinimum2-iOS_390-0_844-0.1.png
  66. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMinimum2-tvOS_1920-0_1080-0.1.png
  67. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNotDrawValueAboveBars-iOS_390-0_844-0.1.png
  68. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNotDrawValueAboveBars-tvOS_1920-0_1080-0.1.png
  69. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValues-iOS_390-0_844-0.1.png
  70. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValues-tvOS_1920-0_1080-0.1.png
  71. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximum-iOS_390-0_844-0.1.png
  72. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximum-tvOS_1920-0_1080-0.1.png
  73. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximum2-iOS_390-0_844-0.1.png
  74. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximum2-tvOS_1920-0_1080-0.1.png
  75. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum-iOS_390-0_844-0.1.png
  76. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum-tvOS_1920-0_1080-0.1.png
  77. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMinimum-iOS_390-0_844-0.1.png
  78. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMinimum-tvOS_1920-0_1080-0.1.png
  79. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMinimum2-iOS_390-0_844-0.1.png
  80. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMinimum2-tvOS_1920-0_1080-0.1.png
  81. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedDrawValues-iOS_390-0_844-0.1.png
  82. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedDrawValues-tvOS_1920-0_1080-0.1.png
  83. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedNotDrawValues-iOS_390-0_844-0.1.png
  84. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedNotDrawValues-tvOS_1920-0_1080-0.1.png
  85. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedNotDrawValuesAboveBars-iOS_390-0_844-0.1.png
  86. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedNotDrawValuesAboveBars-tvOS_1920-0_1080-0.1.png
  87. BIN
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testZeroValues-iOS_390-0_844-0.1.png
  88. 0 0
      Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testZeroValues-tvOS_1920-0_1080-0.1.png
  89. BIN
      Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testAllRightAxisDependency-iOS_390-0_844-0.1.png
  90. 0 0
      Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testAllRightAxisDependency-tvOS_1920-0_1080-0.1.png
  91. BIN
      Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testDefaultAxisDependency-iOS_390-0_844-0.1.png
  92. 0 0
      Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testDefaultAxisDependency-tvOS_1920-0_1080-0.1.png
  93. BIN
      Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testLeftRightAxisDependency-iOS_390-0_844-0.1.png
  94. 0 0
      Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testLeftRightAxisDependency-tvOS_1920-0_1080-0.1.png
  95. BIN
      Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testDefaultValues-iOS_390-0_844-0.1.png
  96. 0 0
      Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testDefaultValues-tvOS_1920-0_1080-0.1.png
  97. BIN
      Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testHidesValues-iOS_390-0_844-0.1.png
  98. 0 0
      Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testHidesValues-tvOS_1920-0_1080-0.1.png
  99. BIN
      Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testNotDrawValueAboveBars-iOS_390-0_844-0.1.png
  100. 0 0
      Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testNotDrawValueAboveBars-tvOS_1920-0_1080-0.1.png

+ 44 - 6
.github/workflows/swift.yml

@@ -2,16 +2,54 @@ name: Swift
 
 on:
   push:
-    branches: [ master ]
+    branches:
+      - master
   pull_request:
-    branches: [ master ]
+    branches:
+      - '*'
 
 jobs:
-  build:
+  iOS:
+    runs-on: macos-latest
+    env:
+      DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer
+    strategy:
+      matrix:
+        destination: ["OS=14.4,name=iPhone 12 Pro"] #, "OS=12.4,name=iPhone XS", "OS=11.4,name=iPhone X", "OS=10.3.1,name=iPhone SE"]
+    steps:
+      - uses: actions/checkout@v2
+      - name: iOS - ${{ matrix.destination }}
+        run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -workspace "Charts.xcworkspace" -scheme "Charts" -destination "${{ matrix.destination }}" clean test | xcpretty
 
+  tvOS:
     runs-on: macos-latest
+    env:
+      DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer
+    strategy:
+      matrix:
+        destination: ["OS=14.3,name=Apple TV 4K"]
+    steps:
+      - uses: actions/checkout@v2
+      - name: tvOS - ${{ matrix.destination }}
+        run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -workspace "Charts.xcworkspace" -scheme "Charts" -destination "${{ matrix.destination }}" clean test | xcpretty
 
+  macOS_demo:
+    runs-on: macOS-latest
+    env:
+      DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer
+    steps:
+      - uses: actions/checkout@v2
+      - name: macOS
+        run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -workspace "Charts.xcworkspace" -scheme "ChartsDemo-macOS" -destination "platform=macOS" clean build | xcpretty
+
+  iOS_demo:
+    runs-on: macos-latest
+    env:
+      DEVELOPER_DIR: /Applications/Xcode_12.4.app/Contents/Developer
+    strategy:
+      matrix:
+        destination: ["OS=14.4,name=iPhone 12 Pro"] #, "OS=12.4,name=iPhone XS", "OS=11.4,name=iPhone X", "OS=10.3.1,name=iPhone SE"]
     steps:
-    - uses: actions/checkout@v2
-    - name: Build
-      run: swift build -v
+      - uses: actions/checkout@v2
+      - name: iOS - ${{ matrix.destination }}
+        run: set -o pipefail && env NSUnbufferedIO=YES xcodebuild -workspace "Charts.xcworkspace" -scheme "ChartsDemo-iOS" -destination "${{ matrix.destination }}" clean build | xcpretty

+ 0 - 25
.travis.yml

@@ -1,25 +0,0 @@
-language: objective-c
-osx_image: xcode12
-matrix:
-  include:
-    - osx_image: xcode12
-      env: PLATFORM="iOS"
-    - osx_image: xcode12
-      env: PLATFORM="tvOS"
-    - osx_image: xcode12
-      env: PLATFORM="macOS"
-env:
-  global:
-    - LANG=en_US.UTF-8
-    - secure: HRl5Cg3/LmTJYCSDGtV8Fiqf6OgWXR6C5YkNviOElU9YmcCTvnmE7MCm+gK8hJNIQ2mWCBTlxTC7jJxeYlx0D+JQ6IhRc75B4zXgbtth6HCzlvhWDcBbNU/K+JPDjy2EAoVgvf8Xseq6GqM4WcVg2Pwr9PS3aaH/SKDE6yVoPXRM2wXRAxIdxayqm/RQgG88jAKgg+Ub5DKW/c9NLLbUf/WdY9SgQDJtqeZCMv7G3/IzW34KZgVPsqSrPByzZXbf7KgYkYLQlscH4mcUctk1qxhdCae//zcgUZo/utpXWbPXQqtvDpuqrg9IRvoGxa/D1I7dLSJsVnk4aP7RW18vn4HJ82C2AiEp+lU2TQE9y5lXcGssZVIa5aZNTWL90HVer3Kg6AnHffvdCSZ/UHsMZJFURUXL9fRIlWVGuEDeQOqlV6lUmEtp/BiEdV4D5PuCyT6snsmEwkc51goyqh6uS6XhJyqYEQdxdoybznwp91tVmASsRybppIGHTkcWN5csF4zQt40tEwd8LoqM+bBUo0wxKiKsNsecL4JA+YDYs2saZY9U3s8jAaIon+qDu071fPRaPEvBhYHYDhy4cTvBXibyGUYGHkrgLu0w19wDfHcJKt2In58yOmaCCLNoTGp/ZLNVRyZ8VDlj/NdJ2dWpMsL2Aj7OxU065kCL2FlvuRU=
-cache:
-  - bundler
-before_install:
-  - brew update
-  - brew upgrade carthage || true
-  - carthage version
-  - ./carthage.sh bootstrap --platform $PLATFORM --no-use-binaries
-script:
-  - bundle exec rake ci[$PLATFORM]
-after_success:
-  - bash <(curl -s https://codecov.io/bash)

+ 0 - 1
Cartfile.private

@@ -1 +0,0 @@
-github "uber/ios-snapshot-test-case"

+ 0 - 1
Cartfile.resolved

@@ -1 +0,0 @@
-github "uber/ios-snapshot-test-case" "6.2.0"

+ 52 - 80
Charts.xcodeproj/project.pbxproj

@@ -7,7 +7,6 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		00B8BF5901C2D220357B0B2A /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 41DDB768A1D033A34F0EF9E0 /* Media.xcassets */; };
 		00BC23EF0E04E17188344403 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D7184C8A5A60A3522AB9B05 /* BarChartDataProvider.swift */; };
 		02A6E6E1A82A27A66B8D08C4 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266E162DA8B29D9AEB6A9397 /* MoveViewJob.swift */; };
 		03960E8148C6AEDACE4B77CC /* Marker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 596963A429D485E3894C4666 /* Marker.swift */; };
@@ -15,7 +14,7 @@
 		05253AFC448C107DEF54C2FE /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52265C1B343CCC41AF2300E3 /* CombinedChartRenderer.swift */; };
 		0529DD51622C8769C1121F90 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 823F7DB281C6C6F069A69605 /* CrossShapeRenderer.swift */; };
 		0577C2B38BCE4C871F262714 /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2EA58CB336967198D30D20 /* AnimatedZoomViewJob.swift */; };
-		064989461F5C99C7006E8BB3 /* Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 064989451F5C99C7006E8BB3 /* Snapshot.swift */; };
+		064989461F5C99C7006E8BB3 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 064989451F5C99C7006E8BB3 /* Utilities.swift */; };
 		06AB297F20FA726600BAD505 /* Highlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06AB297E20FA726500BAD505 /* Highlighter.swift */; };
 		0A772AEC08246FEC480673E5 /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6C9631C69B2D772BBD9232 /* PieRadarChartViewBase.swift */; };
 		0C52C70C6E6EA09BD7426386 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBB57D6FA41029B08F26D7B /* RadarChartData.swift */; };
@@ -29,7 +28,9 @@
 		219192CA6B4895319AB49DCA /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B1C588E9DF6FFD56D7ADF8E /* BarLineScatterCandleBubbleRenderer.swift */; };
 		221CA2922588FCBC00C2DD1E /* Sequence+KeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 221CA2912588FCBC00C2DD1E /* Sequence+KeyPath.swift */; };
 		2243BBFD1FF156EC00B49D0B /* EquatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2243BBFB1FF156D000B49D0B /* EquatableTests.swift */; };
+		22786E8525CD96620051335B /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 22786E8325CD96620051335B /* Media.xcassets */; };
 		228D56232554F27A00BEE75E /* Algorithms in Frameworks */ = {isa = PBXBuildFile; productRef = 228D56222554F27A00BEE75E /* Algorithms */; };
+		22BBDA0825CC4C2F00435670 /* SnapshotTesting in Frameworks */ = {isa = PBXBuildFile; productRef = 22BBDA0725CC4C2F00435670 /* SnapshotTesting */; };
 		23649EFC635A76022F07FFA6 /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD02157CF8CEE1189BF681DA /* PieChartDataEntry.swift */; };
 		23FA50B2730D8C7ACA091C4F /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F279974FE650E57A061B09 /* BarChartRenderer.swift */; };
 		24151B0729D77251A8494D70 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 105FFC9D3773A9C7A60A897F /* LineRadarRenderer.swift */; };
@@ -178,7 +179,7 @@
 		0216EDC6A1FE272F4EB19FCF /* DataRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataRenderer.swift; path = Source/Charts/Renderers/DataRenderer.swift; sourceTree = "<group>"; };
 		04F7B9DF1F2D66E7279771D4 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = "<group>"; };
 		0619A877C69A95ECCC440A44 /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = "<group>"; };
-		064989451F5C99C7006E8BB3 /* Snapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Snapshot.swift; path = Tests/Charts/Snapshot.swift; sourceTree = "<group>"; };
+		064989451F5C99C7006E8BB3 /* Utilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utilities.swift; sourceTree = "<group>"; };
 		06AB297E20FA726500BAD505 /* Highlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Highlighter.swift; path = Source/Charts/Highlight/Highlighter.swift; sourceTree = "<group>"; };
 		0BD9DF16AF59680A3BB49452 /* AxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisValueFormatter.swift; path = Source/Charts/Formatters/AxisValueFormatter.swift; sourceTree = "<group>"; };
 		0DABDBBCCE6B3620C967F04A /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = "<group>"; };
@@ -189,7 +190,7 @@
 		10DD0A02E3CF611BD11EBA9B /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = "<group>"; };
 		11EF1FE22549E885C8F40738 /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = "<group>"; };
 		12409C3EA15787C11AF0D2BC /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = "<group>"; };
-		135F11CD20425AF600D655A3 /* PieChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PieChartTests.swift; path = Tests/Charts/PieChartTests.swift; sourceTree = "<group>"; };
+		135F11CD20425AF600D655A3 /* PieChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PieChartTests.swift; sourceTree = "<group>"; };
 		18462BFDD9DEE76D51D40503 /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = "<group>"; };
 		18BFB0A14A5C47A302A597D9 /* CandleChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/CandleChartDataSetProtocol.swift; sourceTree = "<group>"; };
 		1C02C3AF5C92FCFC18224C35 /* XAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRenderer.swift; path = Source/Charts/Renderers/XAxisRenderer.swift; sourceTree = "<group>"; };
@@ -198,7 +199,9 @@
 		2194AA554712E6BA2677F114 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = "<group>"; };
 		219BC9CEA037F897E92E45D1 /* ScatterChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/ScatterChartDataSetProtocol.swift; sourceTree = "<group>"; };
 		221CA2912588FCBC00C2DD1E /* Sequence+KeyPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "Sequence+KeyPath.swift"; path = "Source/Charts/Utils/Sequence+KeyPath.swift"; sourceTree = "<group>"; };
-		2243BBFB1FF156D000B49D0B /* EquatableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EquatableTests.swift; path = Tests/Charts/EquatableTests.swift; sourceTree = "<group>"; };
+		2243BBFB1FF156D000B49D0B /* EquatableTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EquatableTests.swift; sourceTree = "<group>"; };
+		22786E8325CD96620051335B /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = "<group>"; };
+		22786E8425CD96620051335B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		23D35CF6F9177D77B6B97AE1 /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = "<group>"; };
 		2440DB759AB93B4A928A3F6F /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = "<group>"; };
 		2465CB73738EBAFB46C57288 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = "<group>"; };
@@ -217,7 +220,6 @@
 		3ED23C354AFE81818D78E645 /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = "<group>"; };
 		3F8146ABC9FC311AF8CA699C /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = "<group>"; };
 		3FDA09EF973925A110506799 /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = "<group>"; };
-		41DDB768A1D033A34F0EF9E0 /* Media.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = "Tests/Supporting Files/Media.xcassets"; sourceTree = "<group>"; };
 		429E88F2729735DC092EE556 /* LineChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/LineChartDataSetProtocol.swift; sourceTree = "<group>"; };
 		45C6D3723C4E001B119CA0C8 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = "<group>"; };
 		45E31A4356CC6F283C29954B /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = "<group>"; };
@@ -241,7 +243,7 @@
 		5983826927D825EF5F855C28 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = "<group>"; };
 		5A4CFFFB65819121595F06F1 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Source/Charts/Utils/Fill.swift; sourceTree = "<group>"; };
 		5B1C588E9DF6FFD56D7ADF8E /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = "<group>"; };
-		5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartTests.swift; path = Tests/Charts/BarChartTests.swift; sourceTree = "<group>"; };
+		5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BarChartTests.swift; sourceTree = "<group>"; };
 		6021C9E424C36116AEA78CC9 /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = "<group>"; };
 		62B73FCEDD3841E7B958F6A9 /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = "<group>"; };
 		65AD9E95D9ED4DC0BD73A743 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -256,7 +258,7 @@
 		72EAEBB7CF73E33565FC2896 /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = "<group>"; };
 		75F279974FE650E57A061B09 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = "<group>"; };
 		7A53A9E42FC07FFDACA937C1 /* BarChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/BarChartDataSetProtocol.swift; sourceTree = "<group>"; };
-		7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtilsTests.swift; path = Tests/Charts/ChartUtilsTests.swift; sourceTree = "<group>"; };
+		7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChartUtilsTests.swift; sourceTree = "<group>"; };
 		7AC9C3D69ACB5BDE22421E15 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = "<group>"; };
 		7EDA3AD550AEFC93C8D15B9C /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = "<group>"; };
 		80D5B764EC0AE1E17E55DC67 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Source/Charts/Renderers/ScatterChartRenderer.swift; sourceTree = "<group>"; };
@@ -282,18 +284,17 @@
 		B137428B41C143D5115726C4 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = "<group>"; };
 		B1BA6B21CBDF77A15848994F /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = "<group>"; };
 		B44829AF0ADA583F1F0279B7 /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = "<group>"; };
-		B66817452241E3CC00017CF1 /* HorizontalBarChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartTests.swift; path = Tests/Charts/HorizontalBarChartTests.swift; sourceTree = "<group>"; };
-		B6BF9A551F91993A00E62A5D /* CombinedChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CombinedChartTests.swift; path = Tests/Charts/CombinedChartTests.swift; sourceTree = "<group>"; };
+		B66817452241E3CC00017CF1 /* HorizontalBarChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HorizontalBarChartTests.swift; sourceTree = "<group>"; };
+		B6BF9A551F91993A00E62A5D /* CombinedChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombinedChartTests.swift; sourceTree = "<group>"; };
 		BA157EFF2F952192C11DF937 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = "<group>"; };
 		BA1A58428DC4780BAB4EAADC /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = "<group>"; };
 		BC19DC2434D65FFB446A61B7 /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = "<group>"; };
 		BD02157CF8CEE1189BF681DA /* PieChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift; sourceTree = "<group>"; };
 		BD5C6D20243EC2F19069AACD /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = "<group>"; };
 		BFABD027DAF6851088F002AC /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = "<group>"; };
-		C03E6D8023DAAB2600083010 /* ChartDataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ChartDataTests.swift; path = Tests/Charts/ChartDataTests.swift; sourceTree = "<group>"; };
+		C03E6D8023DAAB2600083010 /* ChartDataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartDataTests.swift; sourceTree = "<group>"; };
 		C31AA65EA27776F8C653C7E8 /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = "<group>"; };
 		C52E8344160B5E689DA3C25C /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = "<group>"; };
-		C574E1BC7E12D937A5471EF8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Tests/Supporting Files/Info.plist"; sourceTree = "<group>"; };
 		C58BD7B14BEA440783ED8D2B /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = "<group>"; };
 		C75935E899183DDFA181E2CC /* AxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRenderer.swift; path = Source/Charts/Renderers/AxisRenderer.swift; sourceTree = "<group>"; };
 		C8C9A105A7DB64F39DDA648B /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = "<group>"; };
@@ -304,7 +305,7 @@
 		C9F3DC282355FA2F000C3215 /* Platform+Touch Handling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "Platform+Touch Handling.swift"; path = "Source/Charts/Utils/Platform+Touch Handling.swift"; sourceTree = "<group>"; };
 		C9FE42E868A225C116537368 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = "<group>"; };
 		CB1DD1A0F64266A10EE94194 /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = "<group>"; };
-		D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartTests.swift; path = Tests/Charts/LineChartTests.swift; sourceTree = "<group>"; };
+		D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LineChartTests.swift; sourceTree = "<group>"; };
 		D2E698FF540029B70AC97AD7 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = "<group>"; };
 		D6C1BEFDF17404666C7B6054 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = "<group>"; };
 		DA2AA6CC89F809DCCD7605B4 /* PieChartDataSetProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSetProtocol.swift; path = Source/Charts/Data/Interfaces/PieChartDataSetProtocol.swift; sourceTree = "<group>"; };
@@ -338,6 +339,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				C7B150D740255670DEB9F455 /* Charts.framework in Frameworks */,
+				22BBDA0825CC4C2F00435670 /* SnapshotTesting in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -428,6 +430,15 @@
 			name = ChartRenderers;
 			sourceTree = "<group>";
 		};
+		22786E8225CD96620051335B /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				22786E8325CD96620051335B /* Media.xcassets */,
+				22786E8425CD96620051335B /* Info.plist */,
+			);
+			path = Resources;
+			sourceTree = "<group>";
+		};
 		22C014222006FFE800D5B025 /* ChartData */ = {
 			isa = PBXGroup;
 			children = (
@@ -577,6 +588,7 @@
 		9613A7C800C7F065A823D587 /* Charts */ = {
 			isa = PBXGroup;
 			children = (
+				22786E8225CD96620051335B /* Resources */,
 				5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */,
 				B66817452241E3CC00017CF1 /* HorizontalBarChartTests.swift */,
 				7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */,
@@ -584,10 +596,11 @@
 				B6BF9A551F91993A00E62A5D /* CombinedChartTests.swift */,
 				D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */,
 				135F11CD20425AF600D655A3 /* PieChartTests.swift */,
-				064989451F5C99C7006E8BB3 /* Snapshot.swift */,
+				064989451F5C99C7006E8BB3 /* Utilities.swift */,
 				C03E6D8023DAAB2600083010 /* ChartDataTests.swift */,
 			);
 			name = Charts;
+			path = Tests/ChartsTests;
 			sourceTree = "<group>";
 		};
 		A49C1F0F9CCD6E5C143C29F4 /* Animation */ = {
@@ -630,15 +643,6 @@
 			name = Jobs;
 			sourceTree = "<group>";
 		};
-		BF662941E21BC049994B2598 /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				C574E1BC7E12D937A5471EF8 /* Info.plist */,
-				41DDB768A1D033A34F0EF9E0 /* Media.xcassets */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
 		D047819AB7170595896D6FE8 /* Utils */ = {
 			isa = PBXGroup;
 			children = (
@@ -662,7 +666,6 @@
 		D2C26AC015E753014C7571E4 /* Tests */ = {
 			isa = PBXGroup;
 			children = (
-				BF662941E21BC049994B2598 /* Supporting Files */,
 				9613A7C800C7F065A823D587 /* Charts */,
 			);
 			name = Tests;
@@ -761,11 +764,9 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = E61E9728E2BF9CC4048B13D5 /* Build configuration list for PBXNativeTarget "ChartsTests" */;
 			buildPhases = (
-				D6BF00523905132F162A7710 /* Build Dependencies */,
 				E356A2384A2368AB3D2C7912 /* Sources */,
 				5B102E31AA8399941CC6248D /* Resources */,
 				77997192275C47C45A0A2E9A /* Frameworks */,
-				6BA68666BDA3FCF79C2A6801 /* Copy Carthage Frameworks */,
 			);
 			buildRules = (
 			);
@@ -773,6 +774,9 @@
 				8676F8A013D87F9961E92465 /* PBXTargetDependency */,
 			);
 			name = ChartsTests;
+			packageProductDependencies = (
+				22BBDA0725CC4C2F00435670 /* SnapshotTesting */,
+			);
 			productName = ChartsTests;
 			productReference = 1CBBC58C6CE1EBEE9852CE41 /* ChartsTests.xctest */;
 			productType = "com.apple.product-type.bundle.unit-test";
@@ -805,6 +809,7 @@
 			mainGroup = 865A1CF149F52850CAB7F177;
 			packageReferences = (
 				228D56212554F27A00BEE75E /* XCRemoteSwiftPackageReference "swift-algorithms" */,
+				22BBDA0625CC4C2F00435670 /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */,
 			);
 			productRefGroup = AB2D554102718F209377399E /* Products */;
 			projectDirPath = "";
@@ -821,7 +826,7 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				00B8BF5901C2D220357B0B2A /* Media.xcassets in Resources */,
+				22786E8525CD96620051335B /* Media.xcassets in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -834,36 +839,6 @@
 		};
 /* End PBXResourcesBuildPhase section */
 
-/* Begin PBXShellScriptBuildPhase section */
-		6BA68666BDA3FCF79C2A6801 /* Copy Carthage Frameworks */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				FBSnapshotTestCase.framework,
-			);
-			name = "Copy Carthage Frameworks";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = " exec \"${SRCROOT}/scripts/copy-carthage-frameworks.sh\"";
-		};
-		D6BF00523905132F162A7710 /* Build Dependencies */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			name = "Build Dependencies";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "exec \"${SRCROOT}/scripts/build-dependencies.sh\"";
-		};
-/* End PBXShellScriptBuildPhase section */
-
 /* Begin PBXSourcesBuildPhase section */
 		B5996DB2D9B6F0DB0E9D3F3E /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
@@ -1024,7 +999,7 @@
 				2BF85BEA981B359A65E9BF67 /* LineChartTests.swift in Sources */,
 				B66817462241E3CC00017CF1 /* HorizontalBarChartTests.swift in Sources */,
 				135F11CE20425AF600D655A3 /* PieChartTests.swift in Sources */,
-				064989461F5C99C7006E8BB3 /* Snapshot.swift in Sources */,
+				064989461F5C99C7006E8BB3 /* Utilities.swift in Sources */,
 				C03E6D8123DAAB2600083010 /* ChartDataTests.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1086,17 +1061,9 @@
 				APPLICATION_EXTENSION_API_ONLY = NO;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				"FRAMEWORK_SEARCH_PATHS[sdk=appletv*]" = (
-					"$(SRCROOT)/Carthage/Build/tvOS/",
-					"$(inherited)",
-				);
-				"FRAMEWORK_SEARCH_PATHS[sdk=iphone*]" = (
-					"$(SRCROOT)/Carthage/Build/iOS/",
-					"$(inherited)",
-				);
 				GCC_NO_COMMON_BLOCKS = YES;
-				INFOPLIST_FILE = "Tests/Supporting Files/Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				INFOPLIST_FILE = Tests/ChartsTests/Resources/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -1115,7 +1082,7 @@
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 5.0;
-				TVOS_DEPLOYMENT_TARGET = 9.0;
+				TVOS_DEPLOYMENT_TARGET = 10.0;
 			};
 			name = Debug;
 		};
@@ -1279,17 +1246,9 @@
 				APPLICATION_EXTENSION_API_ONLY = NO;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				"FRAMEWORK_SEARCH_PATHS[sdk=appletv*]" = (
-					"$(SRCROOT)/Carthage/Build/tvOS/",
-					"$(inherited)",
-				);
-				"FRAMEWORK_SEARCH_PATHS[sdk=iphone*]" = (
-					"$(SRCROOT)/Carthage/Build/iOS/",
-					"$(inherited)",
-				);
 				GCC_NO_COMMON_BLOCKS = YES;
-				INFOPLIST_FILE = "Tests/Supporting Files/Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				INFOPLIST_FILE = Tests/ChartsTests/Resources/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -1308,7 +1267,7 @@
 				SWIFT_COMPILATION_MODE = wholemodule;
 				SWIFT_OPTIMIZATION_LEVEL = "-O";
 				SWIFT_VERSION = 5.0;
-				TVOS_DEPLOYMENT_TARGET = 9.0;
+				TVOS_DEPLOYMENT_TARGET = 10.0;
 			};
 			name = Release;
 		};
@@ -1353,6 +1312,14 @@
 				minimumVersion = 0.0.2;
 			};
 		};
+		22BBDA0625CC4C2F00435670 /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */ = {
+			isa = XCRemoteSwiftPackageReference;
+			repositoryURL = "https://github.com/pointfreeco/swift-snapshot-testing";
+			requirement = {
+				kind = upToNextMajorVersion;
+				minimumVersion = 1.8.2;
+			};
+		};
 /* End XCRemoteSwiftPackageReference section */
 
 /* Begin XCSwiftPackageProductDependency section */
@@ -1361,6 +1328,11 @@
 			package = 228D56212554F27A00BEE75E /* XCRemoteSwiftPackageReference "swift-algorithms" */;
 			productName = Algorithms;
 		};
+		22BBDA0725CC4C2F00435670 /* SnapshotTesting */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = 22BBDA0625CC4C2F00435670 /* XCRemoteSwiftPackageReference "swift-snapshot-testing" */;
+			productName = SnapshotTesting;
+		};
 /* End XCSwiftPackageProductDependency section */
 	};
 	rootObject = 193FC8DF32D250560C5F5D77 /* Project object */;

+ 9 - 0
Charts.xcworkspace/xcshareddata/swiftpm/Package.resolved

@@ -18,6 +18,15 @@
           "revision": "6b24333510e9044cf4716a07bed65eeed6bc6393",
           "version": "0.0.8"
         }
+      },
+      {
+        "package": "SnapshotTesting",
+        "repositoryURL": "https://github.com/pointfreeco/swift-snapshot-testing",
+        "state": {
+          "branch": null,
+          "revision": "c466812aa2e22898f27557e2e780d3aad7a27203",
+          "version": "1.8.2"
+        }
       }
     ]
   },

+ 0 - 6
Gemfile

@@ -1,6 +0,0 @@
-source 'https://rubygems.org'
-
-gem 'cocoapods', '>= 1.8.3'
-gem 'github_changelog_generator'
-gem 'rake'
-gem 'xcpretty'

+ 0 - 122
Gemfile.lock

@@ -1,122 +0,0 @@
-GEM
-  remote: https://rubygems.org/
-  specs:
-    CFPropertyList (3.0.2)
-    activesupport (4.2.11.1)
-      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)
-      httpclient (~> 2.8, >= 2.8.3)
-      json (>= 1.5.1)
-    atomos (0.1.3)
-    claide (1.0.3)
-    cocoapods (1.9.1)
-      activesupport (>= 4.0.2, < 5)
-      claide (>= 1.0.2, < 2.0)
-      cocoapods-core (= 1.9.1)
-      cocoapods-deintegrate (>= 1.0.3, < 2.0)
-      cocoapods-downloader (>= 1.2.2, < 2.0)
-      cocoapods-plugins (>= 1.0.0, < 2.0)
-      cocoapods-search (>= 1.0.0, < 2.0)
-      cocoapods-stats (>= 1.0.0, < 2.0)
-      cocoapods-trunk (>= 1.4.0, < 2.0)
-      cocoapods-try (>= 1.1.0, < 2.0)
-      colored2 (~> 3.1)
-      escape (~> 0.0.4)
-      fourflusher (>= 2.3.0, < 3.0)
-      gh_inspector (~> 1.0)
-      molinillo (~> 0.6.6)
-      nap (~> 1.0)
-      ruby-macho (~> 1.4)
-      xcodeproj (>= 1.14.0, < 2.0)
-    cocoapods-core (1.9.1)
-      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-plugins (1.0.0)
-      nap
-    cocoapods-search (1.0.0)
-    cocoapods-stats (1.1.0)
-    cocoapods-trunk (1.4.1)
-      nap (>= 0.8, < 2.0)
-      netrc (~> 0.11)
-    cocoapods-try (1.1.0)
-    colored2 (3.1.2)
-    concurrent-ruby (1.1.6)
-    escape (0.0.4)
-    ethon (0.12.0)
-      ffi (>= 1.3.0)
-    faraday (1.0.1)
-      multipart-post (>= 1.2, < 3)
-    faraday-http-cache (2.2.0)
-      faraday (>= 0.8)
-    ffi (1.12.2)
-    fourflusher (2.3.1)
-    fuzzy_match (2.0.4)
-    gh_inspector (1.1.3)
-    github_changelog_generator (1.15.2)
-      activesupport
-      faraday-http-cache
-      multi_json
-      octokit (~> 4.6)
-      rainbow (>= 2.2.1)
-      rake (>= 10.0)
-      retriable (~> 3.0)
-    httpclient (2.8.3)
-    i18n (0.9.5)
-      concurrent-ruby (~> 1.0)
-    json (2.3.0)
-    minitest (5.14.0)
-    molinillo (0.6.6)
-    multi_json (1.14.1)
-    multipart-post (2.1.1)
-    nanaimo (0.2.6)
-    nap (1.1.0)
-    netrc (0.11.0)
-    octokit (4.18.0)
-      faraday (>= 0.9)
-      sawyer (~> 0.8.0, >= 0.5.3)
-    public_suffix (4.0.4)
-    rainbow (3.0.0)
-    rake (13.0.1)
-    retriable (3.1.2)
-    rouge (2.0.7)
-    ruby-macho (1.4.0)
-    sawyer (0.8.2)
-      addressable (>= 2.3.5)
-      faraday (> 0.8, < 2.0)
-    thread_safe (0.3.6)
-    typhoeus (1.3.1)
-      ethon (>= 0.9.0)
-    tzinfo (1.2.7)
-      thread_safe (~> 0.1)
-    xcodeproj (1.16.0)
-      CFPropertyList (>= 2.3.3, < 4.0)
-      atomos (~> 0.1.3)
-      claide (>= 1.0.2, < 2.0)
-      colored2 (~> 3.1)
-      nanaimo (~> 0.2.6)
-    xcpretty (0.3.0)
-      rouge (~> 2.0.7)
-
-PLATFORMS
-  ruby
-
-DEPENDENCIES
-  cocoapods (>= 1.8.3)
-  github_changelog_generator
-  rake
-  xcpretty
-
-BUNDLED WITH
-   1.17.2

+ 0 - 182
Rakefile

@@ -1,182 +0,0 @@
-def type
-  :project # set `:project` for xcodeproj and `:workspace` for xcworkspace
-end
-
-def project_name
-  'ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj'
-end
-
-def macos_project_name
-  'ChartsDemo-macOS/ChartsDemo-macOS.xcodeproj'
-end
-
-def configuration
-  'Debug'
-end
-
-def test_platforms
-  %i[
-    iOS
-    tvOS
-  ]
-end
-
-def build_platforms
-  [
-    :macOS
-  ]
-end
-
-def build_schemes
-  %w[
-    Charts
-  ]
-end
-
-def build_demo_schemes
-  %i[
-    ChartsDemo-iOS
-    ChartsDemo-iOS-Swift
-  ]
-end
-
-def build_macos_demo_schemes
-  [
-    'ChartsDemo-macOS'
-  ]
-end
-
-def test_schemes
-  [
-    'ChartsTests'
-  ]
-end
-
-def devices
-  {
-    iOS: {
-      sdk: 'iphonesimulator',
-      device: "name='iPhone 8'",
-      name: 'iPhone 8'
-    },
-    macOS: {
-      sdk: 'macosx',
-      device: "arch='x86_64'",
-      uuid: nil
-    },
-    tvOS: {
-      sdk: 'appletvsimulator',
-      device: "name='Apple TV'",
-      name: 'Apple TV'
-    }
-  }
-end
-
-def open_simulator_and_sleep(uuid)
-  return if uuid.nil? # Don't need a sleep on macOS because it runs first.
-  sh "xcrun instruments -w '#{uuid}' || sleep 15"
-end
-
-def xcodebuild(type, name, scheme, configuration, sdk, destination, tasks, xcprety_args)
-  # set either workspace or project flag for xcodebuild
-  case type
-  when :project
-    project_type = '-project'
-  when :workspace
-    project_type = '-workspace'
-  else
-    abort 'Invalid project type, use `:project` for xcodeproj and `:workspace` for xcworkspace.'
-  end
-
-  sh "set -o pipefail && xcodebuild #{project_type} '#{name}' -scheme '#{scheme}' -configuration '#{configuration}' -sdk #{sdk} -destination #{destination} #{tasks} | bundle exec xcpretty -c #{xcprety_args}"
-end
-
-def run_xcodebuild(tasks, destination, is_build_demo, xcprety_args)
-  sdk = destination[:sdk]
-  device = destination[:device]
-  uuid = destination[:uuid]
-
-  is_test = tasks.include?('test')
-  is_macos = sdk == 'macosx'
-
-  project = is_macos ? macos_project_name : project_name
-
-  schemes_to_execute = []
-  if is_test
-    schemes_to_execute = test_schemes
-  elsif is_build_demo
-    schemes_to_execute = is_macos ? build_macos_demo_schemes : build_demo_schemes
-  else
-    schemes_to_execute = build_schemes
-  end
-
-  open_simulator_and_sleep uuid if is_test
-
-  schemes_to_execute.each do |scheme|
-    xcodebuild type, project, scheme, configuration, sdk, device, tasks, xcprety_args
-  end
-end
-
-def execute(tasks, platform, is_build_demo = false, xcprety_args: '')
-  # platform specific settings
-  destination = devices[platform]
-
-  # check if xcodebuild needs to be run on multiple devices
-  if destination.is_a?(Array)
-    destination.each do |destination|
-      run_xcodebuild tasks, destination, is_build_demo, xcprety_args
-    end
-  else
-    run_xcodebuild tasks, destination, is_build_demo, xcprety_args
-  end
-end
-
-def arg_to_key(string_key)
-  case string_key.downcase
-  when 'ios'
-    :iOS
-  when 'tvos'
-    :tvOS
-  when 'macos'
-    :macOS
-  when 'watchos'
-    :watchOS
-  else
-    abort 'Invalid platform, use `iOS`, `tvOS`, `macOS` or `watchOS`'
-  end
-end
-
-desc 'Run CI tasks. Build and test or build depending on the platform.'
-task :ci, [:platform] do |_task, args|
-  platform = arg_to_key(args[:platform]) if args.key?(:platform)
-  is_build_demo = test_platforms.include?(platform) || build_platforms.include?(platform)
-
-  if test_platforms.include?(platform)  # iOS and tvOS
-    if platform == :iOS
-      execute 'clean', platform, is_build_demo
-      execute 'build', platform, is_build_demo
-      execute 'test', platform  # not use demo specifically
-    else
-      execute 'clean test', platform
-    end
-  elsif build_platforms.include?(platform)  # macOS
-    execute 'clean build', platform, is_build_demo
-  else
-    test_platforms.each do |platform|
-      execute 'clean test', platform
-    end
-    build_platforms.each do |platform|
-      execute 'clean build', platform
-    end
-  end
-end
-
-desc 'updated the podspec on cocoapods'
-task :update_pod do
-  sh 'bundle exec pod trunk push Charts.podspec --allow-warnings'
-end
-
-desc 'generate changelog'
-task :generate_changelog do
-  sh 'github_changelog_generator'
-end

+ 0 - 81
Tests/Charts/LineChartTests.swift

@@ -1,81 +0,0 @@
-import XCTest
-import FBSnapshotTestCase
-@testable import Charts
-
-class LineChartTests: FBSnapshotTestCase
-{
-    
-    var chart: LineChartView!
-    var dataSet: LineChartDataSet!
-    
-    override func setUp()
-    {
-        super.setUp()
-        
-        // Set to `true` to re-capture all snapshots
-        self.recordMode = false
-        
-        // Sample data
-        let values: [Double] = [8, 104, 81, 93, 52, 44, 97, 101, 75, 28,
-            76, 25, 20, 13, 52, 44, 57, 23, 45, 91,
-            99, 14, 84, 48, 40, 71, 106, 41, 45, 61]
-        
-        var entries: [ChartDataEntry] = Array()
-        
-        for (i, value) in values.enumerated()
-        {
-            entries.append(ChartDataEntry(x: Double(i), y: value, icon: UIImage(named: "icon", in: Bundle(for: self.classForCoder), compatibleWith: nil)))
-        }
-        
-        dataSet = LineChartDataSet(entries: entries, label: "First unit test data")
-        dataSet.drawIconsEnabled = false
-        dataSet.iconsOffset = CGPoint(x: 0, y: 20.0)
-
-        chart = LineChartView(frame: CGRect(x: 0, y: 0, width: 480, height: 350))
-        chart.backgroundColor = NSUIColor.clear
-        chart.leftAxis.axisMinimum = 0.0
-        chart.rightAxis.axisMinimum = 0.0
-        chart.data = LineChartData(dataSet: dataSet)
-    }
-    
-    override func tearDown()
-    {
-        // Put teardown code here. This method is called after the invocation of each test method in the class.
-        super.tearDown()
-    }
-    
-    func testDefaultValues()
-    {
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
-    }
-    
-    func testHidesValues()
-    {
-        dataSet.drawValuesEnabled = false
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
-    }
-    
-    func testDoesntDrawCircles()
-    {
-        dataSet.drawCirclesEnabled = false
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
-    }
-    
-    func testIsCubic()
-    {
-        dataSet.mode = LineChartDataSet.Mode.cubicBezier
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
-    }
-    
-    func testDoesntDrawCircleHole()
-    {
-        dataSet.drawCircleHoleEnabled = false
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
-    }
-    
-    func testDrawIcons()
-    {
-        dataSet.drawIconsEnabled = true
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
-    }
-}

+ 0 - 29
Tests/Charts/Snapshot.swift

@@ -1,29 +0,0 @@
-import CoreGraphics
-import FBSnapshotTestCase
-
-public struct Snapshot
-{
-    public static let tolerance: CGFloat = 0.001
-    
-    public static func identifier(_ size: CGSize) -> String {
-        #if os(tvOS)
-        let identifier = "tvOS"
-        #elseif os(iOS)
-        let identifier = "iOS"
-        #elseif os(OSX)
-        let identifier = "macOS"
-        #else
-        let identifier = ""
-        #endif
-        
-        return "\(identifier)_\(size.width)_\(size.height)"
-    }
-}
-
-public extension FBSnapshotTestCase
-{
-    func ChartsSnapshotVerifyView(_ view: UIView, identifier: String = "", suffixes: NSOrderedSet = NSOrderedSet(object: "_64"), perPixelTolerance: CGFloat = 0, overallTolerance: CGFloat = 0, file: StaticString = #file, line: UInt = #line)
-    {
-        FBSnapshotVerifyView(view, identifier: identifier, suffixes: suffixes, perPixelTolerance: perPixelTolerance, overallTolerance: overallTolerance, file: file, line: line)
-    }
-}

+ 104 - 150
Tests/Charts/BarChartTests.swift → Tests/ChartsTests/BarChartTests.swift

@@ -1,416 +1,370 @@
-import XCTest
-import FBSnapshotTestCase
 @testable import Charts
+import SnapshotTesting
+import XCTest
 
-class BarChartTests: FBSnapshotTestCase
-{
-    override func setUp()
-    {
+class BarChartTests: XCTestCase {
+    private lazy var icon = UIImage(named: "icon", in: Bundle(for: classForCoder), compatibleWith: nil)!
+
+    override func setUp() {
         super.setUp()
-        
-        // Set to `true` to re-capture all snapshots
-        self.recordMode = false
     }
-    
-    override func tearDown()
-    {
+
+    override func tearDown() {
         // Put teardown code here. This method is called after the invocation of each test method in the class.
         super.tearDown()
     }
-    
-    //MARK: Prepare
-    func setupCustomValuesDataEntries(values: [Double]) -> [ChartDataEntry]
-    {
+
+    // MARK: Prepare
+
+    func setupCustomValuesDataEntries(values: [Double]) -> [ChartDataEntry] {
         var entries: [ChartDataEntry] = Array()
-        for (i, value) in values.enumerated()
-        {
-            entries.append(BarChartDataEntry(x: Double(i), y: value, icon: UIImage(named: "icon", in: Bundle(for: self.classForCoder), compatibleWith: nil)))
+        for (i, value) in values.enumerated() {
+            entries.append(BarChartDataEntry(x: Double(i), y: value, icon: icon))
         }
         return entries
     }
 
-    func setupDefaultValuesDataEntries() -> [ChartDataEntry]
-    {
+    func setupDefaultValuesDataEntries() -> [ChartDataEntry] {
         let values: [Double] = [8, 104, -81, 93, 52, -44, 97, 101, -75, 28,
                                 -76, 25, 20, -13, 52, 44, -57, 23, 45, -91,
                                 99, 14, -84, 48, 40, -71, 106, 41, -45, 61]
         return setupCustomValuesDataEntries(values: values)
     }
 
-    func setupPositiveValuesDataEntries() -> [ChartDataEntry]
-    {
+    func setupPositiveValuesDataEntries() -> [ChartDataEntry] {
         let values: [Double] = [8, 104, 81, 93, 52, 44, 97, 101, 75, 28,
                                 76, 25, 20, 13, 52, 44, 57, 23, 45, 91,
                                 99, 14, 84, 48, 40, 71, 106, 41, 45, 61]
         return setupCustomValuesDataEntries(values: values)
     }
 
-    func setupNegativeValuesDataEntries() -> [ChartDataEntry]
-    {
+    func setupNegativeValuesDataEntries() -> [ChartDataEntry] {
         let values: [Double] = [-8, -104, -81, -93, -52, -44, -97, -101, -75, -28,
                                 -76, -25, -20, -13, -52, -44, -57, -23, -45, -91,
                                 -99, -14, -84, -48, -40, -71, -106, -41, -45, -61]
         return setupCustomValuesDataEntries(values: values)
     }
 
-    func setupZeroValuesDataEntries() -> [ChartDataEntry]
-    {
+    func setupZeroValuesDataEntries() -> [ChartDataEntry] {
         let values = [Double](repeating: 0.0, count: 30)
         return setupCustomValuesDataEntries(values: values)
     }
 
-    func setupStackedValuesDataEntries() -> [ChartDataEntry]
-    {
+    func setupStackedValuesDataEntries() -> [ChartDataEntry] {
         var entries: [ChartDataEntry] = Array()
-        entries.append(BarChartDataEntry(x: 0, yValues: [28, 50, 60, 30, 42], icon: UIImage(named: "icon")))
-        entries.append(BarChartDataEntry(x: 1, yValues: [-20, -36, -52, -40, -15], icon: UIImage(named: "icon")))
-        entries.append(BarChartDataEntry(x: 2, yValues: [10, 30, 40, 90, 72], icon: UIImage(named: "icon")))
-        entries.append(BarChartDataEntry(x: 3, yValues: [-40, -50, -30, -60, -20], icon: UIImage(named: "icon")))
-        entries.append(BarChartDataEntry(x: 4, yValues: [10, 40, 60, 45, 62], icon: UIImage(named: "icon")))
+        entries.append(BarChartDataEntry(x: 0, yValues: [28, 50, 60, 30, 42], icon: icon))
+        entries.append(BarChartDataEntry(x: 1, yValues: [-20, -36, -52, -40, -15], icon: icon))
+        entries.append(BarChartDataEntry(x: 2, yValues: [10, 30, 40, 90, 72], icon: icon))
+        entries.append(BarChartDataEntry(x: 3, yValues: [-40, -50, -30, -60, -20], icon: icon))
+        entries.append(BarChartDataEntry(x: 4, yValues: [10, 40, 60, 45, 62], icon: icon))
         return entries
     }
 
-    func setupDefaultStackedDataSet(chartDataEntries: [ChartDataEntry]) -> BarChartDataSet
-    {
+    func setupDefaultStackedDataSet(chartDataEntries: [ChartDataEntry]) -> BarChartDataSet {
         let dataSet = BarChartDataSet(entries: chartDataEntries, label: "Stacked bar chart unit test data")
         dataSet.drawIconsEnabled = false
         dataSet.iconsOffset = CGPoint(x: 0, y: -10.0)
-        dataSet.colors = Array(arrayLiteral:NSUIColor(red: 46/255.0, green: 204/255.0, blue: 113/255.0, alpha: 1.0),
-                               NSUIColor(red: 241/255.0, green: 196/255.0, blue: 15/255.0, alpha: 1.0),
-                               NSUIColor(red: 231/255.0, green: 76/255.0, blue: 60/255.0, alpha: 1.0),
-                               NSUIColor(red: 52/255.0, green: 152/255.0, blue: 219/255.0, alpha: 1.0)
-        )
+        dataSet.colors = Array(arrayLiteral: NSUIColor(red: 46 / 255.0, green: 204 / 255.0, blue: 113 / 255.0, alpha: 1.0),
+                               NSUIColor(red: 241 / 255.0, green: 196 / 255.0, blue: 15 / 255.0, alpha: 1.0),
+                               NSUIColor(red: 231 / 255.0, green: 76 / 255.0, blue: 60 / 255.0, alpha: 1.0),
+                               NSUIColor(red: 52 / 255.0, green: 152 / 255.0, blue: 219 / 255.0, alpha: 1.0))
         return dataSet
     }
 
-    func setupDefaultDataSet(chartDataEntries: [ChartDataEntry]) -> BarChartDataSet
-    {
+    func setupDefaultDataSet(chartDataEntries: [ChartDataEntry]) -> BarChartDataSet {
         let dataSet = BarChartDataSet(entries: chartDataEntries, label: "Bar chart unit test data")
         dataSet.drawIconsEnabled = false
         dataSet.iconsOffset = CGPoint(x: 0, y: -10.0)
         return dataSet
     }
 
-    func setupDefaultChart(dataSets: [BarChartDataSet]) -> BarChartView
-    {
+    func setupDefaultChart(dataSets: [BarChartDataSet]) -> BarChartView {
         let data = BarChartData(dataSets: dataSets)
         data.barWidth = 0.85
-        
+
         let chart = BarChartView(frame: CGRect(x: 0, y: 0, width: 480, height: 350))
         chart.backgroundColor = NSUIColor.clear
         chart.data = data
         return chart
     }
-    
-    //MARK: Start Test
-    func testDefaultValues()
-    {
+
+    // MARK: Start Test
+
+    func testDefaultValues() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
-
+        assertChartSnapshot(matching: chart)
     }
 
-    func testDefaultBarDataSetLabels()
-    {
+    func testDefaultBarDataSetLabels() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = BarChartDataSet(entries: dataEntries)
         dataSet.drawIconsEnabled = false
         let chart = setupDefaultChart(dataSets: [dataSet])
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testZeroValues()
-    {
+    func testZeroValues() {
         let dataEntries = setupZeroValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testPositiveValues()
-    {
+    func testPositiveValues() {
         let dataEntries = setupPositiveValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testPositiveValuesWithCustomAxisMaximum()
-    {
+    func testPositiveValuesWithCustomAxisMaximum() {
         let dataEntries = setupPositiveValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.axisMaximum = 50
         chart.clipValuesToContentEnabled = true
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testPositiveValuesWithCustomAxisMaximum2()
-    {
+    func testPositiveValuesWithCustomAxisMaximum2() {
         let dataEntries = setupPositiveValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.axisMaximum = -10
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testPositiveValuesWithCustomAxisMinimum()
-    {
+    func testPositiveValuesWithCustomAxisMinimum() {
         let dataEntries = setupPositiveValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.axisMinimum = 50
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testPositiveValuesWithCustomAxisMinimum2()
-    {
+    func testPositiveValuesWithCustomAxisMinimum2() {
         let dataEntries = setupPositiveValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.axisMinimum = 110
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum()
-    {
+    func testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum() {
         let dataEntries = setupPositiveValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
-        //If min is greater than max, then min and max will be exchanged.
+        // If min is greater than max, then min and max will be exchanged.
         chart.leftAxis.axisMaximum = 200
         chart.leftAxis.axisMinimum = -10
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testNegativeValues()
-    {
+    func testNegativeValues() {
         let dataEntries = setupNegativeValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testNegativeValuesWithCustomAxisMaximum()
-    {
+    func testNegativeValuesWithCustomAxisMaximum() {
         let dataEntries = setupNegativeValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.axisMaximum = 10
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testNegativeValuesWithCustomAxisMaximum2()
-    {
+    func testNegativeValuesWithCustomAxisMaximum2() {
         let dataEntries = setupNegativeValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.axisMaximum = -150
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-
-    func testNegativeValuesWithCustomAxisMinimum()
-    {
+    func testNegativeValuesWithCustomAxisMinimum() {
         let dataEntries = setupNegativeValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.axisMinimum = -200
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testNegativeValuesWithCustomAxisMinimum2()
-    {
+    func testNegativeValuesWithCustomAxisMinimum2() {
         let dataEntries = setupNegativeValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.axisMinimum = 10
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum()
-    {
+    func testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum() {
         let dataEntries = setupNegativeValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
-        //If min is greater than max, then min and max will be exchanged.
+        // If min is greater than max, then min and max will be exchanged.
         chart.leftAxis.axisMaximum = 10
         chart.leftAxis.axisMinimum = -200
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testHidesValues()
-    {
+    func testHidesValues() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         dataSet.drawValuesEnabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testNotDrawValueAboveBars()
-    {
+    func testNotDrawValueAboveBars() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.drawValueAboveBarEnabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testStackedDrawValues()
-    {
+    func testStackedDrawValues() {
         let dataEntries = setupStackedValuesDataEntries()
         let dataSet = setupDefaultStackedDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testStackedNotDrawValues()
-    {
+    func testStackedNotDrawValues() {
         let dataEntries = setupStackedValuesDataEntries()
         let dataSet = setupDefaultStackedDataSet(chartDataEntries: dataEntries)
         dataSet.drawValuesEnabled = false
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testStackedNotDrawValuesAboveBars()
-    {
+    func testStackedNotDrawValuesAboveBars() {
         let dataEntries = setupStackedValuesDataEntries()
         let dataSet = setupDefaultStackedDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.drawValueAboveBarEnabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
-    
-    func testHideLeftAxis()
-    {
+
+    func testHideLeftAxis() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.enabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
-    
-    func testHideRightAxis()
-    {
+
+    func testHideRightAxis() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.rightAxis.enabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testInvertedLeftAxis()
-    {
+    func testInvertedLeftAxis() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.inverted = true
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testInvertedLeftAxisWithNegativeValues()
-    {
+    func testInvertedLeftAxisWithNegativeValues() {
         let dataEntries = setupNegativeValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.inverted = true
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testInvertedLeftAxisWithPositiveValues()
-    {
+    func testInvertedLeftAxisWithPositiveValues() {
         let dataEntries = setupPositiveValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.inverted = true
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testInvertedRightAxis()
-    {
+    func testInvertedRightAxis() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         dataSet.axisDependency = .right
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.rightAxis.inverted = true
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testInvertedRightAxisWithNegativeValues()
-    {
+    func testInvertedRightAxisWithNegativeValues() {
         let dataEntries = setupNegativeValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         dataSet.axisDependency = .right
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.rightAxis.inverted = true
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testInvertedRightAxisWithPositiveValues()
-    {
+    func testInvertedRightAxisWithPositiveValues() {
         let dataEntries = setupPositiveValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         dataSet.axisDependency = .right
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.rightAxis.inverted = true
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
-    
-    func testHideHorizontalGridlines()
-    {
+
+    func testHideHorizontalGridlines() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.leftAxis.drawGridLinesEnabled = false
         chart.rightAxis.drawGridLinesEnabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
-    
-    func testHideVerticalGridlines()
-    {
+
+    func testHideVerticalGridlines() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.xAxis.drawGridLinesEnabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
-    
-    func testDrawIcons()
-    {
+
+    func testDrawIcons() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         dataSet.drawIconsEnabled = true
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 }

+ 12 - 14
Tests/Charts/ChartDataTests.swift → Tests/ChartsTests/ChartDataTests.swift

@@ -5,11 +5,10 @@
 //  Created by Peter Kaminski on 1/23/20.
 //
 
-import XCTest
 @testable import Charts
+import XCTest
 
 class ChartDataTests: XCTestCase {
-    
     var data: ScatterChartData!
 
     private enum SetLabels {
@@ -18,52 +17,51 @@ class ChartDataTests: XCTestCase {
         static let three = "label3"
         static let badLabel = "Bad label"
     }
-    
+
     override func setUp() {
         super.setUp()
-        
+
         let setCount = 5
         let range: UInt32 = 32
-        let values1 = (0..<setCount).map { (i) -> ChartDataEntry in
+        let values1 = (0 ..< setCount).map { (i) -> ChartDataEntry in
             let val = Double(arc4random_uniform(range) + 3)
             return ChartDataEntry(x: Double(i), y: val)
         }
-        let values2 = (0..<setCount).map { (i) -> ChartDataEntry in
+        let values2 = (0 ..< setCount).map { (i) -> ChartDataEntry in
             let val = Double(arc4random_uniform(range) + 3)
             return ChartDataEntry(x: Double(i), y: val)
         }
-        let values3 = (0..<setCount).map { (i) -> ChartDataEntry in
+        let values3 = (0 ..< setCount).map { (i) -> ChartDataEntry in
             let val = Double(arc4random_uniform(range) + 3)
             return ChartDataEntry(x: Double(i), y: val)
         }
-        
+
         let set1 = ScatterChartDataSet(entries: values1, label: SetLabels.one)
         let set2 = ScatterChartDataSet(entries: values2, label: SetLabels.two)
         let set3 = ScatterChartDataSet(entries: values3, label: SetLabels.three)
-        
+
         data = ScatterChartData(dataSets: [set1, set2, set3])
     }
-    
+
     func testGetDataSetByLabelCaseSensitive() {
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.one, ignorecase: false)?.label == SetLabels.one)
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.two, ignorecase: false)?.label == SetLabels.two)
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.three, ignorecase: false)?.label == SetLabels.three)
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.one.uppercased(), ignorecase: false) == nil)
     }
-    
+
     func testGetDataSetByLabelIgnoreCase() {
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.one, ignorecase: true)?.label == SetLabels.one)
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.two, ignorecase: true)?.label == SetLabels.two)
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.three, ignorecase: true)?.label == SetLabels.three)
-        
+
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.one.uppercased(), ignorecase: true)?.label == SetLabels.one)
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.two.uppercased(), ignorecase: true)?.label == SetLabels.two)
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.three.uppercased(), ignorecase: true)?.label == SetLabels.three)
     }
-    
+
     func testGetDataSetByLabelNilWithBadLabel() {
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.badLabel, ignorecase: true) == nil)
         XCTAssertTrue(data.dataSet(forLabel: SetLabels.badLabel, ignorecase: false) == nil)
     }
 }
-

+ 20 - 27
Tests/Charts/ChartUtilsTests.swift → Tests/ChartsTests/ChartUtilsTests.swift

@@ -1,75 +1,68 @@
-import XCTest
 @testable import Charts
+import XCTest
 
 class ChartUtilsTests: XCTestCase {
-    
     override func setUp() {
         super.setUp()
         // Put setup code here. This method is called before the invocation of each test method in the class.
     }
-    
+
     override func tearDown() {
         // Put teardown code here. This method is called after the invocation of each test method in the class.
         super.tearDown()
     }
-    
+
     func testDecimalWithNaN() {
-        
         let number = Double.nan
-        
+
         let actual = number.decimalPlaces
         let expected = 0
-        
+
         XCTAssertEqual(expected, actual)
     }
-    
+
     func testDecimalWithInfinite() {
-        
         let number = Double.infinity
-        
+
         let actual = number.decimalPlaces
         let expected = 0
-        
+
         XCTAssertEqual(expected, actual)
     }
-    
+
     func testDecimalWithZero() {
-        
         let number = 0.0
-        
+
         let actual = number.decimalPlaces
         let expected = 0
-        
+
         XCTAssertEqual(expected, actual)
     }
-    
+
     func testDecimalWithMaxValue() {
-        
         let number = Double.greatestFiniteMagnitude
-        
+
         let actual = number.decimalPlaces
         let expected = 0
-        
+
         XCTAssertEqual(expected, actual)
     }
-    
+
     func testDecimalWithMinValue() {
-        
         let number = Double.leastNormalMagnitude
-        
+
         let actual = number.decimalPlaces
         let expected = 310 // Don't think this is supposed to be this value maybe 0?
-        
+
         XCTAssertEqual(expected, actual)
     }
-    
+
     func testDecimalWithNormalValue() {
-        
         let number = 13.123123
-        
+
         let actual = number.decimalPlaces
         let expected = 1 // Don't think this is supposed to be this value maybe 6?
-        
+
         XCTAssertEqual(expected, actual)
     }
 }

+ 18 - 29
Tests/Charts/CombinedChartTests.swift → Tests/ChartsTests/CombinedChartTests.swift

@@ -5,22 +5,20 @@
 //  Created by Xuan Liu on 14/10/2017.
 //
 
-import XCTest
-import FBSnapshotTestCase
 @testable import Charts
+import SnapshotTesting
+import XCTest
 
-class CombinedChartTests: FBSnapshotTestCase
-{
+class CombinedChartTests: XCTestCase {
     var chart: CombinedChartView!
     var lineDataSet: LineChartDataSet!
     var barDataSet: BarChartDataSet!
 
-    override func setUp()
-    {
+    override func setUp() {
         super.setUp()
 
         // Set to `true` to re-capture all snapshots
-        self.recordMode = false
+        isRecording = false
 
         // Sample data
         let combinedData = CombinedChartData()
@@ -33,17 +31,15 @@ class CombinedChartTests: FBSnapshotTestCase
         chart.data = combinedData
     }
 
-    func generateBarData() -> BarChartData
-    {
+    func generateBarData() -> BarChartData {
         let values: [Double] = [8, 104, 81, 93, 52, 44, 97, 101, 75, 28,
                                 76, 25, 20, 13, 52, 44, 57, 23, 45, 91,
                                 99, 14, 84, 48, 40, 71, 106, 41, 45, 61]
 
         var entries: [ChartDataEntry] = Array()
 
-        for (i, value) in values.enumerated()
-        {
-            entries.append(BarChartDataEntry(x: Double(i), y: value, icon: UIImage(named: "icon", in: Bundle(for: self.classForCoder), compatibleWith: nil)))
+        for (i, value) in values.enumerated() {
+            entries.append(BarChartDataEntry(x: Double(i), y: value, icon: UIImage(named: "icon", in: Bundle(for: classForCoder), compatibleWith: nil)))
         }
 
         barDataSet = BarChartDataSet(entries: entries, label: "Bar chart unit test data")
@@ -54,17 +50,15 @@ class CombinedChartTests: FBSnapshotTestCase
         return data
     }
 
-    func generateLineData() -> LineChartData
-    {
+    func generateLineData() -> LineChartData {
         let values: [Double] = [0, 254, 81, 93, 52, 44, 97, 101, 75, 28,
                                 76, 25, 20, 13, 52, 44, 57, 23, 45, 91,
                                 99, 14, 84, 48, 40, 71, 106, 41, 45, 61]
 
         var entries: [ChartDataEntry] = Array()
 
-        for (i, value) in values.enumerated()
-        {
-            entries.append(ChartDataEntry(x: Double(i), y: value, icon: UIImage(named: "icon", in: Bundle(for: self.classForCoder), compatibleWith: nil)))
+        for (i, value) in values.enumerated() {
+            entries.append(ChartDataEntry(x: Double(i), y: value, icon: UIImage(named: "icon", in: Bundle(for: classForCoder), compatibleWith: nil)))
         }
 
         lineDataSet = LineChartDataSet(entries: entries, label: "Line chart unit test data")
@@ -72,33 +66,28 @@ class CombinedChartTests: FBSnapshotTestCase
         return LineChartData(dataSet: lineDataSet)
     }
 
-    override func tearDown()
-    {
+    override func tearDown() {
         // Put teardown code here. This method is called after the invocation of each test method in the class.
         super.tearDown()
     }
 
-    func testDefaultAxisDependency()
-    {
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+    func testDefaultAxisDependency() {
+        assertChartSnapshot(matching: chart)
     }
 
-    func testLeftRightAxisDependency()
-    {
+    func testLeftRightAxisDependency() {
         lineDataSet.axisDependency = .left
         barDataSet.axisDependency = .right
         chart.data?.notifyDataChanged()
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testAllRightAxisDependency()
-    {
+    func testAllRightAxisDependency() {
         lineDataSet.axisDependency = .right
         barDataSet.axisDependency = .right
         chart.data?.notifyDataChanged()
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 }
-

+ 1 - 2
Tests/Charts/EquatableTests.swift → Tests/ChartsTests/EquatableTests.swift

@@ -5,8 +5,8 @@
 //  Created by Jacob Christie on 2017-11-13.
 //
 
-import XCTest
 @testable import Charts
+import XCTest
 
 class EquatableTests: XCTestCase {
     func testChartDataEntryEquality() {
@@ -42,4 +42,3 @@ class EquatableTests: XCTestCase {
         XCTAssertFalse(high1 == high2)
     }
 }
-

+ 34 - 50
Tests/Charts/HorizontalBarChartTests.swift → Tests/ChartsTests/HorizontalBarChartTests.swift

@@ -5,39 +5,33 @@
 //  Created by Xuan Liu on 2019/3/20.
 //
 
-import XCTest
-import FBSnapshotTestCase
 @testable import Charts
+import SnapshotTesting
+import XCTest
 
-class HorizontalBarChartTests: FBSnapshotTestCase
-{
-
-    override func setUp()
-    {
+class HorizontalBarChartTests: XCTestCase {
+    override func setUp() {
         super.setUp()
         // Set to `true` to re-capture all snapshots
-        self.recordMode = false
+        isRecording = false
     }
 
-    override func tearDown()
-    {
+    override func tearDown() {
         // Put teardown code here. This method is called after the invocation of each test method in the class.
         super.tearDown()
     }
 
-    //MARK: Prepare
-    func setupCustomValuesDataEntries(values: [Double]) -> [ChartDataEntry]
-    {
+    // MARK: Prepare
+
+    func setupCustomValuesDataEntries(values: [Double]) -> [ChartDataEntry] {
         var entries: [ChartDataEntry] = Array()
-        for (i, value) in values.enumerated()
-        {
-            entries.append(BarChartDataEntry(x: Double(i), y: value, icon: UIImage(named: "icon", in: Bundle(for: self.classForCoder), compatibleWith: nil)))
+        for (i, value) in values.enumerated() {
+            entries.append(BarChartDataEntry(x: Double(i), y: value, icon: UIImage(named: "icon", in: Bundle(for: classForCoder), compatibleWith: nil)))
         }
         return entries
     }
 
-    func setupStackedvaluesDataEntries() -> [ChartDataEntry]
-    {
+    func setupStackedvaluesDataEntries() -> [ChartDataEntry] {
         var entries: [ChartDataEntry] = Array()
         entries.append(BarChartDataEntry(x: 0, yValues: [28, 50, 60, 30, 42], icon: UIImage(named: "icon")))
         entries.append(BarChartDataEntry(x: 1, yValues: [-20, -36, -52, -40, -15], icon: UIImage(named: "icon")))
@@ -47,37 +41,32 @@ class HorizontalBarChartTests: FBSnapshotTestCase
         return entries
     }
 
-    func setupDefaultValuesDataEntries() -> [ChartDataEntry]
-    {
+    func setupDefaultValuesDataEntries() -> [ChartDataEntry] {
         let values: [Double] = [8, 104, -81, 93, 52, -44, 97, 101, -75, 28,
                                 -76, 25, 20, -13, 52, 44, -57, 23, 45, -91,
                                 99, 14, -84, 48, 40, -71, 106, 41, -45, 61]
         return setupCustomValuesDataEntries(values: values)
     }
 
-    func setupDefaultDataSet(chartDataEntries: [ChartDataEntry]) -> BarChartDataSet
-    {
+    func setupDefaultDataSet(chartDataEntries: [ChartDataEntry]) -> BarChartDataSet {
         let dataSet = BarChartDataSet(entries: chartDataEntries, label: "Bar chart unit test data")
         dataSet.drawIconsEnabled = false
         dataSet.iconsOffset = CGPoint(x: 0, y: -10.0)
         return dataSet
     }
 
-    func setupDefaultStackedDataSet(chartDataEntries: [ChartDataEntry]) -> BarChartDataSet
-    {
+    func setupDefaultStackedDataSet(chartDataEntries: [ChartDataEntry]) -> BarChartDataSet {
         let dataSet = BarChartDataSet(entries: chartDataEntries, label: "Stacked bar chart unit test data")
         dataSet.drawIconsEnabled = false
         dataSet.iconsOffset = CGPoint(x: 0, y: -10.0)
-        dataSet.colors = Array(arrayLiteral:NSUIColor(red: 46/255.0, green: 204/255.0, blue: 113/255.0, alpha: 1.0),
-                               NSUIColor(red: 241/255.0, green: 196/255.0, blue: 15/255.0, alpha: 1.0),
-                               NSUIColor(red: 231/255.0, green: 76/255.0, blue: 60/255.0, alpha: 1.0),
-                               NSUIColor(red: 52/255.0, green: 152/255.0, blue: 219/255.0, alpha: 1.0)
-        )
+        dataSet.colors = Array(arrayLiteral: NSUIColor(red: 46 / 255.0, green: 204 / 255.0, blue: 113 / 255.0, alpha: 1.0),
+                               NSUIColor(red: 241 / 255.0, green: 196 / 255.0, blue: 15 / 255.0, alpha: 1.0),
+                               NSUIColor(red: 231 / 255.0, green: 76 / 255.0, blue: 60 / 255.0, alpha: 1.0),
+                               NSUIColor(red: 52 / 255.0, green: 152 / 255.0, blue: 219 / 255.0, alpha: 1.0))
         return dataSet
     }
 
-    func setupDefaultChart(dataSets: [BarChartDataSet]) -> BarChartView
-    {
+    func setupDefaultChart(dataSets: [BarChartDataSet]) -> BarChartView {
         let data = BarChartData(dataSets: dataSets)
         data.barWidth = 0.85
 
@@ -87,61 +76,56 @@ class HorizontalBarChartTests: FBSnapshotTestCase
         return chart
     }
 
-    //MARK: Start Test
-    func testDefaultValues()
-    {
+    // MARK: Start Test
+
+    func testDefaultValues() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testHidesValues()
-    {
+    func testHidesValues() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         dataSet.drawValuesEnabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testNotDrawValueAboveBars()
-    {
+    func testNotDrawValueAboveBars() {
         let dataEntries = setupDefaultValuesDataEntries()
         let dataSet = setupDefaultDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.drawValueAboveBarEnabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testStackedDrawValues()
-    {
+    func testStackedDrawValues() {
         let dataEntries = setupStackedvaluesDataEntries()
         let dataSet = setupDefaultStackedDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testStackedNotDrawValues()
-    {
+    func testStackedNotDrawValues() {
         let dataEntries = setupStackedvaluesDataEntries()
         let dataSet = setupDefaultStackedDataSet(chartDataEntries: dataEntries)
         dataSet.drawValuesEnabled = false
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testStackedNotDrawValuesAboveBars()
-    {
+    func testStackedNotDrawValuesAboveBars() {
         let dataEntries = setupStackedvaluesDataEntries()
         let dataSet = setupDefaultStackedDataSet(chartDataEntries: dataEntries)
         let chart = setupDefaultChart(dataSets: [dataSet])
         chart.drawValueAboveBarEnabled = false
         chart.notifyDataSetChanged()
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 }

+ 72 - 0
Tests/ChartsTests/LineChartTests.swift

@@ -0,0 +1,72 @@
+@testable import Charts
+import SnapshotTesting
+import XCTest
+
+class LineChartTests: XCTestCase {
+    private lazy var icon = UIImage(named: "icon", in: Bundle(for: classForCoder), compatibleWith: nil)!
+
+    var chart: LineChartView!
+    var dataSet: LineChartDataSet!
+
+    override func setUp() {
+        super.setUp()
+
+        // Set to `true` to re-capture all snapshots
+        isRecording = false
+
+        // Sample data
+        let values: [Double] = [8, 104, 81, 93, 52, 44, 97, 101, 75, 28,
+                                76, 25, 20, 13, 52, 44, 57, 23, 45, 91,
+                                99, 14, 84, 48, 40, 71, 106, 41, 45, 61]
+
+        var entries: [ChartDataEntry] = Array()
+
+        for (i, value) in values.enumerated() {
+            entries.append(ChartDataEntry(x: Double(i), y: value, icon: icon))
+        }
+
+        dataSet = LineChartDataSet(entries: entries, label: "First unit test data")
+        dataSet.drawIconsEnabled = false
+        dataSet.iconsOffset = CGPoint(x: 0, y: 20.0)
+
+        chart = LineChartView(frame: CGRect(x: 0, y: 0, width: 480, height: 350))
+        chart.backgroundColor = NSUIColor.clear
+        chart.leftAxis.axisMinimum = 0.0
+        chart.rightAxis.axisMinimum = 0.0
+        chart.data = LineChartData(dataSet: dataSet)
+    }
+
+    override func tearDown() {
+        // Put teardown code here. This method is called after the invocation of each test method in the class.
+        super.tearDown()
+    }
+
+    func testDefaultValues() {
+        assertChartSnapshot(matching: chart)
+    }
+
+    func testHidesValues() {
+        dataSet.drawValuesEnabled = false
+        assertChartSnapshot(matching: chart)
+    }
+
+    func testDoesntDrawCircles() {
+        dataSet.drawCirclesEnabled = false
+        assertChartSnapshot(matching: chart)
+    }
+
+    func testIsCubic() {
+        dataSet.mode = LineChartDataSet.Mode.cubicBezier
+        assertChartSnapshot(matching: chart)
+    }
+
+    func testDoesntDrawCircleHole() {
+        dataSet.drawCircleHoleEnabled = false
+        assertChartSnapshot(matching: chart)
+    }
+
+    func testDrawIcons() {
+        dataSet.drawIconsEnabled = true
+        assertChartSnapshot(matching: chart)
+    }
+}

+ 36 - 44
Tests/Charts/PieChartTests.swift → Tests/ChartsTests/PieChartTests.swift

@@ -1,87 +1,79 @@
-import XCTest
-import FBSnapshotTestCase
 @testable import Charts
+import SnapshotTesting
+import XCTest
+
+class PieChartTests: XCTestCase {
+    private lazy var icon = UIImage(named: "icon", in: Bundle(for: classForCoder), compatibleWith: nil)!
 
-class PieChartTests: FBSnapshotTestCase
-{
-    
     var chart: PieChartView!
     var dataSet: PieChartDataSet!
-    
-    override func setUp()
-    {
+
+    override func setUp() {
         super.setUp()
-        
+
         // Set to `true` to re-capture all snapshots
-        self.recordMode = false
-        
+        isRecording = false
+
         // Sample data
         let values: [Double] = [11, 33, 81, 52, 97, 101, 75]
-        
+
         var entries: [PieChartDataEntry] = Array()
-        
-        for value in values
-        {
-            entries.append(PieChartDataEntry(value: value, icon: UIImage(named: "icon", in: Bundle(for: self.classForCoder), compatibleWith: nil)))
+
+        for value in values {
+            entries.append(PieChartDataEntry(value: value, icon: icon))
         }
-        
+
         dataSet = PieChartDataSet(entries: entries, label: "First unit test data")
         dataSet.drawIconsEnabled = false
         dataSet.iconsOffset = CGPoint(x: 0, y: 20.0)
-        
+
         dataSet.colors = ChartColorTemplates.vordiplom()
             + ChartColorTemplates.joyful()
             + ChartColorTemplates.colorful()
             + ChartColorTemplates.liberty()
             + ChartColorTemplates.pastel()
-            + [UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1)]
+            + [UIColor(red: 51 / 255, green: 181 / 255, blue: 229 / 255, alpha: 1)]
+
         
         chart = PieChartView(frame: CGRect(x: 0, y: 0, width: 480, height: 350))
         chart.backgroundColor = NSUIColor.clear
         chart.centerText = "PieChart Unit Test"
         chart.data = PieChartData(dataSet: dataSet)
     }
-    
-    override func tearDown()
-    {
+
+    override func tearDown() {
         // Put teardown code here. This method is called after the invocation of each test method in the class.
         super.tearDown()
     }
-    
-    func testDefaultValues()
-    {
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+
+    func testDefaultValues() {
+        assertChartSnapshot(matching: chart)
     }
-    
-    func testHidesValues()
-    {
+
+    func testHidesValues() {
         dataSet.drawValuesEnabled = false
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
-    
-    func testDrawIcons()
-    {
+
+    func testDrawIcons() {
         dataSet.drawIconsEnabled = true
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
-    
-    func testHideCenterLabel()
-    {
+
+    func testHideCenterLabel() {
         chart.drawCenterTextEnabled = false
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testHighlightDisabled()
-    {
+    func testHighlightDisabled() {
         chart.data?.dataSets[0].highlightEnabled = false
         chart.highlightValue(x: 1.0, dataSetIndex: 0, callDelegate: false)
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 
-    func testHighlightEnabled()
-    {
+    func testHighlightEnabled() {
         // by default, it's enabled
         chart.highlightValue(x: 1.0, dataSetIndex: 0, callDelegate: false)
-        ChartsSnapshotVerifyView(chart, identifier: Snapshot.identifier(UIScreen.main.bounds.size), overallTolerance: Snapshot.tolerance)
+        assertChartSnapshot(matching: chart)
     }
 }

+ 0 - 0
Tests/Supporting Files/Info.plist → Tests/ChartsTests/Resources/Info.plist


+ 6 - 0
Tests/ChartsTests/Resources/Media.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 0 - 0
Tests/Supporting Files/Media.xcassets/icon.imageset/Contents.json → Tests/ChartsTests/Resources/Media.xcassets/icon.imageset/Contents.json


+ 0 - 0
Tests/Supporting Files/Media.xcassets/icon.imageset/star-1.png → Tests/ChartsTests/Resources/Media.xcassets/icon.imageset/star-1.png


+ 0 - 0
Tests/Supporting Files/Media.xcassets/icon.imageset/star-2.png → Tests/ChartsTests/Resources/Media.xcassets/icon.imageset/star-2.png


+ 0 - 0
Tests/Supporting Files/Media.xcassets/icon.imageset/star.png → Tests/ChartsTests/Resources/Media.xcassets/icon.imageset/star.png


+ 56 - 0
Tests/ChartsTests/Utilities.swift

@@ -0,0 +1,56 @@
+import Charts
+import SnapshotTesting
+import UIKit
+import XCTest
+
+private enum Snapshot {
+    static func identifier(_ size: CGSize) -> String {
+        #if os(tvOS)
+            let identifier = "tvOS"
+        #elseif os(iOS)
+            let identifier = "iOS"
+        #elseif os(OSX)
+            let identifier = "macOS"
+        #else
+            let identifier = ""
+        #endif
+
+        return "\(identifier)_\(size.width)_\(size.height)"
+    }
+}
+
+func assertChartSnapshot<Value: ChartViewBase>(
+    matching value: @autoclosure () throws -> Value,
+    record recording: Bool = false,
+    timeout: TimeInterval = 5,
+    file: StaticString = #file,
+    testName: String = #function,
+    line: UInt = #line
+) {
+    let fileUrl = URL(fileURLWithPath: "\(file)", isDirectory: false)
+    let fileName = fileUrl.deletingPathExtension().lastPathComponent
+
+    #if arch(arm64)
+    let snapshotDirectory = fileUrl.deletingLastPathComponent()
+        .appendingPathComponent("__Snapshots__Silicon__")
+        .appendingPathComponent(fileName)
+        .path
+    #else
+    let snapshotDirectory = fileUrl.deletingLastPathComponent()
+        .appendingPathComponent("__Snapshots__x86__")
+        .appendingPathComponent(fileName)
+        .path
+    #endif
+
+    let failure = verifySnapshot(
+        matching: try value(),
+        as: .image,
+        record: recording,
+        snapshotDirectory: snapshotDirectory,
+        timeout: timeout,
+        file: file,
+        testName: testName + Snapshot.identifier(UIScreen.main.bounds.size)
+    )
+    guard let message = failure else { return }
+    XCTFail(message, file: file, line: line)
+}

BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDefaultBarDataSetLabels-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultBarDataSetLabels_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDefaultBarDataSetLabels-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDefaultValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDefaultValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDrawIcons-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testDrawIcons-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideHorizontalGridlines-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideHorizontalGridlines-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideLeftAxis-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideLeftAxis-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideRightAxis-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideRightAxis-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideVerticalGridlines-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHideVerticalGridlines-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHidesValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testHidesValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxis-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxis-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxisWithNegativeValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithNegativeValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxisWithNegativeValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxisWithPositiveValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithPositiveValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedLeftAxisWithPositiveValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxis-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxis-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxisWithNegativeValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithNegativeValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxisWithNegativeValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxisWithPositiveValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithPositiveValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testInvertedRightAxisWithPositiveValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximum-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximum-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximum2-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum2_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximum2-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMinimum-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMinimum-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMinimum2-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum2_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNegativeValuesWithCustomAxisMinimum2-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNotDrawValueAboveBars-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNotDrawValueAboveBars_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testNotDrawValueAboveBars-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximum-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximum-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximum2-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum2_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximum2-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMinimum-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMinimum-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMinimum2-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum2_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testPositiveValuesWithCustomAxisMinimum2-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedDrawValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedDrawValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedDrawValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedNotDrawValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedNotDrawValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedNotDrawValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedNotDrawValuesAboveBars-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedNotDrawValuesAboveBars_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testStackedNotDrawValuesAboveBars-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testZeroValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/BarChartTests/testZeroValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testAllRightAxisDependency-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testAllRightAxisDependency_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testAllRightAxisDependency-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testDefaultAxisDependency-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testDefaultAxisDependency_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testDefaultAxisDependency-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testLeftRightAxisDependency-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testLeftRightAxisDependency_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/CombinedChartTests/testLeftRightAxisDependency-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testDefaultValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testDefaultValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testDefaultValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testHidesValues-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testHidesValues_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testHidesValues-tvOS_1920-0_1080-0.1.png


BIN
Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testNotDrawValueAboveBars-iOS_390-0_844-0.1.png


+ 0 - 0
Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testNotDrawValueAboveBars_iOS_375_0_667_0@2x.png → Tests/ChartsTests/__Snapshots__x86__/HorizontalBarChartTests/testNotDrawValueAboveBars-tvOS_1920-0_1080-0.1.png


Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff