diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/assets/css/index.php b/assets/css/index.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/assets/css/index.php @@ -0,0 +1 @@ +basename = plugin_basename( $plugin_file ); + $this->url = plugin_dir_url( $plugin_file ); + $this->path = plugin_dir_path( $plugin_file ); + + // Loaders. + $this->auto_loader(); + $this->attach(); + } + + /** + * Register the autoloader. + * + * @since Unknown + * @author Unknown + */ + private function auto_loader() { + + // Register our autoloader. + spl_autoload_register( array( $this, 'autoload' ) ); + } + + /** + * Require classes. + * + * @author Unknown + * @since Unknown + * + * @param string $class_name Fully qualified name of class to try and load. + * + * @return void Early exit if we can't load the class. + */ + public function autoload( $class_name ) { + + // If our class doesn't have our namespace, don't load it. + if ( 0 !== strpos( $class_name, 'Company\\Package\\' ) ) { + return; + } + + $parts = explode( '\\', $class_name ); + + // Include our file. + $includes_dir = trailingslashit( $this->path ) . 'includes/'; + $file = 'class-' . strtolower( end( $parts ) ) . '.php'; + + if ( stream_resolve_include_path( $includes_dir . $file ) ) { + require_once $includes_dir . $file; + } + } + + /** + * Load and attach app elements to the app class. + * + * Make your classes/element small and do only one thing. If you + * need to pass $this to it so you can access other classes + * functionality. + * + * When you add something that gets attached + * + * @author Unknown + * @since Unknown + */ + private function attach() { + $this->shared = new Shared(); + } + + /** + * This plugin's url. + * + * @author Unknown + * @since Unknown + * + * @param string $path (Optional) appended path. + * @return string URL and path. + */ + public function url( $path = '' ) { + return is_string( $path ) && ! empty( $path ) ? + trailingslashit( $this->url ) . $path : + trailingslashit( $this->url ); + } + + /** + * Re-attribute user content to site author. + * + * @author Unknown + * @author Unknown + * + * @since Unknown + */ + public function deactivate_plugin() { + } +} diff --git a/includes/class-shared.php b/includes/class-shared.php new file mode 100644 index 0000000..0f5035d --- /dev/null +++ b/includes/class-shared.php @@ -0,0 +1,18 @@ +getMessage() ); + } + + // Return null so no further action can take place. + return null; + } + } + + return $app; +} +app(); // Initialize the app. + +// When we deactivate this plugin... +register_deactivation_hook( __FILE__, array( app(), 'deactivate_plugin' ) ); diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..c118265 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,12 @@ +# BEFORE TESTS EXECUTION +Run this command: +`bash tests/install-wp-tests.sh wordpress_test root '' localhost latest` + +Replace `root` with the username of your database and replace '' with the database password. Also replace `localhost` with the hostname of your database. You can find all three of these values in your wp-config.php file. + +You can now type `phpunit` into the command line and the unit tests will run. + +Please note, you also might need to modify the path(s) in bootstrap.php with correct path for your WordPress location, it's a known phpunit issue related to git mirroring. + +# HOW TO RUN TESTS +1. Go to plugin folder and execute `phpunit` command. It should start unit testing process and run SampleTest which would return true. diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100755 index 0000000..1832b98 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,25 @@ + [db-host] [wp-version] [skip-database-creation]" + exit 1 +fi + +DB_NAME=$1 +DB_USER=$2 +DB_PASS=$3 +DB_HOST=${4-localhost} +WP_VERSION=${5-latest} +SKIP_DB_CREATE=${6-false} + +WP_TESTS_DIR=${WP_TESTS_DIR-/tmp/wordpress-tests-lib} +WP_CORE_DIR=${WP_CORE_DIR-/tmp/wordpress/} + +download() { + if [ `which curl` ]; then + curl -s "$1" > "$2"; + elif [ `which wget` ]; then + wget -nv -O "$2" "$1" + fi +} + +if [[ $WP_VERSION =~ [0-9]+\.[0-9]+(\.[0-9]+)? ]]; then + WP_TESTS_TAG="tags/$WP_VERSION" +elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + WP_TESTS_TAG="trunk" +else + # http serves a single offer, whereas https serves multiple. we only want one + download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json + grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json + LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') + if [[ -z "$LATEST_VERSION" ]]; then + echo "Latest WordPress version could not be found" + exit 1 + fi + WP_TESTS_TAG="tags/$LATEST_VERSION" +fi + +set -ex + +install_wp() { + + if [ -d $WP_CORE_DIR ]; then + return; + fi + + mkdir -p $WP_CORE_DIR + + if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + mkdir -p /tmp/wordpress-nightly + download https://wordpress.org/nightly-builds/wordpress-latest.zip /tmp/wordpress-nightly/wordpress-nightly.zip + unzip -q /tmp/wordpress-nightly/wordpress-nightly.zip -d /tmp/wordpress-nightly/ + mv /tmp/wordpress-nightly/wordpress/* $WP_CORE_DIR + else + if [ $WP_VERSION == 'latest' ]; then + local ARCHIVE_NAME='latest' + else + local ARCHIVE_NAME="wordpress-$WP_VERSION" + fi + download https://wordpress.org/${ARCHIVE_NAME}.tar.gz /tmp/wordpress.tar.gz + tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C $WP_CORE_DIR + fi + + download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php +} + +install_test_suite() { + # portable in-place argument for both GNU sed and Mac OSX sed + if [[ $(uname -s) == 'Darwin' ]]; then + local ioption='-i .bak' + else + local ioption='-i' + fi + + # set up testing suite if it doesn't yet exist + if [ ! -d $WP_TESTS_DIR ]; then + # set up testing suite + mkdir -p $WP_TESTS_DIR + svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes + svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data + fi + + if [ ! -f wp-tests-config.php ]; then + download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php + # remove all forward slashes in the end + WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::") + sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php + fi + +} + +install_db() { + + if [ ${SKIP_DB_CREATE} = "true" ]; then + return 0 + fi + + # parse DB_HOST for port or socket references + local PARTS=(${DB_HOST//\:/ }) + local DB_HOSTNAME=${PARTS[0]}; + local DB_SOCK_OR_PORT=${PARTS[1]}; + local EXTRA="" + + if ! [ -z $DB_HOSTNAME ] ; then + if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then + EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" + elif ! [ -z $DB_SOCK_OR_PORT ] ; then + EXTRA=" --socket=$DB_SOCK_OR_PORT" + elif ! [ -z $DB_HOSTNAME ] ; then + EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" + fi + fi + + # create database + mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA +} + +install_wp +install_test_suite +install_db