// run-pass

#![allow(unused_must_use)]
#![allow(unused_imports)]
// This test can't be a unit test in std,
// because it needs TempDir, which is in extra

// ignore-cross-compile

use std::env;
use std::ffi::CString;
use std::fs::{self, File};
use std::path::PathBuf;

fn rename_directory() {
    let tmpdir = PathBuf::from(env::var_os("RUST_TEST_TMPDIR").unwrap());
    let old_path = tmpdir.join("foo/bar/baz");
    fs::create_dir_all(&old_path).unwrap();
    let test_file = &old_path.join("temp.txt");

    File::create(test_file).unwrap();

    let new_path = tmpdir.join("quux/blat");
    fs::create_dir_all(&new_path).unwrap();
    fs::rename(&old_path, &new_path.join("newdir"));
    assert!(new_path.join("newdir").is_dir());
    assert!(new_path.join("newdir/temp.txt").exists());
}

pub fn main() { rename_directory() }
