// 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")
    }
}
