Index: tests/phpunit/tests/user/wpValidateUserLogin.php
===================================================================
--- tests/phpunit/tests/user/wpValidateUserLogin.php	(nonexistent)
+++ tests/phpunit/tests/user/wpValidateUserLogin.php	(working copy)
@@ -0,0 +1,117 @@
+<?php
+
+/**
+ * @group user
+ */
+class Tests_User_WpValidateUserLogin extends WP_UnitTestCase {
+
+	/**
+	 * A function to filter add an illegal user login.
+	 *
+	 * @param  array $illegal_logins
+	 * @return array
+	 */
+	public function illegal_user_logins( $illegal_logins ) {
+		$illegal_logins[] = 'adm1n';
+		return $illegal_logins;
+	}
+
+	/**
+	 * A function to filter and invalidate a login.
+	 *
+	 * @param  array $illegal_logins
+	 * @return array
+	 */
+	public function invalidate_login( $error, $user_login ) {
+		$error->add( 'invalid_username', 'Invalid username.' );
+	}
+
+	public function test_user_login_is_valid() {
+		$this->assertTrue( wp_validate_user_login( 'jonsnow' ) );
+	}
+
+	public function test_user_login_can_be_less_than_three_characters() {
+		$this->assertTrue( wp_validate_user_login( 'tom' ) );
+	}
+
+	public function test_user_login_cannot_be_more_than_sixty_characters() {
+		$valid = wp_validate_user_login( 'john-jacob-jingleheimer-david-marcus-castro-manuel-andrew-schmidt' );
+		$this->assertInstanceOf( 'WP_Error', $valid );
+	}
+
+	public function allowed_usernames_with_special_characters() {
+			return array(
+				array( 'arya.stark' ),
+				array( 'arya_stark' ),
+				array( 'arya-stark' ),
+				array( 'arya.stark@hotmail.com' ),
+			);
+	}
+
+	/**
+	 * @dataProvider allowed_usernames_with_special_characters
+	 */
+	public function test_user_login_can_contain_some_special_characters( $user_login ) {
+		$this->assertTrue( wp_validate_user_login( $user_login ) );
+	}
+
+	public function test_user_login_cannot_contain_illegal_characters() {
+		$valid = wp_validate_user_login( 'cer$ei' );
+		$this->assertInstanceOf( 'WP_Error', $valid );
+	}
+
+	public function illegal_logins_in_multisite() {
+			return array(
+				array( 'www' ),
+				array( 'web' ),
+				array( 'root' ),
+				// array( 'admin' ),
+				array( 'main' ),
+				array( 'invite' ),
+				array( 'administrator' ),
+			);
+	}
+
+	/**
+	 * @dataProvider illegal_logins_in_multisite
+	 */
+	public function test_user_login_cannot_contain_illegal_login_in_multisite( $user_login ) {
+		$valid = wp_validate_user_login( $user_login );
+		if ( is_multisite() ) {
+			$this->assertInstanceOf( 'WP_Error', $valid );
+		} else {
+			$this->assertTrue( $valid );
+		}
+	}
+
+	public function test_user_login_must_contain_letter_in_multisite() {
+		$valid = wp_validate_user_login( '.' );
+		if ( is_multisite() ) {
+			$this->assertInstanceOf( 'WP_Error', $valid );
+		} else {
+			$this->assertTrue( $valid );
+		}
+	}
+
+	public function test_illegal_login_filter_should_invalidate_user_logins() {
+		add_filter( 'illegal_user_logins', array( $this, 'illegal_user_logins' ) );
+		$valid = wp_validate_user_login( 'adm1n' );
+		$this->assertInstanceOf( 'WP_Error', $valid );
+		remove_filter( 'illegal_user_logins', array( $this, 'illegal_user_logins' ) );
+	}
+
+	public function test_validate_username_filter_can_invalidate_user_login() {
+		add_filter( 'validate_username', '__return_false' );
+		$valid = wp_validate_user_login( 'robert' );
+		$this->assertInstanceOf( 'WP_Error', $valid );
+		remove_filter( 'validate_username', '__return_false' );
+	}
+
+	public function test_additional_validation_can_invalidate() {
+		add_action( 'wp_validate_user_login', array( $this, 'invalidate_login' ), 10, 2 );
+		$valid = wp_validate_user_login( 'glerf' );
+		$this->assertInstanceOf( 'WP_Error', $valid );
+		remove_filter( 'wp_validate_user_login', array( $this, 'invalidate_login' ), 10, 2 );
+	}
+
+}
