| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| |
| #if DEPLOYMENT_RUNTIME_OBJC || os(Linux) |
| import Foundation |
| import XCTest |
| #else |
| import SwiftFoundation |
| import SwiftXCTest |
| #endif |
| |
| class TestLengthFormatter: XCTestCase { |
| let formatter: LengthFormatter = LengthFormatter() |
| |
| static var allTests: [(String, (TestLengthFormatter) -> () throws -> Void)] { |
| return [ |
| ("test_stringFromMetersUS", test_stringFromMetersUS), |
| ("test_stringFromMetersUSPersonHeight", test_stringFromMetersUSPersonHeight), |
| ("test_stringFromMetersMetric", test_stringFromMetersMetric), |
| ("test_stringFromMetersMetricPersonHeight", test_stringFromMetersMetricPersonHeight), |
| ("test_stringFromValue", test_stringFromValue), |
| ("test_unitStringFromMeters", test_unitStringFromMeters), |
| ("test_unitStringFromValue", test_unitStringFromValue) |
| ] |
| } |
| |
| override func setUp() { |
| formatter.numberFormatter.locale = Locale(identifier: "en_US") |
| formatter.isForPersonHeightUse = false |
| super.setUp() |
| } |
| |
| func test_stringFromMetersUS() { |
| XCTAssertEqual(formatter.string(fromMeters:-100000), "-62.137 mi") |
| XCTAssertEqual(formatter.string(fromMeters: -1), "-0.001 mi") |
| XCTAssertEqual(formatter.string(fromMeters: 0.00001), "0 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.0001), "0.004 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.001), "0.039 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.01), "0.394 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.1), "3.937 in") |
| XCTAssertEqual(formatter.string(fromMeters: 1), "1.094 yd") |
| XCTAssertEqual(formatter.string(fromMeters: 10), "10.936 yd") |
| XCTAssertEqual(formatter.string(fromMeters: 10000), "6.214 mi") |
| XCTAssertEqual(formatter.string(fromMeters: 1000000), "621.373 mi") |
| XCTAssertEqual(formatter.string(fromMeters: 10000000), "6,213.727 mi") |
| XCTAssertEqual(formatter.string(fromMeters: 100000000), "62,137.274 mi") |
| } |
| |
| func test_stringFromMetersUSPersonHeight() { |
| formatter.isForPersonHeightUse = true |
| XCTAssertEqual(formatter.string(fromMeters: -100000), "-328,083 ft, 11.874 in") |
| XCTAssertEqual(formatter.string(fromMeters: -1), "-3 ft, 3.37 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.00001), "0 ft, 0 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.0001), "0 ft, 0.004 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.001), "0 ft, 0.039 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.01), "0 ft, 0.394 in") |
| XCTAssertEqual(formatter.string(fromMeters: 0.1), "0 ft, 3.937 in") |
| XCTAssertEqual(formatter.string(fromMeters: 1), "3 ft, 3.37 in") |
| XCTAssertEqual(formatter.string(fromMeters: 10), "32 ft, 9.701 in") |
| XCTAssertEqual(formatter.string(fromMeters: 100000000), "328,083,989 ft, 6.016 in") |
| } |
| |
| func test_stringFromMetersMetric() { |
| formatter.numberFormatter.locale = Locale(identifier: "en_GB") |
| XCTAssertEqual(formatter.string(fromMeters: -10000), "-10 km") |
| XCTAssertEqual(formatter.string(fromMeters: -1), "-0.001 km") |
| XCTAssertEqual(formatter.string(fromMeters: 0.00001), "0.01 mm") |
| XCTAssertEqual(formatter.string(fromMeters: 0.0001), "0.1 mm") |
| XCTAssertEqual(formatter.string(fromMeters: 0.001), "1 mm") |
| XCTAssertEqual(formatter.string(fromMeters: 0.01), "10 mm") |
| XCTAssertEqual(formatter.string(fromMeters: 0.1), "10 cm") |
| XCTAssertEqual(formatter.string(fromMeters: 0.5), "50 cm") |
| XCTAssertEqual(formatter.string(fromMeters: 1), "100 cm") |
| XCTAssertEqual(formatter.string(fromMeters: 10), "10 m") |
| XCTAssertEqual(formatter.string(fromMeters: 10000), "10 km") |
| XCTAssertEqual(formatter.string(fromMeters: 1000000), "1,000 km") |
| XCTAssertEqual(formatter.string(fromMeters: 10000000), "10,000 km") |
| XCTAssertEqual(formatter.string(fromMeters: 100000000), "100,000 km") |
| } |
| |
| func test_stringFromMetersMetricPersonHeight() { |
| formatter.numberFormatter.locale = Locale(identifier: "en_GB") |
| formatter.isForPersonHeightUse = true |
| XCTAssertEqual(formatter.string(fromMeters: -1), "-100 cm") |
| XCTAssertEqual(formatter.string(fromMeters: 0.001), "0.1 cm") |
| XCTAssertEqual(formatter.string(fromMeters: 0.1), "10 cm") |
| XCTAssertEqual(formatter.string(fromMeters: 10), "1,000 cm") |
| XCTAssertEqual(formatter.string(fromMeters: 1000000), "100,000,000 cm") |
| } |
| |
| func test_stringFromValue() { |
| formatter.unitStyle = Formatter.UnitStyle.long |
| //Commented out due to [SR-3391] which causes NumberFormatter to strip leading integer 0 |
| //XCTAssertEqual(formatter.string(fromValue: 0.002, unit: LengthFormatter.Unit.millimeter),"0.002 millimeters") |
| XCTAssertEqual(formatter.string(fromValue:0, unit:LengthFormatter.Unit.centimeter), "0 centimeters") |
| |
| formatter.unitStyle = Formatter.UnitStyle.short |
| XCTAssertEqual(formatter.string(fromValue: 0.00000001, unit:LengthFormatter.Unit.foot), "0′") |
| XCTAssertEqual(formatter.string(fromValue: 2.4, unit: LengthFormatter.Unit.inch), "2.4\"") |
| XCTAssertEqual(formatter.string(fromValue: 123456, unit: LengthFormatter.Unit.yard), "123,456yd") |
| |
| formatter.unitStyle = Formatter.UnitStyle.medium |
| formatter.isForPersonHeightUse = true |
| XCTAssertEqual(formatter.string(fromValue: 0.00000001, unit: LengthFormatter.Unit.foot), "0 ft") |
| XCTAssertEqual(formatter.string(fromValue: 987654321, unit: LengthFormatter.Unit.yard), "987,654,321 yd") |
| |
| formatter.isForPersonHeightUse = false |
| XCTAssertEqual(formatter.string(fromValue: 5.3, unit: LengthFormatter.Unit.millimeter), "5.3 mm") |
| XCTAssertEqual(formatter.string(fromValue: 873.2345, unit: LengthFormatter.Unit.centimeter), "873.234 cm") |
| } |
| |
| func test_unitStringFromMeters() { |
| var unit = LengthFormatter.Unit.meter |
| XCTAssertEqual(formatter.unitString(fromMeters: -100000, usedUnit: &unit), "mi") |
| XCTAssertEqual(unit, LengthFormatter.Unit.mile) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: -1, usedUnit: &unit), "mi") |
| XCTAssertEqual(unit, LengthFormatter.Unit.mile) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 0.00001, usedUnit: &unit), "in") |
| XCTAssertEqual(unit, LengthFormatter.Unit.inch) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 0.0001, usedUnit: &unit), "in") |
| XCTAssertEqual(unit, LengthFormatter.Unit.inch) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 0.001, usedUnit: &unit), "in") |
| XCTAssertEqual(unit, LengthFormatter.Unit.inch) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 0.01, usedUnit: &unit), "in") |
| XCTAssertEqual(unit, LengthFormatter.Unit.inch) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 0.1, usedUnit: &unit), "in") |
| XCTAssertEqual(unit, LengthFormatter.Unit.inch) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 1, usedUnit: &unit), "yd") |
| XCTAssertEqual(unit, LengthFormatter.Unit.yard) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 10, usedUnit: &unit), "yd") |
| XCTAssertEqual(unit, LengthFormatter.Unit.yard) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 10000, usedUnit: &unit), "mi") |
| XCTAssertEqual(unit, LengthFormatter.Unit.mile) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 1000000, usedUnit: &unit),"mi") |
| XCTAssertEqual(unit, LengthFormatter.Unit.mile) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 10000000, usedUnit: &unit), "mi") |
| XCTAssertEqual(unit, LengthFormatter.Unit.mile) |
| |
| XCTAssertEqual(formatter.unitString(fromMeters: 100000000, usedUnit: &unit), "mi") |
| XCTAssertEqual(unit, LengthFormatter.Unit.mile) |
| } |
| |
| func test_unitStringFromValue() { |
| formatter.unitStyle = Formatter.UnitStyle.long |
| XCTAssertEqual(formatter.unitString(fromValue: 0.002, unit: LengthFormatter.Unit.millimeter), "millimeters") |
| XCTAssertEqual(formatter.unitString(fromValue: 0, unit: LengthFormatter.Unit.centimeter), "centimeters") |
| |
| formatter.unitStyle = Formatter.UnitStyle.short |
| XCTAssertEqual(formatter.unitString(fromValue: 0.00000001, unit: LengthFormatter.Unit.foot), "′") |
| XCTAssertEqual(formatter.unitString(fromValue: 123456, unit: LengthFormatter.Unit.yard), "yd") |
| |
| formatter.unitStyle = Formatter.UnitStyle.medium |
| formatter.isForPersonHeightUse = true |
| XCTAssertEqual(formatter.unitString(fromValue: 0.00000001, unit: LengthFormatter.Unit.foot), "ft") |
| XCTAssertEqual(formatter.unitString(fromValue: 987654321, unit: LengthFormatter.Unit.yard), "yd") |
| |
| formatter.isForPersonHeightUse = false |
| XCTAssertEqual(formatter.unitString(fromValue: 5.3, unit: LengthFormatter.Unit.millimeter), "mm") |
| XCTAssertEqual(formatter.unitString(fromValue: 873.2345, unit: LengthFormatter.Unit.centimeter), "cm") |
| } |
| } |