From cc7608840f0002bf929165cee4c74791261dc8c2 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 25 May 2018 21:34:14 +0300 Subject: Add config command tests --- bdep/config.cli | 10 +- tests/common.test | 1 + tests/config.test | 336 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 346 insertions(+), 1 deletion(-) create mode 100644 tests/config.test diff --git a/bdep/config.cli b/bdep/config.cli index 8248510..44fcfd5 100644 --- a/bdep/config.cli +++ b/bdep/config.cli @@ -68,7 +68,15 @@ namespace bdep As a shortcut, if \ci{cfg-name} is not specified and \ci{cfg-dir} is a simple path that starts with \cb{@}, then it is treated as the name and the configuration directory is assumed to be - \c{\i{prj-dir}\b{-}\i{cfg-name}}. + \c{\i{prj-dir}\b{-}\i{cfg-name}}. Note that in case of \c{create}, + \ci{cfg-dir} must be preceded with \cb{--} (double dash) option to + disambiguate it from \c{\b{@}\i{cfg-name}}. For example, assuming + the project directory is \cb{hello}: + + \ + $ bdep config add @clang # ../hello-clang + $ bdep config create -- @gcc cc config.cxx=g++ # ../hello-gcc + \ Unless the \cb{--no-default} option is specified, the first added or created build configuration is designated as the default. Several diff --git a/tests/common.test b/tests/common.test index f872ccb..0b1153c 100644 --- a/tests/common.test +++ b/tests/common.test @@ -31,6 +31,7 @@ new = $* new status = $* status sync = $* sync update = $* update +config = $* config # All testscripts are named after bdep commands, for example sync.test. So the # testscript scope id is a name of the command being tested. diff --git a/tests/config.test b/tests/config.test new file mode 100644 index 0000000..c8f1b0a --- /dev/null +++ b/tests/config.test @@ -0,0 +1,336 @@ +# file : tests/config.test +# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Note that we test the list sub-command while testing other sub-commands. +# + +.include common.test project.test + +cxx = cc "config.cxx=$config.cxx" + +status += -d prj +init += -d prj +update += -d prj +deinit += -d prj + +: create +: +{ + : name-dir + : + { + $clone_root_prj; + + $* create @cfg cfg-dir $cxx 2>>/"EOE" &cfg-dir/***; + created configuration @cfg $~/cfg-dir/ 1 default,forwarded,auto-synchronized + EOE + + $status 2>'error: package prj is not initialized in configuration @cfg' != 0; + + $init @cfg 2>>/~"%EOE%"; + initializing in project $~/prj/ + synchronizing: + % new prj.+19700101000000% + EOE + + $status >'prj configured 0.1.0-a.0.19700101000000'; + + $* list @cfg >>/"EOO"; + @cfg $~/cfg-dir/ 1 default,forwarded,auto-synchronized + EOO + + $update @cfg 2>>/EOE; + mkdir cfg-dir/prj/fsdir{prj/} + c++ prj/prj/cxx{prj}@cfg-dir/prj/prj/ + ld cfg-dir/prj/prj/exe{prj} + EOE + + $deinit @cfg 2>>/"EOE" + deinitializing in project $~/prj/ + synchronizing: + drop prj + EOE + } + + : name + : + { + $clone_root_prj; + + $* create -- @cfg $cxx 2>>/"EOE" &prj-cfg/***; + created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized + EOE + + $init @cfg 2>>/~"%EOE%"; + initializing in project $~/prj/ + synchronizing: + % new prj.+19700101000000% + EOE + + $status >'prj configured 0.1.0-a.0.19700101000000'; + + $* list >>/"EOO"; + @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized + EOO + + $update @cfg 2>>/EOE; + mkdir prj-cfg/prj/fsdir{prj/} + c++ prj/prj/cxx{prj}@prj-cfg/prj/prj/ + ld prj-cfg/prj/prj/exe{prj} + EOE + + $deinit @cfg 2>>/"EOE" + deinitializing in project $~/prj/ + synchronizing: + drop prj + EOE + } + + : dir + : + { + $clone_root_prj; + + $* create cfg $cxx 2>>/"EOE" &cfg/***; + created configuration $~/cfg/ 1 default,forwarded,auto-synchronized + EOE + + $init -c cfg 2>>/~"%EOE%"; + initializing in project $~/prj/ + synchronizing: + % new prj.+19700101000000% + EOE + + $status >'prj configured 0.1.0-a.0.19700101000000'; + + $* list >>/"EOO"; + $~/cfg/ 1 default,forwarded,auto-synchronized + EOO + + $update -c cfg 2>>/EOE; + mkdir cfg/prj/fsdir{prj/} + c++ prj/prj/cxx{prj}@cfg/prj/prj/ + ld cfg/prj/prj/exe{prj} + EOE + + $deinit -c cfg 2>>/"EOE" + deinitializing in project $~/prj/ + synchronizing: + drop prj + EOE + } + + : wipe + : + { + $clone_root_prj; + + mkdir --no-cleanup cfg; + touch --no-cleanup cfg/a; + + $* create cfg $cxx 2>>/"EOE" != 0; + error: directory $~/cfg/ is not empty + info: use --wipe to clean it up but be careful + EOE + + $* create --wipe cfg $cxx 2>>/"EOE" &cfg/*** + created configuration $~/cfg/ 1 default,forwarded,auto-synchronized + EOE + } +} + +: add +: +{ + $clone_root_prj; + + # Pre-create configurations. + # + $new -C prj-cfg1 tmp1 $cxx 2>! &prj-cfg1/*** &tmp1/***; + $new -C prj-cfg2 tmp2 $cxx 2>! &prj-cfg2/*** &tmp2/***; + + $* add @cfg1 prj-cfg1 2>>/"EOE"; + added configuration @cfg1 $~/prj-cfg1/ 1 default,forwarded,auto-synchronized + EOE + + $* add @cfg2 prj-cfg2 2>>/"EOE"; + added configuration @cfg2 $~/prj-cfg2/ 2 auto-synchronized + EOE + + $init --all 2>>/~"%EOE%"; + initializing in project $~/prj/ + in configuration @cfg1: + synchronizing: + % new prj.+19700101000000% + + in configuration @cfg2: + synchronizing: + % new prj.+19700101000000% + EOE + + $status --all >>EOO; + in configuration @cfg1: + prj configured 0.1.0-a.0.19700101000000 + + in configuration @cfg2: + prj configured 0.1.0-a.0.19700101000000 + EOO + + $* list >>/"EOO"; + @cfg1 $~/prj-cfg1/ 1 default,forwarded,auto-synchronized + @cfg2 $~/prj-cfg2/ 2 auto-synchronized + EOO + + $update --all 2>>/EOE; + in configuration @cfg1: + mkdir prj-cfg1/prj/fsdir{prj/} + c++ prj/prj/cxx{prj}@prj-cfg1/prj/prj/ + ld prj-cfg1/prj/prj/exe{prj} + + in configuration @cfg2: + mkdir prj-cfg2/prj/fsdir{prj/} + c++ prj/prj/cxx{prj}@prj-cfg2/prj/prj/ + ld prj-cfg2/prj/prj/exe{prj} + EOE + + $deinit --all 2>>/"EOE" + deinitializing in project $~/prj/ + in configuration @cfg1: + synchronizing: + drop prj + + in configuration @cfg2: + synchronizing: + drop prj + EOE +} + +: move +: +{ + $clone_root_prj; + + $* create -- @cfg $cxx 2>>/"EOE"; + created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized + EOE + + $init @cfg 2>>/~"%EOE%"; + initializing in project $~/prj/ + synchronizing: + % new prj.+19700101000000% + EOE + + cp --no-cleanup -r prj-cfg prj-cfg2 &prj-cfg2/***; + rm -r prj-cfg; + + $* move @cfg prj-cfg2 2>>/"EOE"; + moved configuration @cfg $~/prj-cfg/ 1 to $~/prj-cfg2/ + EOE + + $update --all 2>>/EOE; + mkdir prj-cfg2/prj/fsdir{prj/} + c++ prj/prj/cxx{prj}@prj-cfg2/prj/prj/ + ld prj-cfg2/prj/prj/exe{prj} + EOE + + $deinit 2>>/"EOE" + deinitializing in project $~/prj/ + synchronizing: + drop prj + EOE +} + +: rename +: +{ + $clone_root_prj; + + $* create -- @cfg $cxx 2>>/"EOE" &prj-cfg/***; + created configuration @cfg $~/prj-cfg/ 1 default,forwarded,auto-synchronized + EOE + + $init @cfg 2>>/~"%EOE%"; + initializing in project $~/prj/ + synchronizing: + % new prj.+19700101000000% + EOE + + $* rename @cfg cfg2 2>>/"EOE"; + renamed configuration @cfg $~/prj-cfg/ 1 to @cfg2 + EOE + + $update @cfg2 2>>/EOE; + mkdir prj-cfg/prj/fsdir{prj/} + c++ prj/prj/cxx{prj}@prj-cfg/prj/prj/ + ld prj-cfg/prj/prj/exe{prj} + EOE + + $deinit 2>>/"EOE" + deinitializing in project $~/prj/ + synchronizing: + drop prj + EOE +} + +: remove +: +: Here we also test the set sub-command. +: +{ + $clone_root_prj; + + $* create -- @cfg1 $cxx 2>! &prj-cfg1/***; + $* create -- @cfg2 $cxx 2>! &prj-cfg2/***; + + $init --all 2>!; + + $* remove @cfg1 2>>EOE != 0; + error: configuration @cfg1 contains initialized packages + info: use deinit command to deinitialize packages + info: use status command to list initialized packages + EOE + + $deinit @cfg1 2>>/"EOE"; + deinitializing in project $~/prj/ + synchronizing: + drop prj + EOE + + $* remove @cfg1 2>>/"EOE"; + removed configuration @cfg1 $~/prj-cfg1/ 1 + EOE + + $status --all >>EOO; + prj configured 0.1.0-a.0.19700101000000 + EOO + + $* list >>/"EOO"; + @cfg2 $~/prj-cfg2/ 2 auto-synchronized + EOO + + $update 2>>/"EOE" != 0; + error: no default configuration in project $~/prj/ + info: use \(@ | --config|-c | --all|-a\) to specify configuration explicitly + EOE + + $* set @cfg2 --default --forward --no-auto-sync 2>>/"EOE"; + updated configuration @cfg2 $~/prj-cfg2/ 2 default,forwarded + EOE + + $* list >>/"EOO"; + @cfg2 $~/prj-cfg2/ 2 default,forwarded + EOO + + $update 2>>/EOE; + mkdir prj-cfg2/prj/fsdir{prj/} + c++ prj/prj/cxx{prj}@prj-cfg2/prj/prj/ + ld prj-cfg2/prj/prj/exe{prj} + EOE + + $deinit --all 2>>/"EOE" + deinitializing in project $~/prj/ + synchronizing: + drop prj + EOE +} -- cgit v1.1