| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- //
- // QuantityFormatterTests.swift
- // LoopKitTests
- //
- // Copyright © 2018 LoopKit Authors. All rights reserved.
- //
- import XCTest
- import HealthKit
- @testable import LoopKit
- class QuantityFormatterTests: XCTestCase {
- var formatter: QuantityFormatter!
- func setFormatter(for unit: HKUnit) {
- formatter = QuantityFormatter(for: unit)
- formatter.locale = Locale(identifier: "en_US")
- formatter.unitStyle = .medium
- formatter.avoidLineBreaking = false
- }
- func testInsulin() {
- let unit = HKUnit.internationalUnit()
- setFormatter(for: unit)
- XCTAssertEqual("U", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10 U", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- formatter.unitStyle = .short
- XCTAssertEqual("U", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10U", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- formatter.unitStyle = .long
- XCTAssertEqual("Units", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10 Units", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- }
- func testInsulinRates() {
- let unit = HKUnit.internationalUnit().unitDivided(by: .hour())
- setFormatter(for: unit)
- XCTAssertEqual("U/hr", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10 U/hr", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- formatter.unitStyle = .short
- XCTAssertEqual("U/hr", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10U/hr", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- formatter.unitStyle = .long
- XCTAssertEqual("Units/hour", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10 Units/hour", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- XCTAssertEqual("1 Unit/hour", formatter.string(from: HKQuantity(unit: unit, doubleValue: 1))!)
- }
- func testCarbs() {
- let unit = HKUnit.gram()
- setFormatter(for: unit)
- XCTAssertEqual("g", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10 g", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- formatter.unitStyle = .short
- XCTAssertEqual("g", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10g", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- formatter.unitStyle = .long
- XCTAssertEqual("grams", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10 grams", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- XCTAssertEqual("0 grams", formatter.string(from: HKQuantity(unit: unit, doubleValue: 0))!)
- XCTAssertEqual("1 gram", formatter.string(from: HKQuantity(unit: unit, doubleValue: 1))!)
- formatter.numberFormatter.formattingContext = .standalone
- XCTAssertEqual("10 grams", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10))!)
- }
- func testGlucoseMGDL() {
- let unit = HKUnit.milligramsPerDeciliter
- setFormatter(for: unit)
- XCTAssertEqual("mg/dL", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("60 mg/dL", formatter.string(from: HKQuantity(unit: unit, doubleValue: 60))!)
- XCTAssertEqual("180 mg/dL", formatter.string(from: HKQuantity(unit: unit, doubleValue: 180))!)
- formatter.unitStyle = .short
- XCTAssertEqual("mg/dL", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("60mg/dL", formatter.string(from: HKQuantity(unit: unit, doubleValue: 60))!)
- XCTAssertEqual("180mg/dL", formatter.string(from: HKQuantity(unit: unit, doubleValue: 180))!)
- formatter.unitStyle = .long
- XCTAssertEqual("milligrams per deciliter", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("180 milligrams per deciliter", formatter.string(from: HKQuantity(unit: unit, doubleValue: 180))!)
- XCTAssertEqual("0 milligrams per deciliter", formatter.string(from: HKQuantity(unit: unit, doubleValue: 0))!)
- XCTAssertEqual("1 milligrams per deciliter", formatter.string(from: HKQuantity(unit: unit, doubleValue: 1))!)
- }
- func testGlucoseMMOLL() {
- let unit = HKUnit.millimolesPerLiter
- setFormatter(for: unit)
- XCTAssertEqual("mmol/L", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("6.0 mmol/L", formatter.string(from: HKQuantity(unit: unit, doubleValue: 6))!)
- XCTAssertEqual("7.8 mmol/L", formatter.string(from: HKQuantity(unit: unit, doubleValue: 7.84))!)
- XCTAssertEqual("12.0 mmol/L", formatter.string(from: HKQuantity(unit: unit, doubleValue: 12))!)
- formatter.unitStyle = .short
- XCTAssertEqual("mmol/L", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("6.0mmol/L", formatter.string(from: HKQuantity(unit: unit, doubleValue: 6))!)
- XCTAssertEqual("7.8mmol/L", formatter.string(from: HKQuantity(unit: unit, doubleValue: 7.8))!)
- formatter.unitStyle = .long
- XCTAssertEqual("millimoles per liter", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("5.5 millimoles per liter", formatter.string(from: HKQuantity(unit: unit, doubleValue: 5.5))!)
- XCTAssertEqual("0.0 millimoles per liter", formatter.string(from: HKQuantity(unit: unit, doubleValue: 0))!)
- XCTAssertEqual("1.0 millimoles per liter", formatter.string(from: HKQuantity(unit: unit, doubleValue: 1))!)
- }
- func testGlucoseRates() {
- var unit = HKUnit.millimolesPerLiterPerMinute
- setFormatter(for: unit)
- XCTAssertEqual("mmol/L/min", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("0.5 mmol/L/min", formatter.string(from: HKQuantity(unit: unit, doubleValue: 0.5))!)
- XCTAssertEqual("0.8 mmol/L/min", formatter.string(from: HKQuantity(unit: unit, doubleValue: 0.8))!)
- XCTAssertEqual("1.5 mmol/L/min", formatter.string(from: HKQuantity(unit: unit, doubleValue: 1.5))!)
- unit = HKUnit.milligramsPerDeciliterPerMinute
- setFormatter(for: unit)
- XCTAssertEqual("mg/dL/min", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("1.0 mg/dL/min", formatter.string(from: HKQuantity(unit: unit, doubleValue: 1.0))!)
- XCTAssertEqual("5.2 mg/dL/min", formatter.string(from: HKQuantity(unit: unit, doubleValue: 5.2))!)
- XCTAssertEqual("10.1 mg/dL/min", formatter.string(from: HKQuantity(unit: unit, doubleValue: 10.1))!)
- }
- func testAvoidLineBreaking() {
- setFormatter(for: .internationalUnit())
- formatter.avoidLineBreaking = true
- XCTAssertEqual("U", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10\(String.nonBreakingSpace)U", formatter.string(from: HKQuantity(unit: HKUnit.internationalUnit(), doubleValue: 10))!)
- formatter.unitStyle = .short
- XCTAssertEqual("10\(String.wordJoiner)U", formatter.string(from: HKQuantity(unit: HKUnit.internationalUnit(), doubleValue: 10))!)
- formatter.unitStyle = .long
- XCTAssertEqual("Units", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("10 Units", formatter.string(from: HKQuantity(unit: HKUnit.internationalUnit(), doubleValue: 10))!)
-
- formatter.unitStyle = .medium
- setFormatter(for: HKUnit.milligramsPerDeciliter)
- formatter.avoidLineBreaking = true
- XCTAssertEqual("mg\(String.wordJoiner)/\(String.wordJoiner)dL", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("60\(String.nonBreakingSpace)mg\(String.wordJoiner)/\(String.wordJoiner)dL", formatter.string(from: HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 60))!)
- XCTAssertEqual("180\(String.nonBreakingSpace)mg\(String.wordJoiner)/\(String.wordJoiner)dL", formatter.string(from: HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 180))!)
- formatter.unitStyle = .short
- XCTAssertEqual("mg\(String.wordJoiner)/\(String.wordJoiner)dL", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("60\(String.wordJoiner)mg\(String.wordJoiner)/\(String.wordJoiner)dL", formatter.string(from: HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 60))!)
- XCTAssertEqual("180\(String.wordJoiner)mg\(String.wordJoiner)/\(String.wordJoiner)dL", formatter.string(from: HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 180))!)
- formatter.unitStyle = .long
- XCTAssertEqual("milligrams per deciliter", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("180 milligrams per deciliter", formatter.string(from: HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 180))!)
- XCTAssertEqual("0 milligrams per deciliter", formatter.string(from: HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 0))!)
- XCTAssertEqual("1 milligrams per deciliter", formatter.string(from: HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 1))!)
-
- formatter.unitStyle = .medium
- setFormatter(for: HKUnit.millimolesPerLiter)
- formatter.avoidLineBreaking = true
- XCTAssertEqual("mmol\(String.wordJoiner)/\(String.wordJoiner)L", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("6.0\(String.nonBreakingSpace)mmol\(String.wordJoiner)/\(String.wordJoiner)L", formatter.string(from: HKQuantity(unit: HKUnit.millimolesPerLiter, doubleValue: 6))!)
- XCTAssertEqual("7.8\(String.nonBreakingSpace)mmol\(String.wordJoiner)/\(String.wordJoiner)L", formatter.string(from: HKQuantity(unit: HKUnit.millimolesPerLiter, doubleValue: 7.84))!)
- XCTAssertEqual("12.0\(String.nonBreakingSpace)mmol\(String.wordJoiner)/\(String.wordJoiner)L", formatter.string(from: HKQuantity(unit: HKUnit.millimolesPerLiter, doubleValue: 12))!)
- formatter.unitStyle = .short
- XCTAssertEqual("mmol\(String.wordJoiner)/\(String.wordJoiner)L", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("6.0\(String.wordJoiner)mmol\(String.wordJoiner)/\(String.wordJoiner)L", formatter.string(from: HKQuantity(unit: HKUnit.millimolesPerLiter, doubleValue: 6))!)
- XCTAssertEqual("7.8\(String.wordJoiner)mmol\(String.wordJoiner)/\(String.wordJoiner)L", formatter.string(from: HKQuantity(unit: HKUnit.millimolesPerLiter, doubleValue: 7.8))!)
- formatter.unitStyle = .long
- XCTAssertEqual("millimoles per liter", formatter.localizedUnitStringWithPlurality())
- XCTAssertEqual("5.5 millimoles per liter", formatter.string(from: HKQuantity(unit: HKUnit.millimolesPerLiter, doubleValue: 5.5))!)
- XCTAssertEqual("0.0 millimoles per liter", formatter.string(from: HKQuantity(unit: HKUnit.millimolesPerLiter, doubleValue: 0))!)
- XCTAssertEqual("1.0 millimoles per liter", formatter.string(from: HKQuantity(unit: HKUnit.millimolesPerLiter, doubleValue: 1))!)
- }
- func testUnitRounding() {
- let value = 1.2345
- var unit: HKUnit = .milligramsPerDeciliter
- XCTAssertEqual(unit.roundForPreferredDigits(value: value), 1)
- unit = unit.unitDivided(by: .internationalUnit())
- XCTAssertEqual(unit.roundForPreferredDigits(value: value), 1)
- unit = unit.unitDivided(by: .minute())
- XCTAssertEqual(unit.roundForPreferredDigits(value: value), 1)
- unit = .millimolesPerLiter
- XCTAssertEqual(unit.roundForPreferredDigits(value: value), 1.2)
- unit = HKUnit.millimolesPerLiter.unitDivided(by: .internationalUnit())
- XCTAssertEqual(unit.roundForPreferredDigits(value: value), 1.2)
- unit = HKUnit.millimolesPerLiter.unitDivided(by: .minute())
- XCTAssertEqual(unit.roundForPreferredDigits(value: value), 1.2)
- }
- func testQuantityRounding() {
- let value = 1.2345
- var unit: HKUnit = .milligramsPerDeciliter
- XCTAssertEqual(HKQuantity(unit: unit, doubleValue: value).doubleValue(for: unit, withRounding: true), 1)
- unit = unit.unitDivided(by: .internationalUnit())
- XCTAssertEqual(HKQuantity(unit: unit, doubleValue: value).doubleValue(for: unit, withRounding: true), 1)
- unit = unit.unitDivided(by: .minute())
- XCTAssertEqual(HKQuantity(unit: unit, doubleValue: value).doubleValue(for: unit, withRounding: true), 1)
- unit = .millimolesPerLiter
- XCTAssertEqual(HKQuantity(unit: unit, doubleValue: value).doubleValue(for: unit, withRounding: true), 1.2)
- unit = HKUnit.millimolesPerLiter.unitDivided(by: .internationalUnit())
- XCTAssertEqual(HKQuantity(unit: unit, doubleValue: value).doubleValue(for: unit, withRounding: true), 1.2)
- unit = HKUnit.millimolesPerLiter.unitDivided(by: .minute())
- XCTAssertEqual(HKQuantity(unit: unit, doubleValue: value).doubleValue(for: unit, withRounding: true), 1.2)
- }
- }
|