Skip to content

Commit

Permalink
add unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
thecodeflayer committed Jul 19, 2020
1 parent 4fac366 commit 16c4f44
Show file tree
Hide file tree
Showing 11 changed files with 936 additions and 29 deletions.
15 changes: 0 additions & 15 deletions .editorconfig

This file was deleted.

1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
.eslintrc.js
karma.conf.js
11 changes: 7 additions & 4 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@ module.exports = {
"parserOptions": {
"sourceType": "module"
},
"plugins": ["nativescript","@typescript-eslint"],
"plugins": [
"nativescript",
"@typescript-eslint",
],
"rules": {
'indent': [
'error',
2
'@typescript-eslint/indent': [
'error',
2
],
'quotes': [
'error',
Expand Down
1 change: 1 addition & 0 deletions app/App_Resources/Android/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">

<activity
Expand Down
19 changes: 19 additions & 0 deletions app/tests/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module.exports = {
"env": {"jasmine": true},
"extends": [
"plugin:jasmine/recommended"],
"plugins": [
"jasmine"
],
"rules": {
'quotes': [
'error',
'single'
],
'semi': [
'error',
'always'
],
'space-before-function-paren': ['error', 'never'],
}
};
33 changes: 33 additions & 0 deletions app/tests/default-objects/DefaultDungeons.spec.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 36 additions & 0 deletions app/tests/default-objects/DefaultItems.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import {DefaultItems, DefaultItemsData} from '~/default-objects/DefaultItems';

describe('DefaultItems', () => {
it('should create new DefaultItems object', () => {
const defaultItems = new DefaultItems();

expect(defaultItems.data).toBeDefined();
});

it('should load items from JSON', () => {
const json = {'version':'0.0.1', 'data':{'bow':0, 'boomerang':0, 'hookshot':false, 'bombs':false, 'powder':true, 'mushroom':false, 'firerod':false, 'icerod':false, 'bombos':false, 'ether':false, 'quake':false, 'shovel':false, 'lantern':false, 'hammer':false, 'flute':false, 'net':false, 'book':false, 'moonpearl':false, 'jar':0, 'redcane':true, 'bluecane':true, 'cape':false, 'mirror':false, 'glove':2, 'boots':false, 'flippers':false, 'halfmagic':false, 'sword':3, 'shield':0, 'tunic':1}};
const items = DefaultItems.fromJSON(JSON.stringify(json));

expect(items.data.bow).toEqual(0);
expect(items.data.tunic).toEqual(1);
});
it('should load items from JSON even if json is incomplete', () => {
const json = {'version':'0.0.1', 'data':{'bow':2}};
const items = DefaultItems.fromJSON(JSON.stringify(json));

expect(items.data.bow).toEqual((2));
expect(items.data.tunic).toEqual(0);
});
it('should make a copy', () => {
const items1 = new DefaultItemsData();
const items2 = new DefaultItemsData();
const items3 = items2.getCopy();
items2.bow = 1;
items3.bow = 2;

expect(items1.bow).toEqual(0);
expect(items2.bow).toEqual(1);
expect(items3.bow).toEqual(2);

});
});
14 changes: 7 additions & 7 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
module.exports = function (api) {
api.cache(true)
module.exports = function(api) {
api.cache(true);

return {
presets: [['@babel/env', { targets: { esmodules: true } }]],
plugins: [['@babel/plugin-proposal-decorators',
{
legacy: true
}]
{
legacy: true
}]

]
}
}
};
};
109 changes: 109 additions & 0 deletions karma.conf.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
module.exports = function (config) {
const options = {

// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',


// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],


// list of files / patterns to load in the browser
files: ['app/tests/**/*.js'],


// list of files to exclude
exclude: [
],


// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
},


// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress'],


// web server port
port: 9876,


// enable / disable colors in the output (reporters and logs)
colors: true,


// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,


// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,


// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: [],

customLaunchers: {
android: {
base: 'NS',
platform: 'android'
},
ios: {
base: 'NS',
platform: 'ios'
},
ios_simulator: {
base: 'NS',
platform: 'ios',
arguments: ['--emulator']
}
},

// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: false
};

setWebpackPreprocessor(config, options);
setWebpack(config, options);

config.set(options);
};

function setWebpackPreprocessor(config, options) {
if (config && config.bundle) {
if (!options.preprocessors) {
options.preprocessors = {};
}

options.files.forEach(file => {
if (!options.preprocessors[file]) {
options.preprocessors[file] = [];
}
options.preprocessors[file].push('webpack');
});
}
}

function setWebpack(config, options) {
if (config && config.bundle) {
const env = {};
env[config.platform] = true;
env.sourceMap = config.debugBrk;
env.appPath = config.appPath;
options.webpack = require('./webpack.config')(env);
delete options.webpack.entry;
delete options.webpack.output.libraryTarget;
const invalidPluginsForUnitTesting = ['GenerateBundleStarterPlugin', 'GenerateNativeScriptEntryPointsPlugin'];
options.webpack.plugins = options.webpack.plugins.filter(p => !invalidPluginsForUnitTesting.includes(p.constructor.name));
}
}
Loading

0 comments on commit 16c4f44

Please sign in to comment.