clean the test-suite folder. create necessary files in dev env
--- a/.hgignore Wed Mar 12 17:19:23 2014 +0100
+++ b/.hgignore Fri Mar 14 03:08:58 2014 +0100
@@ -19,3 +19,8 @@
dev/custom.yaml
src/cm/scripts/test-suite/node_modules
src/cm/scripts/test-suite/workspace.info*.js
+src/cm/scripts/test-suite/clean-testserver.sh
+src/cm/scripts/test-suite/karma.conf.full.js
+src/cm/scripts/test-suite/start-test-suite-full.sh
+src/cm/scripts/test-suite/start-testserver.sh
+
--- a/dev/Vagrantfile Wed Mar 12 17:19:23 2014 +0100
+++ b/dev/Vagrantfile Fri Mar 14 03:08:58 2014 +0100
@@ -1,6 +1,13 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
+require 'yaml'
+
+custom_file_path = File.join(__dir__, 'custom.yaml')
+
+context = File.exist?(custom_file_path)?YAML::load_file(custom_file_path):{}
+
+ROOT_PATH = context.fetch("root_path","../")
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
@@ -24,7 +31,7 @@
# Create a private network, which allows host-only access to the machine
# using a specific IP.
- config.vm.network :private_network, ip: (ENV['VM_IP'] || "172.16.1.2")
+ config.vm.network :private_network, ip: (ENV['VM_IP'] || context['vm_ip'] || "172.16.1.2")
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
@@ -39,10 +46,9 @@
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
- config.vm.synced_folder "../", "/srv/comt"
+ config.vm.synced_folder ROOT_PATH, "/srv/comt"
- #vmname = "coment_dev_5311da30" #"coment_dev_"+Time.now.getutc.to_f.to_int.to_s(16)
- vmname = "coment_dev"
+ vmname = (ENV['VM_NAME'] || context['vm_name'] || "coment_dev")
config.vm.define :"#{vmname}" do |coment_dev|
end
@@ -86,6 +92,9 @@
puppet.manifest_file = "site.pp"
puppet.module_path = "modules"
puppet.options = "--hiera_config /vagrant/hiera.yaml "
+ puppet.facter = {
+ "vagrant_base_path" => File.dirname(__FILE__)
+ }
# puppet.options = "--debug --verbose --hiera_config /vagrant/hiera.yaml "
end
--- a/dev/clean_dev.sh Wed Mar 12 17:19:23 2014 +0100
+++ b/dev/clean_dev.sh Fri Mar 14 03:08:58 2014 +0100
@@ -8,7 +8,11 @@
pushd "$ROOTPATH" > /dev/null
-rm -rfv .installed.cfg .mr.developer.cfg parts/ eggs/ develop-eggs/ bin/ src/cm/settings_local.py src/cm/scripts/test-suite/workspace.info*.js
+rm -rfv .installed.cfg .mr.developer.cfg parts/ eggs/ develop-eggs/ bin/ \
+ src/cm/settings_local.py src/cm/scripts/test-suite/workspace.info*.js \
+ src/cm/scripts/test-suite/{clean-testserver.sh,karma.conf.full.js} \
+ src/cm/scripts/test-suite/{start-test-suite-full.sh,start-testserver.sh}
+
find . -name '*.pyc' -or -name '*.egg-info' | xargs rm -rvf
popd > /dev/null
--- a/dev/custom.yaml.tmpl Wed Mar 12 17:19:23 2014 +0100
+++ b/dev/custom.yaml.tmpl Fri Mar 14 03:08:58 2014 +0100
@@ -1,4 +1,8 @@
---
+root_path : ../
+vm_ip : 172.16.1.2
+vm_name : coment_dev
+
sysconfig::params::db_name : coment_custom
sysconfig::params::db_user : coment_user_cutom
sysconfig::params::db_pw : coment_pw_custom
--- a/dev/manifests/site.pp Wed Mar 12 17:19:23 2014 +0100
+++ b/dev/manifests/site.pp Fri Mar 14 03:08:58 2014 +0100
@@ -19,5 +19,8 @@
# write django_init
class { 'sysconfig::django_init': require => Class['sysconfig::config'] }
+# config testserver_init
+class { 'sysconfig::testserver_init': vagrant_base_path => $vagrant_base_path, require => Class['sysconfig::config'] }
+
# deploy
class { 'sysconfig::deploy': require => [ Class['sysconfig::django_init'], Class['sysconfig::nginx'], Class['sysconfig::postgresql'] ] }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/modules/sysconfig/files/clean-testserver.sh Fri Mar 14 03:08:58 2014 +0100
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+PID=$(cat /tmp/testserver.pid|cut -d"|" -f1)
+OUTFILE=$(cat /tmp/testserver.pid|cut -d"|" -f2)
+
+echo "Kill test server pid $PID"
+kill $PID
+
+echo "Test server log:"
+echo "================================================================================"
+cat "$OUTFILE"
+echo "================================================================================"
+
+echo "Clean testserver output"
+rm "$OUTFILE"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/modules/sysconfig/files/karma.conf.full.js Fri Mar 14 03:08:58 2014 +0100
@@ -0,0 +1,52 @@
+// Karma configuration
+// Generated on Wed Jan 29 2014 15:32:16 GMT+0100 (CET)
+
+
+// SID: get WORKSPACE_URL configuration from one single file to customize
+var w = require ('./workspace.info.full.js');
+
+module.exports = function(config) {
+ config.set({
+ // list of files or patterns to load in the browser, from current directory
+ files: [
+ {pattern: 'tests/**/*.js', included: true}
+ ],
+ // list of files to exclude
+ exclude: [
+ ],
+ // Start these browsers, currently available:
+ // - Firefox ; Safari (only Mac; run `npm install karma-safari-launcher` first)
+ // - Chrome ; ChromeCanary ; Opera (run `npm install karma-opera-launcher` first)
+ // - PhantomJS ; IE (only Windows; run `npm install karma-ie-launcher` first)
+ browsers: w.BROWSERS,
+ // frameworks to use. SID: choosen mocha, added karma-e2e-dsl (end-to-end testing)
+ frameworks: ['mocha', 'karma-e2e-dsl'],
+ // SID: Karma will start and run somewhere else than '/', to allow proxying '/'
+ urlRoot: '/karma/',
+ // SID: directive added on karma-e2e-dsl purpose. Map of path-proxy pairs.
+ proxies: {
+ '/': w.WORKSPACE_URL
+ },
+ client: {
+ mocha: {
+ ui: 'tdd'
+ },
+ w: w // SID: exports the variable in the test execution browser window
+ },
+ // test results reporter to use : 'dots', 'progress', 'junit', 'growl', 'coverage'
+ reporters: ['progress'],
+ // web server port
+ port: 9876,
+ // enable / disable colors in the output (reporters and logs)
+ colors: true,
+ // level of logging : config.LOG_DISABLE || _ERROR || _WARN || _INFO || _DEBUG
+ logLevel: config.LOG_INFO || config.LOG_DEBUG,
+ // enable / disable watching file and executing tests whenever any file changes
+ autoWatch: false,
+ // If browser does not capture in given timeout [ms], kill it
+ captureTimeout: 20000,
+ // Continuous Integration mode : if true, it capture browsers, run tests and exit
+ // singleRun: false
+ singleRun: true,
+ });
+};
--- a/dev/modules/sysconfig/manifests/django_init.pp Wed Mar 12 17:19:23 2014 +0100
+++ b/dev/modules/sysconfig/manifests/django_init.pp Fri Mar 14 03:08:58 2014 +0100
@@ -1,17 +1,9 @@
class sysconfig::django_init (
- $superuser_name = hiera('sysconfig::params::superuser_name' ,$sysconfig::params::superuser_name ),
- $superuser_pw = hiera('sysconfig::params::superuser_pw' ,$sysconfig::params::superuser_pw ),
- $user_edit_name = hiera('sysconfig::params::user_edit_name' ,$sysconfig::params::user_edit_name ),
- $user_edit_pw = hiera('sysconfig::params::user_edit_pw' ,$sysconfig::params::user_edit_pw ),
- $user_com_name = hiera('sysconfig::params::user_com_name' ,$sysconfig::params::user_com_name ),
- $user_com_pw = hiera('sysconfig::params::user_com_pw' ,$sysconfig::params::user_com_pw ),
- $user_observ_name = hiera('sysconfig::params::user_observ_name' ,$sysconfig::params::user_observ_name ),
- $user_observ_pw = hiera('sysconfig::params::user_observ_pw' ,$sysconfig::params::user_observ_pw ),
- $testserver_port = hiera('sysconfig::params::testserver_port' ,$sysconfig::params::testserver_port )
-
+ $superuser_name = hiera('sysconfig::params::superuser_name', $sysconfig::params::superuser_name ),
+ $superuser_pw = hiera('sysconfig::params::superuser_pw' , $sysconfig::params::superuser_pw )
) inherits sysconfig::params {
- notify {'django_init': name => "\$superuser_name : ${superuser_name}, \$superuser_pw : ${superuser_pw}", withpath => true }->
+ notify {'django_init': name => "django init \$superuser_name : ${superuser_name}, \$superuser_pw : ${superuser_pw}", withpath => true }->
exec { 'syncdb':
command => '/srv/comt/bin/django syncdb --noinput --migrate',
@@ -32,24 +24,4 @@
require => Exec['syncdb']
}
- file { 'karma_workspace_info':
- ensure => 'present',
- path => "/srv/comt/src/cm/scripts/test-suite/workspace.info.js",
- replace => 'no',
- owner => 'vagrant',
- group => 'vagrant',
- mode => 644,
- content => template('sysconfig/workspace.info.js.erb','sysconfig/url.workspace.info.js.erb'),
- }
-
- file { 'karma_workspace_info_full':
- ensure => 'present',
- path => "/srv/comt/src/cm/scripts/test-suite/workspace.info.full.js",
- replace => 'no',
- owner => 'vagrant',
- group => 'vagrant',
- mode => 644,
- content => template('sysconfig/workspace.info.js.erb','sysconfig/url.test.workspace.info.js.erb'),
- }
-
}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/modules/sysconfig/manifests/testserver_init.pp Fri Mar 14 03:08:58 2014 +0100
@@ -0,0 +1,77 @@
+class sysconfig::testserver_init (
+ $superuser_name = hiera('sysconfig::params::superuser_name' ,$sysconfig::params::superuser_name ),
+ $superuser_pw = hiera('sysconfig::params::superuser_pw' ,$sysconfig::params::superuser_pw ),
+ $user_edit_name = hiera('sysconfig::params::user_edit_name' ,$sysconfig::params::user_edit_name ),
+ $user_edit_pw = hiera('sysconfig::params::user_edit_pw' ,$sysconfig::params::user_edit_pw ),
+ $user_com_name = hiera('sysconfig::params::user_com_name' ,$sysconfig::params::user_com_name ),
+ $user_com_pw = hiera('sysconfig::params::user_com_pw' ,$sysconfig::params::user_com_pw ),
+ $user_observ_name = hiera('sysconfig::params::user_observ_name' ,$sysconfig::params::user_observ_name ),
+ $user_observ_pw = hiera('sysconfig::params::user_observ_pw' ,$sysconfig::params::user_observ_pw ),
+ $testserver_port = hiera('sysconfig::params::testserver_port' ,$sysconfig::params::testserver_port ),
+ $vagrant_base_path
+
+) inherits sysconfig::params {
+
+ notify {'testserver_init': name => "testserver init : \$superuser_name : ${superuser_name}, \$superuser_pw : ${superuser_pw}", withpath => true }->
+
+ file { 'karma_workspace_info':
+ ensure => 'present',
+ path => "/srv/comt/src/cm/scripts/test-suite/workspace.info.js",
+ replace => 'no',
+ owner => 'vagrant',
+ group => 'vagrant',
+ mode => 644,
+ content => template('sysconfig/workspace.info.js.erb','sysconfig/url.workspace.info.js.erb'),
+ }
+
+ file { 'karma_workspace_info_full':
+ ensure => 'present',
+ path => "/srv/comt/src/cm/scripts/test-suite/workspace.info.full.js",
+ replace => 'no',
+ owner => 'vagrant',
+ group => 'vagrant',
+ mode => 644,
+ content => template('sysconfig/workspace.info.js.erb','sysconfig/url.test.workspace.info.js.erb'),
+ }
+
+ file { 'clean-testserver.sh':
+ ensure => 'present',
+ path => "/srv/comt/src/cm/scripts/test-suite/clean-testserver.sh",
+ replace => 'no',
+ owner => 'vagrant',
+ group => 'vagrant',
+ mode => 755,
+ source => 'puppet:///modules/sysconfig/clean-testserver.sh'
+ }
+
+ file { 'karma.conf.full.js':
+ ensure => 'present',
+ path => "/srv/comt/src/cm/scripts/test-suite/karma.conf.full.js",
+ replace => 'no',
+ owner => 'vagrant',
+ group => 'vagrant',
+ mode => 644,
+ source => 'puppet:///modules/sysconfig/karma.conf.full.js'
+ }
+
+ file { 'start-test-suite-full.sh':
+ ensure => 'present',
+ path => "/srv/comt/src/cm/scripts/test-suite/start-test-suite-full.sh",
+ replace => 'no',
+ owner => 'vagrant',
+ group => 'vagrant',
+ mode => 755,
+ content => template('sysconfig/start-test-suite-full.sh.erb'),
+ }
+
+ file { 'start-testserver.sh':
+ ensure => 'present',
+ path => "/srv/comt/src/cm/scripts/test-suite/start-testserver.sh",
+ replace => 'no',
+ owner => 'vagrant',
+ group => 'vagrant',
+ mode => 755,
+ content => template('sysconfig/start-testserver.sh.erb'),
+ }
+
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/modules/sysconfig/templates/start-test-suite-full.sh.erb Fri Mar 14 03:08:58 2014 +0100
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+echo "---------------------"
+echo "Starting test server"
+
+DEV_FOLDER="<%= @vagrant_base_path %>"
+
+pushd "$DEV_FOLDER" > /dev/null
+vagrant ssh -c "/srv/comt/src/cm/scripts/test-suite/start-testserver.sh"
+popd > /dev/null
+
+CONNECTION_TIMEOUT=10
+TESTSERVER_START_TIMEOUT=15
+TESTSERVER_LOOP_WAIT=5
+TESTSERVER_WAIT_LOOP_NB=10
+
+SERVER_IP=`grep WORKSPACE_URL workspace.info.full.js | tail -n -1 | cut -d: -f2 | tr -d " //"`
+SERVER_PORT=`grep WORKSPACE_URL ./workspace.info.full.js | tail -n -1 | cut -d: -f3 | tr -d " ');"`
+
+if [[ -x `which nc` ]]; then
+ SERVER_TEST_CMD="nc -G $CONNECTION_TIMEOUT -z $SERVER_IP $SERVER_PORT"
+elif [[ -x `which curl` ]]; then
+ SERVER_TEST_CMD="curl -m $CONNECTION_TIMEOUT --output /dev/null --silent --head --fail http://$SERVER_IP:$SERVER_PORT"
+elif [[ -x `which wget` ]]; then
+ SERVER_TEST_CMD="wget --timeout=$CONNECTION_TIMEOUT -q --spider http://$SERVER_IP:$SERVER_PORT"
+fi
+echo "$SERVER_TEST_CMD"
+
+echo "---------------------"
+if [[ -z "$SERVER_TEST_CMD" ]]; then
+ echo "Waiting $TESTSERVER_START_TIMEOUT seconds to let test server start"
+ sleep $TESTSERVER_START_TIMEOUT
+else
+ for i in $(seq 1 $TESTSERVER_WAIT_LOOP_NB); do
+ echo "waiting $TESTSERVER_LOOP_WAIT seconds to let the test server $SERVER_IP:$SERVER_PORT start"
+ sleep $TESTSERVER_LOOP_WAIT
+ if $SERVER_TEST_CMD; then
+ break
+ fi
+ done
+ if [ $i -eq $TESTSERVER_WAIT_LOOP_NB ]; then
+ echo "could not start test server $SERVER_IP:$SERVER_PORT"
+ exit 1
+ fi
+fi
+
+echo "---------------------"
+echo "Starting karma tests"
+. ./start-test-suite.sh ./karma.conf.full.js $@
+
+echo "---------------------"
+echo "stopping test server + output test server logs"
+
+pushd "$DEV_FOLDER" > /dev/null
+vagrant ssh -c "/srv/comt/src/cm/scripts/test-suite/clean-testserver.sh"
+popd /dev/null
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/modules/sysconfig/templates/start-testserver.sh.erb Fri Mar 14 03:08:58 2014 +0100
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+
+ROOTPATH="/srv/comt"
+TMPFILE=`mktemp`
+
+pushd "$ROOTPATH" > /dev/null
+
+nohup bin/django testserver --noinput --addrport=0.0.0.0:<%= @testserver_port %> initial_data roles_generic test_suite > $TMPFILE 2>&1 &
+echo "$!|$TMPFILE" > /tmp/testserver.pid
+
+cat /tmp/testserver.pid
+
+popd > /dev/null
--- a/src/cm/scripts/test-suite/clean-testserver.sh Wed Mar 12 17:19:23 2014 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-PID=$(cat /tmp/testserver.pid|cut -d"|" -f1)
-OUTFILE=$(cat /tmp/testserver.pid|cut -d"|" -f2)
-
-echo "Kill test server pid $PID"
-kill $PID
-
-echo "Test server log:"
-echo "================================================================================"
-cat "$OUTFILE"
-echo "================================================================================"
-
-echo "Clean testserver output"
-rm "$OUTFILE"
-
--- a/src/cm/scripts/test-suite/karma.conf.full.js Wed Mar 12 17:19:23 2014 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-// Karma configuration
-// Generated on Wed Jan 29 2014 15:32:16 GMT+0100 (CET)
-
-
-// SID: get WORKSPACE_URL configuration from one single file to customize
-var w = require ('./workspace.info.full.js');
-
-module.exports = function(config) {
- config.set({
- // list of files or patterns to load in the browser, from current directory
- files: [
- {pattern: 'tests/**/*.js', included: true}
- ],
- // list of files to exclude
- exclude: [
- ],
- // Start these browsers, currently available:
- // - Firefox ; Safari (only Mac; run `npm install karma-safari-launcher` first)
- // - Chrome ; ChromeCanary ; Opera (run `npm install karma-opera-launcher` first)
- // - PhantomJS ; IE (only Windows; run `npm install karma-ie-launcher` first)
- browsers: w.BROWSERS,
- // frameworks to use. SID: choosen mocha, added karma-e2e-dsl (end-to-end testing)
- frameworks: ['mocha', 'karma-e2e-dsl'],
- // SID: Karma will start and run somewhere else than '/', to allow proxying '/'
- urlRoot: '/karma/',
- // SID: directive added on karma-e2e-dsl purpose. Map of path-proxy pairs.
- proxies: {
- '/': w.WORKSPACE_URL
- },
- client: {
- mocha: {
- ui: 'tdd'
- },
- w: w // SID: exports the variable in the test execution browser window
- },
- // test results reporter to use : 'dots', 'progress', 'junit', 'growl', 'coverage'
- reporters: ['progress'],
- // web server port
- port: 9876,
- // enable / disable colors in the output (reporters and logs)
- colors: true,
- // level of logging : config.LOG_DISABLE || _ERROR || _WARN || _INFO || _DEBUG
- logLevel: config.LOG_INFO || config.LOG_DEBUG,
- // enable / disable watching file and executing tests whenever any file changes
- autoWatch: false,
- // If browser does not capture in given timeout [ms], kill it
- captureTimeout: 20000,
- // Continuous Integration mode : if true, it capture browsers, run tests and exit
- // singleRun: false
- singleRun: true,
- });
-};
--- a/src/cm/scripts/test-suite/start-test-suite-full.sh Wed Mar 12 17:19:23 2014 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-#!/bin/bash
-
-echo "---------------------"
-echo "Starting test server"
-
-pushd ../../../../dev > /dev/null
-vagrant ssh -c "/srv/comt/src/cm/scripts/test-suite/start-testserver.sh"
-popd > /dev/null
-
-SERVER_IP=`grep WORKSPACE_URL workspace.info.full.js | tail -n -1 | cut -d: -f2 | tr -d " //"`
-SERVER_PORT=`grep WORKSPACE_URL ./workspace.info.full.js | tail -n -1 | cut -d: -f3 | tr -d " ');"`
-
-if [[ -x `which nc` ]]; then
- SERVER_TEST_CMD="nc -z $SERVER_IP $SERVER_PORT"
-elif [[ -x `which curl` ]]; then
- SERVER_TEST_CMD="curl --output /dev/null --silent --head --fail http://$SERVER_IP:$SERVER_PORT"
-elif [[ -x `which wget` ]]; then
- SERVER_TEST_CMD="wget -q --spider http://$SERVER_IP:$SERVER_PORT"
-fi
-echo "$SERVER_TEST_CMD"
-
-echo "---------------------"
-if [[ -z "$SERVER_TEST_CMD" ]]; then
- echo "Waiting 10 seconds to let test server start"
- sleep 10
-else
- for i in {1..10}; do
- echo "waiting 5 seconds to let the test server $SERVER_IP:$SERVER_PORT start"
- sleep 5
- if $SERVER_TEST_CMD; then
- break
- fi
- done
- if [ $i -eq 10 ]; then
- echo "could not start test server $SERVER_IP:$SERVER_PORT"
- exit 1
- fi
-fi
-
-echo "---------------------"
-echo "Starting karma tests"
-. ./start-test-suite.sh ./karma.conf.full.js $@
-
-echo "---------------------"
-echo "stopping test server + output test server logs"
-
-pushd ../../../../dev > /dev/null
-vagrant ssh -c "/srv/comt/src/cm/scripts/test-suite/clean-testserver.sh"
-popd /dev/null
-
-
--- a/src/cm/scripts/test-suite/start-testserver.sh Wed Mar 12 17:19:23 2014 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-pushd `dirname $0` > /dev/null
-SCRIPTPATH=`pwd -P`
-popd > /dev/null
-
-ROOTPATH=$(readlink -m "$SCRIPTPATH/../../../..")
-TMPFILE=`mktemp`
-
-pushd "$ROOTPATH" > /dev/null
-
-nohup bin/django testserver --noinput --addrport=0.0.0.0:8001 initial_data roles_generic test_suite > $TMPFILE 2>&1 &
-echo "$!|$TMPFILE" > /tmp/testserver.pid
-
-cat /tmp/testserver.pid
-
-popd > /dev/null
--- a/src/cm/scripts/test-suite/workspace.info.js.tmpl Wed Mar 12 17:19:23 2014 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-
-define ("WORKSPACE_URL", '<workspace-url>');
-define ("USER_ADMIN", '<admin-login>');
-define ("PASS_ADMIN", '<admin-password>');
-
-define ("BROWSERS", ['Chrome']);
-
-// TODO: decide wether we should populate workspaces with standard users or
-// create them on the fly ?
-
-define ("USER_EDIT", '');
-define ("PASS_EDIT", '');
-
-define ("USER_COM", '');
-define ("PASS_COM", '');
-
-define ("USER_OBSERV", '');
-define ("PASS_OBSERV", '');
-
-function define (name, value) {
- Object.defineProperty (exports, name, {
- value: value,
- enumerable: true
- });
-}
-
-