mirror of
https://github.com/servo/servo.git
synced 2025-08-12 08:55:32 +01:00
filepicker
This commit is contained in:
parent
0c11e8340b
commit
256c7e894e
5 changed files with 135 additions and 46 deletions
|
@ -3,15 +3,29 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use ipc_channel::ipc::{self, IpcSender};
|
||||
use net::filemanager_thread::FileManagerThreadFactory;
|
||||
use net_traits::filemanager_thread::{FileManagerThreadMsg, FileManagerThreadError};
|
||||
use net::filemanager_thread::{FileManagerThreadFactory, UIProvider};
|
||||
use net_traits::filemanager_thread::{FilterPattern, FileManagerThreadMsg, FileManagerThreadError};
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
use std::path::PathBuf;
|
||||
|
||||
const TEST_PROVIDER: &'static TestProvider = &TestProvider;
|
||||
|
||||
struct TestProvider;
|
||||
|
||||
impl UIProvider for TestProvider {
|
||||
fn open_file_dialog(&self, _: &str, _: Option<(&[&str], &str)>) -> Option<String> {
|
||||
Some("test.txt".to_string())
|
||||
}
|
||||
|
||||
fn open_file_dialog_multi(&self, _: &str, _: Option<(&[&str], &str)>) -> Option<Vec<String>> {
|
||||
Some(vec!["test.txt".to_string()])
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_filemanager() {
|
||||
let chan: IpcSender<FileManagerThreadMsg> = FileManagerThreadFactory::new();
|
||||
let chan: IpcSender<FileManagerThreadMsg> = FileManagerThreadFactory::new(TEST_PROVIDER);
|
||||
|
||||
// Try to open a dummy file "tests/unit/net/test.txt" in tree
|
||||
let mut handler = File::open("test.txt").expect("test.txt is stolen");
|
||||
|
@ -20,11 +34,13 @@ fn test_filemanager() {
|
|||
handler.read_to_end(&mut test_file_content)
|
||||
.expect("Read tests/unit/net/test.txt error");
|
||||
|
||||
let patterns = vec![FilterPattern(".txt".to_string())];
|
||||
|
||||
|
||||
{
|
||||
// Try to select a dummy file "tests/unit/net/test.txt"
|
||||
let (tx, rx) = ipc::channel().unwrap();
|
||||
chan.send(FileManagerThreadMsg::SelectFile(tx)).unwrap();
|
||||
chan.send(FileManagerThreadMsg::SelectFile(patterns.clone(), tx)).unwrap();
|
||||
let selected = rx.recv().expect("File manager channel is broken")
|
||||
.expect("The file manager failed to find test.txt");
|
||||
|
||||
|
@ -66,7 +82,7 @@ fn test_filemanager() {
|
|||
|
||||
{
|
||||
let (tx, rx) = ipc::channel().unwrap();
|
||||
let _ = chan.send(FileManagerThreadMsg::SelectFile(tx));
|
||||
let _ = chan.send(FileManagerThreadMsg::SelectFile(patterns.clone(), tx));
|
||||
|
||||
assert!(rx.try_recv().is_err(), "The thread should not respond normally after exited");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue