mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-05 23:38:38 +09:00
174 lines
8 KiB
Swift
174 lines
8 KiB
Swift
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
@testable import Client
|
|
import Foundation
|
|
import XCTest
|
|
import Shared
|
|
|
|
private let DefaultSearchEngineName = "Google"
|
|
private let ExpectedEngineNames = ["Amazon.com", "Bing", "DuckDuckGo", "Google", "Twitter", "Wikipedia", "Yahoo"]
|
|
|
|
class SearchEnginesTests: XCTestCase {
|
|
|
|
func testIncludesExpectedEngines() {
|
|
// Verify that the set of shipped engines includes the expected subset.
|
|
let profile = MockProfile()
|
|
let engines = SearchEngines(prefs: profile.prefs, files: profile.files).orderedEngines
|
|
XCTAssertTrue((engines?.count)! >= ExpectedEngineNames.count)
|
|
|
|
for engineName in ExpectedEngineNames {
|
|
XCTAssertTrue(((engines?.filter { engine in engine.shortName == engineName })?.count)! > 0)
|
|
}
|
|
}
|
|
|
|
func testDefaultEngineOnStartup() {
|
|
// If this is our first run, Yahoo should be first for the en locale.
|
|
let profile = MockProfile()
|
|
let engines = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
XCTAssertEqual(engines.defaultEngine.shortName, DefaultSearchEngineName)
|
|
XCTAssertEqual(engines.orderedEngines[0].shortName, DefaultSearchEngineName)
|
|
}
|
|
|
|
func testAddingAndDeletingCustomEngines() {
|
|
let testEngine = OpenSearchEngine(engineID: "ATester", shortName: "ATester", image: UIImage(), searchTemplate: "http://firefox.com/find?q={searchTerm}", suggestTemplate: nil, isCustomEngine: true)
|
|
let profile = MockProfile()
|
|
let engines = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
engines.addSearchEngine(testEngine)
|
|
XCTAssertEqual(engines.orderedEngines[1].engineID, testEngine.engineID)
|
|
|
|
engines.deleteCustomEngine(testEngine)
|
|
let deleted = engines.orderedEngines.filter {$0 == testEngine}
|
|
XCTAssertEqual(deleted, [])
|
|
}
|
|
|
|
func testDefaultEngine() {
|
|
let profile = MockProfile()
|
|
let engines = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
let engineSet = engines.orderedEngines
|
|
|
|
engines.defaultEngine = (engineSet?[0])!
|
|
XCTAssertTrue(engines.isEngineDefault((engineSet?[0])!))
|
|
XCTAssertFalse(engines.isEngineDefault((engineSet?[1])!))
|
|
// The first ordered engine is the default.
|
|
XCTAssertEqual(engines.orderedEngines[0].shortName, engineSet?[0].shortName)
|
|
|
|
engines.defaultEngine = (engineSet?[1])!
|
|
XCTAssertFalse(engines.isEngineDefault((engineSet?[0])!))
|
|
XCTAssertTrue(engines.isEngineDefault((engineSet?[1])!))
|
|
// The first ordered engine is the default.
|
|
XCTAssertEqual(engines.orderedEngines[0].shortName, engineSet?[1].shortName)
|
|
|
|
let engines2 = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
// The default engine should have been persisted.
|
|
XCTAssertTrue(engines2.isEngineDefault((engineSet?[1])!))
|
|
// The first ordered engine is the default.
|
|
XCTAssertEqual(engines.orderedEngines[0].shortName, engineSet?[1].shortName)
|
|
}
|
|
|
|
func testOrderedEngines() {
|
|
let profile = MockProfile()
|
|
let engines = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
|
|
engines.orderedEngines = [ExpectedEngineNames[4], ExpectedEngineNames[2], ExpectedEngineNames[0]].map { name in
|
|
for engine in engines.orderedEngines {
|
|
if engine.shortName == name {
|
|
return engine
|
|
}
|
|
}
|
|
XCTFail("Could not find engine: \(name)")
|
|
return engines.orderedEngines.first!
|
|
}
|
|
XCTAssertEqual(engines.orderedEngines[0].shortName, ExpectedEngineNames[4])
|
|
XCTAssertEqual(engines.orderedEngines[1].shortName, ExpectedEngineNames[2])
|
|
XCTAssertEqual(engines.orderedEngines[2].shortName, ExpectedEngineNames[0])
|
|
|
|
let engines2 = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
// The ordering should have been persisted.
|
|
XCTAssertEqual(engines2.orderedEngines[0].shortName, ExpectedEngineNames[4])
|
|
XCTAssertEqual(engines2.orderedEngines[1].shortName, ExpectedEngineNames[2])
|
|
XCTAssertEqual(engines2.orderedEngines[2].shortName, ExpectedEngineNames[0])
|
|
|
|
// Remaining engines should be appended in alphabetical order.
|
|
XCTAssertEqual(engines2.orderedEngines[3].shortName, ExpectedEngineNames[1])
|
|
XCTAssertEqual(engines2.orderedEngines[4].shortName, ExpectedEngineNames[3])
|
|
XCTAssertEqual(engines2.orderedEngines[5].shortName, ExpectedEngineNames[5])
|
|
XCTAssertEqual(engines2.orderedEngines[6].shortName, ExpectedEngineNames[6])
|
|
}
|
|
|
|
func testQuickSearchEngines() {
|
|
let profile = MockProfile()
|
|
let engines = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
let engineSet = engines.orderedEngines
|
|
|
|
// You can't disable the default engine.
|
|
engines.defaultEngine = (engineSet?[1])!
|
|
engines.disableEngine((engineSet?[1])!)
|
|
XCTAssertTrue(engines.isEngineEnabled((engineSet?[1])!))
|
|
|
|
// The default engine is not included in the quick search engines.
|
|
XCTAssertEqual(0, engines.quickSearchEngines.filter { engine in engine.shortName == engineSet?[1].shortName }.count)
|
|
|
|
// Enable and disable work.
|
|
engines.enableEngine((engineSet?[0])!)
|
|
XCTAssertTrue(engines.isEngineEnabled((engineSet?[0])!))
|
|
XCTAssertEqual(1, engines.quickSearchEngines.filter { engine in engine.shortName == engineSet?[0].shortName }.count)
|
|
|
|
engines.disableEngine((engineSet?[0])!)
|
|
XCTAssertFalse(engines.isEngineEnabled((engineSet?[0])!))
|
|
XCTAssertEqual(0, engines.quickSearchEngines.filter { engine in engine.shortName == engineSet?[0].shortName }.count)
|
|
|
|
// Setting the default engine enables it.
|
|
engines.defaultEngine = (engineSet?[0])!
|
|
XCTAssertTrue(engines.isEngineEnabled((engineSet?[1])!))
|
|
|
|
// Setting the order may change the default engine, which enables it.
|
|
engines.orderedEngines = [(engineSet?[2])!, (engineSet?[1])!, (engineSet?[0])!]
|
|
XCTAssertTrue(engines.isEngineDefault((engineSet?[2])!))
|
|
XCTAssertTrue(engines.isEngineEnabled((engineSet?[2])!))
|
|
|
|
// The enabling should be persisted.
|
|
engines.enableEngine((engineSet?[2])!)
|
|
engines.disableEngine((engineSet?[1])!)
|
|
engines.enableEngine((engineSet?[0])!)
|
|
|
|
let engines2 = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
XCTAssertTrue(engines2.isEngineEnabled((engineSet?[2])!))
|
|
XCTAssertFalse(engines2.isEngineEnabled((engineSet?[1])!))
|
|
XCTAssertTrue(engines2.isEngineEnabled((engineSet?[0])!))
|
|
}
|
|
|
|
func testSearchSuggestionSettings() {
|
|
let profile = MockProfile()
|
|
let engines = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
|
|
// By default, you should see search suggestions
|
|
XCTAssertTrue(engines.shouldShowSearchSuggestions)
|
|
|
|
// Setting should be persisted.
|
|
engines.shouldShowSearchSuggestions = false
|
|
|
|
let engines2 = SearchEngines(prefs: profile.prefs, files: profile.files)
|
|
XCTAssertFalse(engines2.shouldShowSearchSuggestions)
|
|
}
|
|
|
|
func testDirectoriesForLanguageIdentifier() {
|
|
XCTAssertEqual(
|
|
SearchEngines.directoriesForLanguageIdentifier("nl", basePath: "/tmp", fallbackIdentifier: "en"),
|
|
["/tmp/nl", "/tmp/en"]
|
|
)
|
|
XCTAssertEqual(
|
|
SearchEngines.directoriesForLanguageIdentifier("en-US", basePath: "/tmp", fallbackIdentifier: "en"),
|
|
["/tmp/en-US", "/tmp/en"]
|
|
)
|
|
XCTAssertEqual(
|
|
SearchEngines.directoriesForLanguageIdentifier("es-MX", basePath: "/tmp", fallbackIdentifier: "en"),
|
|
["/tmp/es-MX", "/tmp/es", "/tmp/en"]
|
|
)
|
|
XCTAssertEqual(
|
|
SearchEngines.directoriesForLanguageIdentifier("zh-Hans-CN", basePath: "/tmp", fallbackIdentifier: "en"),
|
|
["/tmp/zh-Hans-CN", "/tmp/zh-CN", "/tmp/zh", "/tmp/en"]
|
|
)
|
|
}
|
|
}
|