-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added an option to specify the language pair for the translation (#10)
- Loading branch information
Yurii Samsoniuk
committed
Jan 28, 2021
1 parent
61ea6d3
commit 207e05e
Showing
16 changed files
with
567 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
import Combine | ||
import Foundation | ||
|
||
public protocol URLLoader { | ||
func requestData(for url: URL) -> AnyPublisher<(data: Data, response: URLResponse), URLError> | ||
} | ||
|
||
extension URLSession: URLLoader { | ||
public func requestData(for url: URL) -> AnyPublisher< | ||
(data: Data, response: URLResponse), URLError | ||
> { | ||
return self.dataTaskPublisher(for: url).eraseToAnyPublisher() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import Foundation | ||
|
||
public struct LanguagePair { | ||
public var source: String | ||
public var destination: String | ||
|
||
public init(source: String, destination: String) { | ||
self.source = source | ||
self.destination = destination | ||
} | ||
} | ||
|
||
extension LanguagePair { | ||
public static var englishGerman = LanguagePair(source: "english", destination: "german") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import Combine | ||
import Common | ||
import Foundation | ||
|
||
func notFaked1Fatal<T, R>(file: StaticString = #file, line: UInt = #line) -> (T) -> R { | ||
return { _ in fatalError("\(file):\(line) - Not faked!") } | ||
} | ||
|
||
public class URLLoaderFake: URLLoader { | ||
public class Stubs { | ||
public var requestDataResult: (URL) -> Result<(data: Data, response: URLResponse), URLError> = | ||
notFaked1Fatal() | ||
} | ||
public let stubs = Stubs() | ||
|
||
public init() {} | ||
|
||
public func requestData(for url: URL) -> AnyPublisher< | ||
(data: Data, response: URLResponse), URLError | ||
> { | ||
Future { (completion) in | ||
completion(self.stubs.requestDataResult(url)) | ||
}.eraseToAnyPublisher() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import CommonTesting | ||
import Foundation | ||
import XCTest | ||
|
||
@testable import Linguee | ||
|
||
class LingueeTest: XCTestCase { | ||
private var loader: URLLoaderFake! | ||
private var linguee: Linguee! | ||
private let translationSubscriber = TestSubscriber<[Autocompletion], Linguee.Error>() | ||
|
||
override func setUp() { | ||
super.setUp() | ||
loader = URLLoaderFake() | ||
linguee = Linguee(loader: loader) | ||
} | ||
|
||
/// Tests that a search is done against a valid search URL. | ||
func testSearchURL() { | ||
var requestURL: URL? | ||
loader.stubs.requestDataResult = { url in | ||
requestURL = url | ||
return .success((Data(), URLResponse())) | ||
} | ||
|
||
let _ = linguee.search(for: "hello").subscribe(translationSubscriber) | ||
|
||
translationSubscriber.waitForCompletion()?.assertSuccess() | ||
XCTAssertEqual( | ||
requestURL, URL(string: "https://www.linguee.com/english-german/search?source=auto&qe=hello")) | ||
} | ||
|
||
/// Tests that a search is done for the provided language pair. | ||
func testSearchBasedOnTheLanguagePair() { | ||
var requestURL: URL? | ||
loader.stubs.requestDataResult = { url in | ||
requestURL = url | ||
return .success((Data(), URLResponse())) | ||
} | ||
|
||
let languagePair = LanguagePair(source: "italian", destination: "ukrainian") | ||
linguee = Linguee(languagePair: languagePair, loader: loader) | ||
let _ = linguee.search(for: "hello") | ||
.subscribe(translationSubscriber) | ||
|
||
translationSubscriber.waitForCompletion()?.assertSuccess() | ||
XCTAssertEqual( | ||
requestURL, | ||
URL(string: "https://www.linguee.com/italian-ukrainian/search?source=auto&qe=hello")) | ||
} | ||
} |
Oops, something went wrong.