Iniciando projeto

James Peret 9 years ago
commit
eb90f8d57d
18 changed files with 758 additions and 0 deletions
  1. 3 0
      .bowerrc
  2. 21 0
      .editorconfig
  3. 1 0
      .gitattributes
  4. 4 0
      .gitignore
  5. 17 0
      .jshintrc
  6. 3 0
      .yo-rc.json
  7. 440 0
      Gruntfile.js
  8. BIN
      app/favicon.ico
  9. 84 0
      app/index.html
  10. 4 0
      app/robots.txt
  11. 2 0
      app/scripts/main.js
  12. 89 0
      app/styles/main.css
  13. 7 0
      bower.json
  14. 32 0
      package.json
  15. 3 0
      test/.bowerrc
  16. 9 0
      test/bower.json
  17. 26 0
      test/index.html
  18. 13 0
      test/spec/test.js

+ 3 - 0
.bowerrc

@@ -0,0 +1,3 @@
1
+{
2
+  "directory": "bower_components"
3
+}

+ 21 - 0
.editorconfig

@@ -0,0 +1,21 @@
1
+# EditorConfig helps developers define and maintain consistent
2
+# coding styles between different editors and IDEs
3
+# editorconfig.org
4
+
5
+root = true
6
+
7
+
8
+[*]
9
+
10
+# Change these settings to your own preference
11
+indent_style = space
12
+indent_size = 2
13
+
14
+# We recommend you to keep these unchanged
15
+end_of_line = lf
16
+charset = utf-8
17
+trim_trailing_whitespace = true
18
+insert_final_newline = true
19
+
20
+[*.md]
21
+trim_trailing_whitespace = false

+ 1 - 0
.gitattributes

@@ -0,0 +1 @@
1
+* text=auto

+ 4 - 0
.gitignore

@@ -0,0 +1,4 @@
1
+node_modules
2
+dist
3
+.tmp
4
+bower_components

+ 17 - 0
.jshintrc

@@ -0,0 +1,17 @@
1
+{
2
+  "bitwise": true,
3
+  "browser": true,
4
+  "camelcase": true,
5
+  "curly": true,
6
+  "eqeqeq": true,
7
+  "esnext": true,
8
+  "immed": true,
9
+  "jquery": true,
10
+  "latedef": true,
11
+  "newcap": true,
12
+  "noarg": true,
13
+  "quotmark": "single",
14
+  "strict": true,
15
+  "undef": true,
16
+  "unused": true
17
+}

+ 3 - 0
.yo-rc.json

@@ -0,0 +1,3 @@
1
+{
2
+  "generator-mocha": {}
3
+}

+ 440 - 0
Gruntfile.js

@@ -0,0 +1,440 @@
1
+/*jshint node:true*/
2
+
3
+// Generated on 2015-03-31 using
4
+// generator-lessapp 0.5.1
5
+'use strict';
6
+
7
+// # Globbing
8
+// for performance reasons we're only matching one level down:
9
+// 'test/spec/{,*/}*.js'
10
+// If you want to recursively match all subfolders, use:
11
+// 'test/spec/**/*.js'
12
+
13
+module.exports = function (grunt) {
14
+
15
+  // Time how long tasks take. Can help when optimizing build times
16
+  require('time-grunt')(grunt);
17
+
18
+  // Load grunt tasks automatically
19
+  require('load-grunt-tasks')(grunt);
20
+
21
+  // Configurable paths
22
+  var config = {
23
+    app: 'app',
24
+    dist: 'dist'
25
+  };
26
+
27
+  // Define the configuration for all the tasks
28
+  grunt.initConfig({
29
+
30
+    // Project settings
31
+    config: config,
32
+
33
+    // Watches files for changes and runs tasks based on the changed files
34
+    watch: {
35
+      bower: {
36
+        files: ['bower.json'],
37
+        tasks: ['wiredep']
38
+      },
39
+      js: {
40
+        files: ['<%= config.app %>/scripts/{,*/}*.js'],
41
+        tasks: ['jshint'],
42
+        options: {
43
+          livereload: '<%= connect.options.livereload %>'
44
+        }
45
+      },
46
+      jstest: {
47
+        files: ['test/spec/{,*/}*.js'],
48
+        tasks: ['test:watch']
49
+      },
50
+      gruntfile: {
51
+        files: ['Gruntfile.js']
52
+      },
53
+      less: {
54
+        files: ['<%= config.app %>/styles/{,*/}*.less'],
55
+        tasks: ['less:server', 'autoprefixer']
56
+      },
57
+      styles: {
58
+        files: ['<%= config.app %>/styles/{,*/}*.css'],
59
+        tasks: ['newer:copy:styles', 'autoprefixer']
60
+      },
61
+      livereload: {
62
+        options: {
63
+          livereload: '<%= connect.options.livereload %>'
64
+        },
65
+        files: [
66
+          '<%= config.app %>/{,*/}*.html',
67
+          '.tmp/styles/{,*/}*.css',
68
+          '<%= config.app %>/images/{,*/}*'
69
+        ]
70
+      }
71
+    },
72
+
73
+    // The actual grunt server settings
74
+    connect: {
75
+      options: {
76
+        port: 9000,
77
+        open: true,
78
+        livereload: 35729,
79
+        // Change this to '0.0.0.0' to access the server from outside
80
+        hostname: 'localhost'
81
+      },
82
+      livereload: {
83
+        options: {
84
+          middleware: function(connect) {
85
+            return [
86
+              connect.static('.tmp'),
87
+              connect().use('/bower_components', connect.static('./bower_components')),
88
+              connect().use('/fonts', connect.static('<%= config.app %>/bower_components/bootstrap/dist/fonts')),
89
+              connect.static(config.app)
90
+            ];
91
+          }
92
+        }
93
+      },
94
+      test: {
95
+        options: {
96
+          open: false,
97
+          port: 9001,
98
+          middleware: function(connect) {
99
+            return [
100
+              connect.static('.tmp'),
101
+              connect.static('test'),
102
+              connect().use('/bower_components', connect.static('./bower_components')),
103
+              connect().use('/fonts', connect.static('./bower_components/bootstrap/dist/fonts')),
104
+              connect.static(config.app)
105
+            ];
106
+          }
107
+        }
108
+      },
109
+      dist: {
110
+        options: {
111
+          base: '<%= config.dist %>',
112
+          livereload: false
113
+        }
114
+      }
115
+    },
116
+
117
+    // Empties folders to start fresh
118
+    clean: {
119
+      dist: {
120
+        files: [{
121
+          dot: true,
122
+          src: [
123
+            '.tmp',
124
+            '<%= config.dist %>/*',
125
+            '!<%= config.dist %>/.git*'
126
+          ]
127
+        }]
128
+      },
129
+      server: '.tmp'
130
+    },
131
+
132
+    // Make sure code styles are up to par and there are no obvious mistakes
133
+    jshint: {
134
+      options: {
135
+        jshintrc: '.jshintrc',
136
+        reporter: require('jshint-stylish')
137
+      },
138
+      all: [
139
+        'Gruntfile.js',
140
+        '<%= config.app %>/scripts/{,*/}*.js',
141
+        '!<%= config.app %>/scripts/vendor/*',
142
+        'test/spec/{,*/}*.js'
143
+      ]
144
+    },
145
+
146
+    // Mocha testing framework configuration options
147
+    mocha: {
148
+      all: {
149
+        options: {
150
+          run: true,
151
+          urls: ['http://<%= connect.test.options.hostname %>:<%= connect.test.options.port %>/index.html']
152
+        }
153
+      }
154
+    },
155
+
156
+    // Compiles LESS to CSS and generates necessary files if requested
157
+    less: {
158
+      options: {
159
+        paths: ['./bower_components'],
160
+      },
161
+      dist: {
162
+        options: {
163
+          cleancss: true,
164
+          report: 'gzip'
165
+        },
166
+        files: [{
167
+          expand: true,
168
+          cwd: '<%= config.app %>/styles',
169
+          src: '*.less',
170
+          dest: '.tmp/styles',
171
+          ext: '.css'
172
+        }]
173
+      },
174
+      server: {
175
+        options: {
176
+          sourceMap: true,
177
+          sourceMapBasepath: '<%= config.app %>/',
178
+          sourceMapRootpath: '../'
179
+        },
180
+        files: [{
181
+          expand: true,
182
+          cwd: '<%= config.app %>/styles',
183
+          src: '*.less',
184
+          dest: '.tmp/styles',
185
+          ext: '.css'
186
+        }]
187
+      }
188
+    },
189
+
190
+    // Add vendor prefixed styles
191
+    autoprefixer: {
192
+      options: {
193
+        browsers: ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1'],
194
+        map: {
195
+          prev: '.tmp/styles/'
196
+        }
197
+        
198
+      },
199
+      dist: {
200
+        files: [{
201
+          expand: true,
202
+          cwd: '.tmp/styles/',
203
+          src: '{,*/}*.css',
204
+          dest: '.tmp/styles/'
205
+        }]
206
+      }
207
+    },
208
+
209
+    // Automatically inject Bower components into the HTML file
210
+    wiredep: {
211
+      app: {
212
+        ignorePath: /^\/|\.\.\//,
213
+        src: ['<%= config.app %>/index.html'],
214
+        exclude: ['bower_components/bootstrap/dist/js/bootstrap.js']
215
+      },
216
+      less: {
217
+        src: ['<%= config.app %>/styles/{,*/}*.less'],
218
+        ignorePath: /(\.\.\/){1,2}bower_components\//
219
+      }
220
+    },
221
+
222
+    // Renames files for browser caching purposes
223
+    filerev: {
224
+      dist: {
225
+        src: [
226
+          '<%= config.dist %>/scripts/{,*/}*.js',
227
+          '<%= config.dist %>/styles/{,*/}*.css',
228
+          '<%= config.dist %>/images/{,*/}*.*',
229
+          '<%= config.dist %>/styles/fonts/{,*/}*.*',
230
+          '<%= config.dist %>/*.{ico,png}'
231
+        ]
232
+      }
233
+    },
234
+
235
+    // Reads HTML for usemin blocks to enable smart builds that automatically
236
+    // concat, minify and revision files. Creates configurations in memory so
237
+    // additional tasks can operate on them
238
+    useminPrepare: {
239
+      options: {
240
+        dest: '<%= config.dist %>'
241
+      },
242
+      html: '<%= config.app %>/index.html'
243
+    },
244
+
245
+     // Performs rewrites based on rev and the useminPrepare configuration
246
+    usemin: {
247
+      options: {
248
+        assetsDirs: [
249
+          '<%= config.dist %>',
250
+          '<%= config.dist %>/images',
251
+          '<%= config.dist %>/styles'
252
+        ]
253
+      },
254
+      html: ['<%= config.dist %>/{,*/}*.html'],
255
+      css: ['<%= config.dist %>/styles/{,*/}*.css']
256
+    },
257
+
258
+    // The following *-min tasks produce minified files in the dist folder
259
+    imagemin: {
260
+      dist: {
261
+        files: [{
262
+          expand: true,
263
+          cwd: '<%= config.app %>/images',
264
+          src: '{,*/}*.{gif,jpeg,jpg,png}',
265
+          dest: '<%= config.dist %>/images'
266
+        }]
267
+      }
268
+    },
269
+
270
+    svgmin: {
271
+      dist: {
272
+        files: [{
273
+          expand: true,
274
+          cwd: '<%= config.app %>/images',
275
+          src: '{,*/}*.svg',
276
+          dest: '<%= config.dist %>/images'
277
+        }]
278
+      }
279
+    },
280
+
281
+    htmlmin: {
282
+      dist: {
283
+        options: {
284
+          collapseBooleanAttributes: true,
285
+          collapseWhitespace: true,
286
+          conservativeCollapse: true,
287
+          removeAttributeQuotes: true,
288
+          removeCommentsFromCDATA: true,
289
+          removeEmptyAttributes: true,
290
+          removeOptionalTags: true,
291
+          // true would impact styles with attribute selectors
292
+          removeRedundantAttributes: false,
293
+          useShortDoctype: true
294
+        },
295
+        files: [{
296
+          expand: true,
297
+          cwd: '<%= config.dist %>',
298
+          src: '{,*/}*.html',
299
+          dest: '<%= config.dist %>'
300
+        }]
301
+      }
302
+    },
303
+
304
+    // By default, your `index.html`'s <!-- Usemin block --> will take care
305
+    // of minification. These next options are pre-configured if you do not
306
+    // wish to use the Usemin blocks.
307
+    // cssmin: {
308
+    //   dist: {
309
+    //     files: {
310
+    //       '<%= config.dist %>/styles/main.css': [
311
+    //         '.tmp/styles/{,*/}*.css',
312
+    //         '<%= config.app %>/styles/{,*/}*.css'
313
+    //       ]
314
+    //     }
315
+    //   }
316
+    // },
317
+    // uglify: {
318
+    //   dist: {
319
+    //     files: {
320
+    //       '<%= config.dist %>/scripts/scripts.js': [
321
+    //         '<%= config.dist %>/scripts/scripts.js'
322
+    //       ]
323
+    //     }
324
+    //   }
325
+    // },
326
+    // concat: {
327
+    //   dist: {}
328
+    // },
329
+
330
+    // Copies remaining files to places other tasks can use
331
+    copy: {
332
+      dist: {
333
+        files: [{
334
+          expand: true,
335
+          dot: true,
336
+          cwd: '<%= config.app %>',
337
+          dest: '<%= config.dist %>',
338
+          src: [
339
+            '*.{ico,png,txt}',
340
+            'images/{,*/}*.webp',
341
+            '{,*/}*.html',
342
+            'styles/fonts/{,*/}*.*'
343
+          ]
344
+        }, {
345
+          expand: true,
346
+          dot: true,
347
+          cwd: 'bower_components/bootstrap/dist',
348
+          src: 'fonts/*',
349
+          dest: '<%= config.dist %>'
350
+        }]
351
+      }
352
+    },
353
+
354
+    // Run some tasks in parallel to speed up build process
355
+    concurrent: {
356
+      server: [
357
+        'less:server'
358
+      ],
359
+      test: [
360
+      ],
361
+      dist: [
362
+        'less:dist',
363
+        'imagemin',
364
+        'svgmin'
365
+      ]
366
+    },
367
+    surge: {
368
+      'portfolio-go': {
369
+        options: {
370
+          project: 'dist/',
371
+          domain: 'portfolio-go.surge.sh'
372
+        }
373
+      }
374
+    }
375
+  });
376
+
377
+  grunt.loadNpmTasks('grunt-surge');
378
+
379
+  grunt.registerTask('serve', 'start the server and preview your app, --allow-remote for remote access', function (target) {
380
+    if (grunt.option('allow-remote')) {
381
+      grunt.config.set('connect.options.hostname', '0.0.0.0');
382
+    }
383
+    if (target === 'dist') {
384
+      return grunt.task.run(['build', 'connect:dist:keepalive']);
385
+    }
386
+
387
+    grunt.task.run([
388
+      'clean:server',
389
+      'wiredep',
390
+      'concurrent:server',
391
+      'autoprefixer',
392
+      'connect:livereload',
393
+      'watch'
394
+    ]);
395
+  });
396
+
397
+  grunt.registerTask('server', function (target) {
398
+    grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
399
+    grunt.task.run([target ? ('serve:' + target) : 'serve']);
400
+  });
401
+
402
+  grunt.registerTask('test', function (target) {
403
+    if (target !== 'watch') {
404
+      grunt.task.run([
405
+        'clean:server',
406
+        'concurrent:test',
407
+        'autoprefixer'
408
+      ]);
409
+    }
410
+
411
+    grunt.task.run([
412
+      'connect:test',
413
+      'mocha'
414
+    ]);
415
+  });
416
+
417
+  grunt.registerTask('build', [
418
+    'clean:dist',
419
+    'wiredep',
420
+    'useminPrepare',
421
+    'concurrent:dist',
422
+    'autoprefixer',
423
+    'concat',
424
+    'cssmin',
425
+    'uglify',
426
+    'copy:dist',
427
+    'filerev',
428
+    'usemin',
429
+    'htmlmin'
430
+  ]);
431
+
432
+  grunt.registerTask('default', [
433
+    'newer:jshint',
434
+    'test',
435
+    'build'
436
+  ]);
437
+  
438
+  grunt.registerTask('deploy', ['build', 'surge']);
439
+   
440
+};

BIN
app/favicon.ico


+ 84 - 0
app/index.html

@@ -0,0 +1,84 @@
1
+<!doctype html>
2
+<html lang="">
3
+  <head>
4
+    <meta charset="utf-8">
5
+    <title>portfolio go</title>
6
+    <meta name="description" content="">
7
+    <meta name="viewport" content="width=device-width">
8
+    <link rel="shortcut icon" href="/favicon.ico">
9
+    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
10
+    <!-- build:css(.) styles/vendor.css -->
11
+    <!-- bower:css -->
12
+    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
13
+    <!-- endbower -->
14
+    <!-- endbuild -->
15
+    <!-- build:css(.tmp) styles/main.css -->
16
+    <link rel="stylesheet" href="styles/main.css">
17
+    <!-- endbuild -->
18
+  </head>
19
+  <body>
20
+    <!--[if lt IE 10]>
21
+      <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
22
+    <![endif]-->
23
+
24
+
25
+    <div class="container">
26
+      <div class="header">
27
+        <ul class="nav nav-pills pull-right">
28
+          <li class="active"><a href="#">Home</a></li>
29
+          <li><a href="#">About</a></li>
30
+          <li><a href="#">Contact</a></li>
31
+        </ul>
32
+        <h3 class="text-muted">portfolio go</h3>
33
+      </div>
34
+
35
+      <div class="jumbotron">
36
+        <h1>'Allo, 'Allo!</h1>
37
+        <p class="lead">Always a pleasure scaffolding your apps.</p>
38
+        <p><a class="btn btn-lg btn-success" href="#">Splendid! <span class="glyphicon glyphicon-ok"></span></a></p>
39
+      </div>
40
+
41
+      <div class="row marketing">
42
+        <div class="col-lg-6">
43
+          <h4>HTML5 Boilerplate</h4>
44
+          <p>HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.</p>
45
+
46
+          <h4>LESS</h4>
47
+          <p>LESS extends CSS with dynamic behavior such as variables, mixins, operations and functions.</p>
48
+
49
+
50
+          <h4>Bootstrap</h4>
51
+          <p>Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>
52
+
53
+
54
+        </div>
55
+      </div>
56
+
57
+      <div class="footer">
58
+        <p><span class="glyphicon glyphicon-heart"></span> from the Yeoman team</p>
59
+      </div>
60
+
61
+    </div>
62
+
63
+
64
+    <!-- build:js(.) scripts/vendor.js -->
65
+    <!-- bower:js -->
66
+    <script src="bower_components/jquery/dist/jquery.js"></script>
67
+    <!-- endbower -->
68
+    <!-- endbuild -->
69
+
70
+    <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
71
+    <script>
72
+      (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
73
+      function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
74
+      e=o.createElement(i);r=o.getElementsByTagName(i)[0];
75
+      e.src='//www.google-analytics.com/analytics.js';
76
+      r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
77
+      ga('create','UA-XXXXX-X');ga('send','pageview');
78
+    </script>
79
+
80
+        <!-- build:js({app,.tmp}) scripts/main.js -->
81
+        <script src="scripts/main.js"></script>
82
+        <!-- endbuild -->
83
+</body>
84
+</html>

+ 4 - 0
app/robots.txt

@@ -0,0 +1,4 @@
1
+# robotstxt.org/
2
+
3
+User-agent: *
4
+Disallow:

+ 2 - 0
app/scripts/main.js

@@ -0,0 +1,2 @@
1
+// jshint devel:true
2
+console.log('\'Allo \'Allo!');

+ 89 - 0
app/styles/main.css

@@ -0,0 +1,89 @@
1
+.browsehappy {
2
+  margin: 0.2em 0;
3
+  background: #ccc;
4
+  color: #000;
5
+  padding: 0.2em 0;
6
+}
7
+
8
+/* Space out content a bit */
9
+body {
10
+  padding-top: 20px;
11
+  padding-bottom: 20px;
12
+}
13
+
14
+/* Everything but the jumbotron gets side spacing for mobile first views */
15
+.header,
16
+.marketing,
17
+.footer {
18
+  padding-left: 15px;
19
+  padding-right: 15px;
20
+}
21
+
22
+/* Custom page header */
23
+.header {
24
+  border-bottom: 1px solid #e5e5e5;
25
+}
26
+
27
+/* Make the masthead heading the same height as the navigation */
28
+.header h3 {
29
+  margin-top: 0;
30
+  margin-bottom: 0;
31
+  line-height: 40px;
32
+  padding-bottom: 19px;
33
+}
34
+
35
+/* Custom page footer */
36
+.footer {
37
+  padding-top: 19px;
38
+  color: #777;
39
+  border-top: 1px solid #e5e5e5;
40
+}
41
+
42
+.container-narrow > hr {
43
+  margin: 30px 0;
44
+}
45
+
46
+/* Main marketing message and sign up button */
47
+.jumbotron {
48
+  text-align: center;
49
+  border-bottom: 1px solid #e5e5e5;
50
+}
51
+
52
+.jumbotron .btn {
53
+  font-size: 21px;
54
+  padding: 14px 24px;
55
+}
56
+
57
+/* Supporting marketing content */
58
+.marketing {
59
+  margin: 40px 0;
60
+}
61
+
62
+.marketing p + h4 {
63
+  margin-top: 28px;
64
+}
65
+
66
+/* Responsive: Portrait tablets and up */
67
+@media screen and (min-width: 768px) {
68
+  .container {
69
+    max-width: 730px;
70
+  }
71
+
72
+  /* Remove the padding we set earlier */
73
+  .header,
74
+  .marketing,
75
+  .footer {
76
+    padding-left: 0;
77
+    padding-right: 0;
78
+  }
79
+
80
+  /* Space out the masthead */
81
+  .header {
82
+    margin-bottom: 30px;
83
+  }
84
+
85
+  /* Remove the bottom border on the jumbotron for visual effect */
86
+  .jumbotron {
87
+    border-bottom: 0;
88
+  }
89
+}

+ 7 - 0
bower.json

@@ -0,0 +1,7 @@
1
+{
2
+  "name": "portfolio-go",
3
+  "private": true,
4
+  "dependencies": {
5
+    "bootstrap": "~3.2.0"
6
+  }
7
+}

+ 32 - 0
package.json

@@ -0,0 +1,32 @@
1
+{
2
+  "name": "portfolio-go",
3
+  "devDependencies": {
4
+    "grunt": "^0.4.5",
5
+    "grunt-autoprefixer": "^1.0.0",
6
+    "grunt-concurrent": "^0.5.0",
7
+    "grunt-contrib-clean": "^0.6.0",
8
+    "grunt-contrib-concat": "^0.5.0",
9
+    "grunt-contrib-connect": "^0.8.0",
10
+    "grunt-contrib-copy": "^0.5.0",
11
+    "grunt-contrib-cssmin": "^0.10.0",
12
+    "grunt-contrib-htmlmin": "^0.3.0",
13
+    "grunt-contrib-imagemin": "^0.8.0",
14
+    "grunt-contrib-jshint": "^0.10.0",
15
+    "grunt-contrib-less": "^1.0.0",
16
+    "grunt-contrib-uglify": "^0.5.1",
17
+    "grunt-contrib-watch": "^0.6.1",
18
+    "grunt-filerev": "^2.2.0",
19
+    "grunt-mocha": "^0.4.10",
20
+    "grunt-newer": "^0.7.0",
21
+    "grunt-surge": "^0.4.3",
22
+    "grunt-svgmin": "^0.4.0",
23
+    "grunt-usemin": "^2.3.0",
24
+    "grunt-wiredep": "^1.7.0",
25
+    "jshint-stylish": "^0.4.0",
26
+    "load-grunt-tasks": "^0.4.0",
27
+    "time-grunt": "^0.4.0"
28
+  },
29
+  "engines": {
30
+    "node": ">=0.10.0"
31
+  }
32
+}

+ 3 - 0
test/.bowerrc

@@ -0,0 +1,3 @@
1
+{
2
+    "directory": "bower_components"
3
+}

+ 9 - 0
test/bower.json

@@ -0,0 +1,9 @@
1
+{
2
+  "name": "portfolio-go",
3
+  "private": true,
4
+  "dependencies": {
5
+    "chai": "~1.8.0",
6
+    "mocha": "~1.14.0"
7
+  },
8
+  "devDependencies": {}
9
+}

+ 26 - 0
test/index.html

@@ -0,0 +1,26 @@
1
+<!doctype html>
2
+<html>
3
+<head>
4
+    <meta charset="utf-8">
5
+    <title>Mocha Spec Runner</title>
6
+    <link rel="stylesheet" href="bower_components/mocha/mocha.css">
7
+</head>
8
+<body>
9
+    <div id="mocha"></div>
10
+    <script src="bower_components/mocha/mocha.js"></script>
11
+    <script>mocha.setup('bdd')</script>
12
+    <script src="bower_components/chai/chai.js"></script>
13
+    <script>
14
+        var assert = chai.assert;
15
+        var expect = chai.expect;
16
+        var should = chai.should();
17
+    </script>
18
+
19
+    <!-- include source files here... -->
20
+
21
+    <!-- include spec files here... -->
22
+    <script src="spec/test.js"></script>
23
+
24
+    <script>mocha.run()</script>
25
+</body>
26
+</html>

+ 13 - 0
test/spec/test.js

@@ -0,0 +1,13 @@
1
+/* global describe, it */
2
+
3
+(function () {
4
+  'use strict';
5
+
6
+  describe('Give it some context', function () {
7
+    describe('maybe a bit more context here', function () {
8
+      it('should run here few assertions', function () {
9
+
10
+      });
11
+    });
12
+  });
13
+})();