From ea054dea56d714607bcdffcbbb6ad37301fcdb1f Mon Sep 17 00:00:00 2001 From: Cynthia Rich Date: Fri, 7 Jul 2017 14:27:38 -0400 Subject: [PATCH 1/9] kicking off the project with a README --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd8da0a --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +## Welcome to GitHub Games + +A project based learning activity for people who are getting started with Git and GitHub. + +You can play the game at: https://githubschool.github.io/github-games/ + +>> _*SUPPORTED BROWSERS*: Chrome, Firefox, Safari, Opera and IE9+_ + +This fun open source game was cloned from: https://github.com/jakesgordon/javascript-tetris From cde553880b485be0b2879ef997272fb46093caa7 Mon Sep 17 00:00:00 2001 From: Cynthia Rich Date: Fri, 7 Jul 2017 14:28:09 -0400 Subject: [PATCH 2/9] add license from original project --- LICENSE | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8013079 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2011, 2012, 2013 Jake Gordon and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + From 44fa0912e841f6d660ed2170536b4f388c27055a Mon Sep 17 00:00:00 2001 From: Cynthia Rich Date: Sat, 8 Jul 2017 10:49:07 -0400 Subject: [PATCH 3/9] add base project files --- index.html | 458 ++++++++++++++++++++++++++++++++++++++++++++++++++++ stats.js | 10 ++ texture.jpg | Bin 0 -> 44996 bytes 3 files changed, 468 insertions(+) create mode 100644 index.html create mode 100644 stats.js create mode 100755 texture.jpg diff --git a/index.html b/index.html new file mode 100644 index 0000000..05fc489 --- /dev/null +++ b/index.html @@ -0,0 +1,458 @@ + + + + Javascript Tetris + + + + + +
+ + + Sorry, this example cannot be run because your browser does not support the <canvas> element + +
+ + + + + + diff --git a/stats.js b/stats.js new file mode 100644 index 0000000..5d89bff --- /dev/null +++ b/stats.js @@ -0,0 +1,10 @@ +// stats.js r6 - http://github.com/mrdoob/stats.js +var Stats=function(){function s(a,g,d){var f,c,e;for(c=0;c<30;c++)for(f=0;f<73;f++)e=(f+c*74)*4,a[e]=a[e+4],a[e+1]=a[e+5],a[e+2]=a[e+6];for(c=0;c<30;c++)e=(73+c*74)*4,c'+n+" MS ("+z+"-"+A+")";o.putImageData(B,0,0);F=j;if(j> +v+1E3){l=Math.round(u*1E3/(j-v));w=Math.min(w,l);x=Math.max(x,l);s(y.data,Math.min(30,30-l/100*30),"fps");d.innerHTML=''+l+" FPS ("+w+"-"+x+")";m.putImageData(y,0,0);if(t==3)p=performance.memory.usedJSHeapSize*9.54E-7,C=Math.min(C,p),D=Math.max(D,p),s(E.data,Math.min(30,30-p/2),"mb"),i.innerHTML=''+Math.round(p)+" MB ("+Math.round(C)+"-"+Math.round(D)+")",q.putImageData(E,0,0);v=j;u=0}}}}; + diff --git a/texture.jpg b/texture.jpg new file mode 100755 index 0000000000000000000000000000000000000000..c616e59ae2adfaf0d7f881af01389969f862586a GIT binary patch literal 44996 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 Date: Sat, 8 Jul 2017 10:51:00 -0400 Subject: [PATCH 4/9] change stats display color to blue --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 05fc489..87e71f8 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,7 @@ #menu p { margin: 0.5em 0; text-align: center; } #menu p a { text-decoration: none; color: black; } #upcoming { display: block; margin: 0 auto; background-color: #E0E0E0; } - #score { color: green; font-weight: bold; vertical-align: middle; } + #score { color: blue; font-weight: bold; vertical-align: middle; } #rows { color: blue; font-weight: bold; vertical-align: middle; } #stats { position: absolute; bottom: 0em; right: 1em; } @media screen and (min-width: 0px) and (min-height: 0px) { #tetris { font-size: 0.75em; width: 250px; } #menu { width: 100px; height: 200px; } #upcoming { width: 50px; height: 50px; } #canvas { width: 100px; height: 200px; } } /* 10px chunks */ @@ -232,7 +232,7 @@ }else{ play(); handled = true; - } + } } if (handled) ev.preventDefault(); // prevent arrow keys from scrolling the page (supported in IE9+ and all other browsers) From f38cd3c7ca3ddbe2e51dfe76a46331f2acec348a Mon Sep 17 00:00:00 2001 From: Cynthia Rich Date: Sat, 8 Jul 2017 10:51:39 -0400 Subject: [PATCH 5/9] add config Gemfile and package --- Gemfile | 5 ++ Gemfile.lock | 204 +++++++++++++++++++++++++++++++++++++++++++++++++++ _config.yml | 41 +++++++++++ package.json | 16 ++++ 4 files changed, 266 insertions(+) create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 _config.yml create mode 100644 package.json diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..4da2586 --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +source "https://rubygems.org" + +gem "github-pages" +gem "minitest" +gem "test-unit" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..91728f4 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,204 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (4.2.8) + i18n (~> 0.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.5.1) + public_suffix (~> 2.0, >= 2.0.2) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + colorator (1.1.0) + ethon (0.10.1) + ffi (>= 1.3.0) + execjs (2.7.0) + faraday (0.12.1) + multipart-post (>= 1.2, < 3) + ffi (1.9.18) + forwardable-extended (2.6.0) + gemoji (3.0.0) + github-pages (139) + activesupport (= 4.2.8) + github-pages-health-check (= 1.3.3) + jekyll (= 3.4.3) + jekyll-avatar (= 0.4.2) + jekyll-coffeescript (= 1.0.1) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.9.2) + jekyll-gist (= 1.4.0) + jekyll-github-metadata (= 2.3.1) + jekyll-mentions (= 1.2.0) + jekyll-optional-front-matter (= 0.1.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.1.0) + jekyll-redirect-from (= 0.12.1) + jekyll-relative-links (= 0.4.0) + jekyll-sass-converter (= 1.5.0) + jekyll-seo-tag (= 2.2.3) + jekyll-sitemap (= 1.0.0) + jekyll-swiss (= 0.4.0) + jekyll-theme-architect (= 0.0.4) + jekyll-theme-cayman (= 0.0.4) + jekyll-theme-dinky (= 0.0.4) + jekyll-theme-hacker (= 0.0.4) + jekyll-theme-leap-day (= 0.0.4) + jekyll-theme-merlot (= 0.0.4) + jekyll-theme-midnight (= 0.0.4) + jekyll-theme-minimal (= 0.0.4) + jekyll-theme-modernist (= 0.0.4) + jekyll-theme-primer (= 0.2.1) + jekyll-theme-slate (= 0.0.4) + jekyll-theme-tactile (= 0.0.4) + jekyll-theme-time-machine (= 0.0.4) + jekyll-titles-from-headings (= 0.1.5) + jemoji (= 0.8.0) + kramdown (= 1.13.2) + liquid (= 3.0.6) + listen (= 3.0.6) + mercenary (~> 0.3) + minima (= 2.1.1) + rouge (= 1.11.1) + terminal-table (~> 1.4) + github-pages-health-check (1.3.3) + addressable (~> 2.3) + net-dns (~> 0.8) + octokit (~> 4.0) + public_suffix (~> 2.0) + typhoeus (~> 0.7) + html-pipeline (2.6.0) + activesupport (>= 2) + nokogiri (>= 1.4) + i18n (0.8.4) + jekyll (3.4.3) + addressable (~> 2.4) + colorator (~> 1.0) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 1.1) + kramdown (~> 1.3) + liquid (~> 3.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (~> 1.7) + safe_yaml (~> 1.0) + jekyll-avatar (0.4.2) + jekyll (~> 3.0) + jekyll-coffeescript (1.0.1) + coffee-script (~> 2.2) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.9.2) + jekyll (~> 3.3) + jekyll-gist (1.4.0) + octokit (~> 4.2) + jekyll-github-metadata (2.3.1) + jekyll (~> 3.1) + octokit (~> 4.0, != 4.4.0) + jekyll-mentions (1.2.0) + activesupport (~> 4.0) + html-pipeline (~> 2.3) + jekyll (~> 3.0) + jekyll-optional-front-matter (0.1.2) + jekyll (~> 3.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.1.0) + jekyll (~> 3.0) + jekyll-redirect-from (0.12.1) + jekyll (~> 3.3) + jekyll-relative-links (0.4.0) + jekyll (~> 3.3) + jekyll-sass-converter (1.5.0) + sass (~> 3.4) + jekyll-seo-tag (2.2.3) + jekyll (~> 3.3) + jekyll-sitemap (1.0.0) + jekyll (~> 3.3) + jekyll-swiss (0.4.0) + jekyll-theme-architect (0.0.4) + jekyll (~> 3.3) + jekyll-theme-cayman (0.0.4) + jekyll (~> 3.3) + jekyll-theme-dinky (0.0.4) + jekyll (~> 3.3) + jekyll-theme-hacker (0.0.4) + jekyll (~> 3.3) + jekyll-theme-leap-day (0.0.4) + jekyll (~> 3.3) + jekyll-theme-merlot (0.0.4) + jekyll (~> 3.3) + jekyll-theme-midnight (0.0.4) + jekyll (~> 3.3) + jekyll-theme-minimal (0.0.4) + jekyll (~> 3.3) + jekyll-theme-modernist (0.0.4) + jekyll (~> 3.3) + jekyll-theme-primer (0.2.1) + jekyll (~> 3.3) + jekyll-theme-slate (0.0.4) + jekyll (~> 3.3) + jekyll-theme-tactile (0.0.4) + jekyll (~> 3.3) + jekyll-theme-time-machine (0.0.4) + jekyll (~> 3.3) + jekyll-titles-from-headings (0.1.5) + jekyll (~> 3.3) + jekyll-watch (1.5.0) + listen (~> 3.0, < 3.1) + jemoji (0.8.0) + activesupport (~> 4.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0) + kramdown (1.13.2) + liquid (3.0.6) + listen (3.0.6) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9.7) + mercenary (0.3.6) + mini_portile2 (2.2.0) + minima (2.1.1) + jekyll (~> 3.3) + minitest (5.10.1) + multipart-post (2.0.0) + net-dns (0.8.0) + nokogiri (1.8.0) + mini_portile2 (~> 2.2.0) + octokit (4.7.0) + sawyer (~> 0.8.0, >= 0.5.3) + pathutil (0.14.0) + forwardable-extended (~> 2.6) + power_assert (0.2.6) + public_suffix (2.0.5) + rb-fsevent (0.9.8) + rb-inotify (0.9.8) + ffi (>= 0.5.0) + rouge (1.11.1) + safe_yaml (1.0.4) + sass (3.4.24) + sawyer (0.8.1) + addressable (>= 2.3.5, < 2.6) + faraday (~> 0.8, < 1.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + test-unit (3.1.5) + power_assert + thread_safe (0.3.6) + typhoeus (0.8.0) + ethon (>= 0.8.0) + tzinfo (1.2.3) + thread_safe (~> 0.1) + unicode-display_width (1.2.1) + +PLATFORMS + ruby + +DEPENDENCIES + github-pages + minitest + test-unit + +BUNDLED WITH + 1.14.6 diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..0a0baf1 --- /dev/null +++ b/_config.yml @@ -0,0 +1,41 @@ +# Name of your blog (this will show up at the top of your page and in the RSS feed) +name: GitHub Games + +# Short description (goes below the title; it will also be used in the RSS feed) +description: This GitHub Games has lots of tests + +# Your name, as you want it to appear underneath each post and in the footer +author: GitHub Training, but forked + +# Your email if you want it to be linked on the contact page +author_email: you@example.com + +# The directory for category index pages. Change it to something else if +# for example you want links like /categories/category1 instead of /category1 +category_dir: / + +# Uncomment if you are planning to run the blog in a subdirectory +# Note - if you enable this, and attempt to view your site locally you have to use the baseurl in your local path. +# Example, you must use http://localhost:4000/path/to/blog +#baseurl: /path/to/blog +# baseurl: + +# The URL of your actual domain. This will be used to make absolute links in the RSS feed. +# url: http://yourdomain.com/ + +#### Under the Hood Stuff ##### + +# Use rdiscount as the markdown engine because it generates html5 compliant code for stuff like footnotes +# If you use maroku (default engine) some of your generated pages may not validate or lint as html5 +# If you don't have it install it via gem install rdiscount +markdown: kramdown + +# Makes pretty (descriptive) permalinks. See Jekyll docs for alternatives. +permalink: pretty + +# How many articles do you wish to appear on the front page: +paginate: 3 + +# Exclude metadata and development time dependencies (like Grunt plugins) +# exclude: [README.markdown, package.json, grunt.js, Gruntfile.js, Gruntfile.coffee, node_modules] +gems: [jekyll-paginate] diff --git a/package.json b/package.json new file mode 100644 index 0000000..0ef31b0 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "github-games", + "repository": { + "type": "git", + "url": "https://github.com/brianamarie/github-games.git" + }, + "description": "Simple JS game", + "author": "https://twitter.com/brianamarie", + "version": "1.0.0", + "devDependencies": { + "jshint": "^2.8.0" + }, + "scripts": { + "test": "./node_modules/jshint/bin/jshint stats.js" + } +} From f99c7219108337b35abac4e33e0edcb5fb470bdf Mon Sep 17 00:00:00 2001 From: Cynthia Rich Date: Sat, 8 Jul 2017 10:53:06 -0400 Subject: [PATCH 6/9] rename index.html to inde.html --- index.html => inde.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename index.html => inde.html (100%) diff --git a/index.html b/inde.html similarity index 100% rename from index.html rename to inde.html From 5c0d95151ae4207f83d9b025ebde47ba1eea5b20 Mon Sep 17 00:00:00 2001 From: Cynthia Rich Date: Sat, 8 Jul 2017 11:06:12 -0400 Subject: [PATCH 7/9] add tests for travis --- .travis.yml | 12 +++++++++ script/check-remotes | 51 +++++++++++++++++++++++++++++++++++ tests/test_differentcolors.rb | 48 +++++++++++++++++++++++++++++++++ tests/test_speeddecrement.rb | 27 +++++++++++++++++++ tests/test_speedmax.rb | 28 +++++++++++++++++++ tests/test_speedstart.rb | 28 +++++++++++++++++++ tests/test_verifyurl.rb | 37 +++++++++++++++++++++++++ 7 files changed, 231 insertions(+) create mode 100644 .travis.yml create mode 100644 script/check-remotes create mode 100644 tests/test_differentcolors.rb create mode 100644 tests/test_speeddecrement.rb create mode 100644 tests/test_speedmax.rb create mode 100644 tests/test_speedstart.rb create mode 100644 tests/test_verifyurl.rb diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..3337bb7 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,12 @@ +language: ruby +rvm: + - 2.1 +install: + - npm install + - bundle install + +script: +# Line 11 introduces a pre-existing linter test to the code. +# Feel free to uncomment if you're curious about what this looks like! + # - npm test + - ruby tests/test_verifyurl.rb diff --git a/script/check-remotes b/script/check-remotes new file mode 100644 index 0000000..ae4e5e8 --- /dev/null +++ b/script/check-remotes @@ -0,0 +1,51 @@ +#!/bin/sh + +set -e + +# setup environment +export PATH="/usr/share/rbenv/shims:$PATH" + +echo "hostname: $(hostname)" +echo "pwd: $(pwd)" +git --version + +# store remotes in variable +CURRENT_REMOTES=$(git remote -v) + +# print out the remote information +echo $CURRENT_REMOTES + +# set URL stored for origin to ORIGIN variable +ORIGIN=$(git config remote.origin.url) + +# set URL for upstream to UPSTREAM variable +UPSTREAM=$(git config remote.upstream.url) + +# set origin length +ORIGIN_LENGTH=${#ORIGIN} + +# set length of output to size variable +CURRENT_LENGTH=${#CURRENT_REMOTES} + +# set desired length by using remote url +DESIRED_LENGTH=$(($ORIGIN_LENGTH + $ORIGIN_LENGTH + 161)) + +if [ $UPSTREAM = 'https://github.com/githubschool/github-games.git' ] +then + echo "The upstream is GitHubSchool/GitHubGames!" +else + echo "The upstream is incorrect." + exit 1 +fi + + +if [ $DESIRED_LENGTH -eq $CURRENT_LENGTH ] +then + echo "You have an upstream remote set." +else + echo "You do not have an upstream remote set." + exit 1 +fi + + +exit 0 diff --git a/tests/test_differentcolors.rb b/tests/test_differentcolors.rb new file mode 100644 index 0000000..0e77170 --- /dev/null +++ b/tests/test_differentcolors.rb @@ -0,0 +1,48 @@ +require 'test/unit' + +class TestDifferentColors < Test::Unit::TestCase + + def test_different_colors + #open file and read + file = File.read('./index.html') + + # search for color pieces + color_i_index = file.index('var i') + color_j_index = file.index('var j') + color_l_index = file.index('var l') + color_o_index = file.index('var o') + color_s_index = file.index('var s') + color_t_index = file.index('var t') + color_z_index = file.index('var z') + last_index = file.index('do the bit manipulation') + + color_i = file[color_i_index + 69...color_j_index - 11] + puts color_i + + color_j = file[color_j_index + 69...color_l_index - 11] + puts color_j + + color_l = file[color_l_index + 69...color_o_index - 9] + puts color_l + + color_o = file[color_o_index + 69...color_s_index - 9] + puts color_o + + color_s = file[color_s_index + 69...color_t_index - 10] + puts color_s + + color_t = file[color_t_index + 69...color_z_index - 9] + puts color_t + + color_z = file[color_z_index + 69...last_index - 71] + puts color_z + + # compare all pieces + + color_array = [color_i, color_j, color_l, color_o, color_s, color_t, color_z] + puts color_array.uniq == color_array + + assert(color_array.uniq == color_array, "You have multiple pieces with the same color!") + end + +end diff --git a/tests/test_speeddecrement.rb b/tests/test_speeddecrement.rb new file mode 100644 index 0000000..7f40a4f --- /dev/null +++ b/tests/test_speeddecrement.rb @@ -0,0 +1,27 @@ +require 'test/unit' + +class TestGameDecrement < Test::Unit::TestCase + + def test_game_decrement + # open file to read + file = File.read('./index.html') + + # search for decrement word + decrement_index = file.index('decrement') + min_index = file.index('min:') + puts decrement_index + puts '> ' + puts min_index + + # assign number after decrement to a variable + decrement = file[decrement_index + 11...min_index - 2] + puts decrement + + decrement_less_than_1 = decrement.to_f < 1.0 + decrement_greater_than_0 = decrement.to_f > 0.0 + # assert if that variable is between 0-1 + assert(decrement_less_than_1, "The rate of decrement is too high! Bring 'decrement' above 0 and below 1.") + assert(decrement_greater_than_0, "The rate of decrement is too slow. Bring 'decrement' above 0 and below 1.") + end + +end diff --git a/tests/test_speedmax.rb b/tests/test_speedmax.rb new file mode 100644 index 0000000..2f99067 --- /dev/null +++ b/tests/test_speedmax.rb @@ -0,0 +1,28 @@ +require 'test/unit' + +class TestGameSpeedMax < Test::Unit::TestCase + + def test_game_speed_max + # open file to read + file = File.read('./index.html') + + # search for decrement word + min_index = file.index('min:') + end_index = file.index('}, // how long') + puts min_index + puts '> ' + puts end_index + + # assign number after decrement to a variable + min = file[min_index + 5 ...end_index] + + puts min + + min_less_than_1 = min.to_f < 1.0 + min_greater_than_0 = min.to_f > 0.0 + # assert if that variable is between 0-1 + assert(min_less_than_1, "The speed is too high! Bring 'min' above 0 and below 1.") + assert(min_greater_than_0, "The speed too slow. Bring 'min' above 0 and below 1.") + end + +end diff --git a/tests/test_speedstart.rb b/tests/test_speedstart.rb new file mode 100644 index 0000000..ba6e9be --- /dev/null +++ b/tests/test_speedstart.rb @@ -0,0 +1,28 @@ +require 'test/unit' + +class TestGameStart < Test::Unit::TestCase + + def test_game_start + # open file to read + file = File.read('./index.html') + + # search for decrement word + start_index = file.index('start:') + decrement_index = file.index('decrement:') + puts start_index + puts '> ' + puts decrement_index + + # assign number after decrement to a variable + start = file[start_index + 7...decrement_index - 2] + + puts start + + start_less_than_1 = start.to_f < 1.0 + start_greater_than_0 = start.to_f > 0.0 + # assert if that variable is between 0-1 + assert(start_less_than_1, "The start speed is too high! Bring it above 0 and below 1.") + assert(start_greater_than_0, "The start speed too slow. Bring it above 0 and below 1.") + end + +end diff --git a/tests/test_verifyurl.rb b/tests/test_verifyurl.rb new file mode 100644 index 0000000..0387615 --- /dev/null +++ b/tests/test_verifyurl.rb @@ -0,0 +1,37 @@ +require 'test/unit' + +class TestGameStart < Test::Unit::TestCase + + def test_game_start + # open file to read + file = File.read('./README.md') + + # get url for remote + remote = `git config remote.origin.url` + + # get username in remote url + split_remote = remote.to_s.split('/') + username_remote = split_remote[4] + username_remote.delete!("\n") + user_remote_split = username_remote.to_s.split('.') + user_remote = user_remote_split[0] + print 'Username in remote: ' + puts user_remote + + # search for README url, assign to link + link_index = file.index('at:') + link_end_index = file.index('>> _*SUP') + link = file[link_index + 4...link_end_index - 3] + + # get username from link in readme + split_readme = link.to_s.split('/') + username_readme = split_readme[3] + print 'Username in README: ' + puts username_readme + + + # compare those strings, pass test if they're equal + assert_equal(user_remote, username_readme, "The URL to the game in the README.md doesn't match the username in the remote repository.") + end + +end From d698b4aef4e15e2d7e3720db1ea0106ed073ea48 Mon Sep 17 00:00:00 2001 From: Cynthia Rich Date: Mon, 10 Jul 2017 18:48:04 -0400 Subject: [PATCH 8/9] Remove library option --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3337bb7..0de175a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,4 @@ install: - bundle install script: -# Line 11 introduces a pre-existing linter test to the code. -# Feel free to uncomment if you're curious about what this looks like! - # - npm test - ruby tests/test_verifyurl.rb From c749b356b2bae8eea85e82fc9f3174b2218720d6 Mon Sep 17 00:00:00 2001 From: Cynthia Rich Date: Mon, 10 Jul 2017 18:59:16 -0400 Subject: [PATCH 9/9] Update test_verifyurl --- tests/test_verifyurl.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/test_verifyurl.rb b/tests/test_verifyurl.rb index 0387615..fc47c6d 100644 --- a/tests/test_verifyurl.rb +++ b/tests/test_verifyurl.rb @@ -8,11 +8,20 @@ def test_game_start # get url for remote remote = `git config remote.origin.url` + print 'Remote URL: ' + puts remote # get username in remote url split_remote = remote.to_s.split('/') - username_remote = split_remote[4] - username_remote.delete!("\n") + username_remote_ssh = split_remote[1] + username_remote_https = split_remote[4] + if + username_remote_ssh.length > 0 + then + username_remote = username_remote_ssh + else username_remote = username_remote_https + end + user_remote_split = username_remote.to_s.split('.') user_remote = user_remote_split[0] print 'Username in remote: '