]> lifelog.hopto.org Git - PerlCNF.git/commitdiff
Moved TestManger to be part of system/modules from now on.
authorWill Budic <redacted>
Sat, 8 Nov 2025 09:21:35 +0000 (20:21 +1100)
committerWill Budic <redacted>
Sat, 8 Nov 2025 09:21:35 +0000 (20:21 +1100)
52 files changed:
apps/sql.pl
old/databaseAnonsTest.cnf
system/modules/CNFNode.pm
system/modules/CNFParser.pm
system/modules/DatabaseCentralPlugin.pm
system/modules/TestManager.pm [moved from tests/TestManager.pm with 100% similarity]
tests/ExtensionSamplePlugin.pm
tests/testAll.pl
tests/testAppSettings.pl
tests/testCLIArgumentOptions.pl
tests/testCNF2JSON.pl
tests/testCNFAnons.pl
tests/testCNFConstances.pl
tests/testCNFGlobalFile.pl
tests/testCNFMeta.pl
tests/testCNFNode.pl
tests/testCNFNodeShortiefs.pl
tests/testCNFParserLogging.pl
tests/testCRONSchedular.pl
tests/testCartesianProduct.pl
tests/testCollections.pl
tests/testData.pl
tests/testDateInstruction.pl
tests/testDoAndLIb.pl
tests/testExperimental.pl
tests/testExtensions.cnf [moved from tests/extensions.cnf with 100% similarity]
tests/testExtensions.pl
tests/testHTMLConversion.pl
tests/testHTMLMarkdown.pl
tests/testHTMLPossibleTagged.pl
tests/testInclude.pl
tests/testInstructor.pl
tests/testMarkDownPlugin_MD2HTMLConversion.pl
tests/testNewTagParsingForVersion2.8.pl
tests/testPerlKeywords.pl
tests/testPlugin.pl
tests/testProcessor.pl
tests/testSQL.pl
tests/testSQLPostgres.pl
tests/testSQLPostgres_on_elite.pl
tests/testSQL_Export_Import_To_CNF_DATA.pl
tests/testSQL_TaskList.pl
tests/testSQL_map_macro.pl [moved from tests/testSQL map_macro.pl with 97% similarity]
tests/testShortLinks.pl
tests/testTree.pl
tests/testTreeToHTML.pl
tests/testWorldCitiesDataHandling.pl
tests/test_CursesProgressBar.pl
tests/test_DATA_FILE_Instruction.pl
tests/test_DATA_Instruction.pl
tests/test_DATA_NEW_Instruction.pl
tests/test_Threads.pl

index 948c412f7f6955161893358edf64a5e5d742fedb..dbcc113f92792303d15c2fce04a52212fe533fdd 100644 (file)
@@ -4,7 +4,6 @@ use warnings; use strict;
  no warnings('once');
 use Syntax::Keyword::Try;
 use Benchmark;
-use lib "tests";
 use lib "system/modules";
 
 require CNFParser;
index 0de87110aa7e574a1c652f02df75e0d32fe3c2ec..2ac53a003323249433a82e19b86d50dbb7f1f7d3 100644 (file)
@@ -45,7 +45,7 @@ very much too!
 >>
 
 
-<<MyTemplate<
+<<<MyTemplate
 
 Dear $$$SALUTATION$$$ $$$NAME$$$,
 
index 31c517bce24afd874e8c31c60e025fdb7be3b156..b6fbf9ac74caba521a7e72945d30bbb733860558 100644 (file)
@@ -115,8 +115,8 @@ sub val {
     sub _evaluate {
         my $value = shift;
         if($value =~ s/($meta)//i){
-        $value =~ s/^`|`\s*$/""/g; #we strip as a possible monkey copy had now redundant meta in the value.
-        $value = '`'.$value.'`';
+           $value =~ s/^[`\s]*|[`\s]*$//g; #we strip as a possible monkey copy had now redundant meta in the value.
+           $value = '`'.$value.'`';
         }
         ## no critic BuiltinFunctions::ProhibitStringyEval
         my $ret = eval $value;
@@ -810,14 +810,14 @@ sub obtainLink {
     # Since CNF properties or collections are global and to be avoid.
     $ret = $parser->data()->{$link} if !$ret;
     if($ret && ref($ret) eq 'ARRAY'){
-       my $pkg = @$ret[0]; 
+       my $pkg = @$ret[0];
        my $sub = @$ret[1];
        use Module::Loaded qw(is_loaded);
        if(is_loaded($pkg)){
-       my $obj = $pkg->new(undef);      
+       my $obj = $pkg->new(undef);
           $ret = $obj->$sub(@$ret[2]);
        }
-    
+
     }
     #Let's anything else next.
     $ret = $parser->obtainLink($link) if !$ret;
index 7bf58923afd708a237c238c775fea95072cc5021..c5c25203b180cf4c2c431cd120438fa6b7cc83e1 100644 (file)
@@ -69,7 +69,7 @@ our $CONSTREQ = 0;
 # $del_keys -  is a reference to an array of constance attributes to dynamically remove.
 sub new { my ($class, $path, $attrs, $del_keys, $self) = @_;
     if ($attrs){
-        $self = \%$attrs;
+        $self = \%$attrs; $self->{'ANONS_ARE_PUBLIC'} = 1 if not exists $self->{'ANONS_ARE_PUBLIC'}
     }else{
         $self = {
                   DO_ENABLED      => 0,  # Enable/Disable DO instruction. Which could evaluated potentially be an doom execute destruction.
@@ -1297,8 +1297,10 @@ sub doInclude { my ($self, $prp_file) = @_;
 sub instructPlugin {
     my ($self, $struct) = @_;
     try{
-        $properties{$struct->{'ele'}} = doPlugin($self, $struct);
-        $self->log("Plugin instructed -> ". $struct->{'ele'});
+        my $plugin = doPlugin($self, $struct);
+        $properties{$struct->{'ele'}} = $plugin;
+        $self->log("Plugin instructed -> ". 
+        $plugin->{element}.'<'.$plugin->{package}.'>.'.$plugin->{subroutine}.'('.$plugin->{property}.')');
     }catch($e){
         if($self->{STRICT}){
             CNFParserException->throw(error=>$e);
@@ -1538,7 +1540,9 @@ sub doPlugin {
         $sub = 'setup_with' if !$sub;
         $obj-> $sub($self);
         $plugin->setPlugin($obj);
+        $plugin->{property} = $instructor;
         $plugin->{instructor} = $instructor;
+        $plugin->{subroutine} = $sub;
         return $plugin;
     }
     elsif($instructor eq APP_ARGS){
index e14b6d386b50988a496defe715a5244615d0c5f7..6dd6605a0aa170ab3968d2c01f033161fd0daf3b 100644 (file)
@@ -98,6 +98,7 @@ sub executePropertyStatement($self,$parser,$db,$key,$sql){
                         provider=> 'DatabaseCentralPlugin'
 
        };
+       $db ->disconnect();
        $parser -> data() ->{$key} = \$table if @data;
     }
 }
index 94ee880279bacee724897ff83686cb8a45b6445a..919028bd2ce90c26140a6f26851a00bab06b0566 100644 (file)
@@ -27,8 +27,10 @@ sub process ($self, $parser, $property) {
     for my $id (0 .. $#list){ 
         my $entry = $list[$id];
         my $type  = ref($entry);
-        if($type eq 'InstructedDataItem'){
+        if($type eq 'InstructedProcessItem'){
            $parser->data()->{$entry->{ele}.'.'.$entry->{aid}} = doInstruction($parser, $entry)
+        }else{
+            $parser -> warn(__PACKAGE__." ->process($property): Unknown Type[$id]: $type")
         }
     }
     return $property;
index 30b44248129be448b7111cde9e6a1e94f6278fe9..da65815ab3ee392599faadf40dbe8da2c65f668b 100644 (file)
@@ -13,7 +13,7 @@ use IPC::Run qw( run timeout );
 use Cwd qw(getcwd);
 my $CWD = getcwd;
 
-use lib "./local";
+use lib "system/modules";
 use lib "./tests";
 
 try{
index 2058208437ce696947fac38c36d0a45026ec026c..2f93b526f08b83427bf0a521f635f03097b4557c 100644 (file)
@@ -1,6 +1,6 @@
+#!/usr/bin/env perl
 use warnings; use strict;
-use lib "tests";
-use lib "system/modules";
+use lib::relative ('.','../system/modules');
 
 require TestManager;
 require CNFParser;
@@ -16,9 +16,9 @@ use Syntax::Keyword::Try; try {
     ClassicAppSettings::_set_defaults(
         APP_NAME => "Test Example Application",
         SAMPLE_SETTING_1 => "This will be overwritten",
-        NEW_SETTING     =>  "New setting not expexted in configuration, APP_SETTINGS_SYNC == 1"
+        NEW_SETTING     =>  "New setting not expected in configuration, APP_SETTINGS_SYNC == 1"
     );
-    my $parser = CNFParser -> new(undef,{DO_ENABLED=>0});
+    my $parser = CNFParser -> new(undef,{DO_ENABLED=>0,'%LOG'=>{enabled=>1, console=>1}});
        $parser->parse(undef,qq(
             <<APP_NAME<CONST>Sample App>>
             <<CONFIG_SETTINGS   <APP_SETTINGS>
index c915286926d77ef86f668449e5e4986086a02e24..f388c377a30e49fd6eb99bb18e2728a5847a0da1 100644 (file)
@@ -3,7 +3,6 @@ use warnings; use strict;
 use Syntax::Keyword::Try;
 #no critic "eval"
 
-use lib "tests";
 use lib "system/modules";
 # use lib::relative "../system/modules";
 
index 47bf98fef3057aa4bab83a98476d220df470df41..b2f6e9a11fe31e2c24aa71f92a6ee84be0be312b 100644 (file)
@@ -1,5 +1,4 @@
 use warnings; use strict;
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index bd58d00eb842cb7ad84a3e9dd3679fbbed4b4438..0bacf95bd55b0d946a7296019d1391111bad7e60 100644 (file)
@@ -1,9 +1,7 @@
 #!/usr/bin/env perl
 use warnings; use strict; 
 use Syntax::Keyword::Try;
-
-use lib "tests";
-use lib "system/modules";
+use lib::relative ('.','../system/modules');
 
 require CNFParser;
 require TestManager;
@@ -42,7 +40,7 @@ try{
     my $newInstance =CNFParser->new();
     $test->evaluate('Check $newInstance->anon("Exclusive") == $cnf->anon("Exclusive")?',  $newInstance->anon("Exclusive"), $private->anon("Exclusive"));
      ${$private->anon()}{Exclusive2} = 'yes';
-    $test->passed("Passed new private instance of CNFParser.");
+    $test->passed("Passed new private i, but script only of origin or settable by designnstance of CNFParser.");
 
    #  
      $test-> nextCase();
@@ -149,7 +147,7 @@ catch{
 
 sub testAnons {
 
-# Anons are by default global, but script only of origin or settable by design.
+# Anons are by default public therefore global.
 # Not code. Hence their name.
 
 CNFParser->new()->parse(undef,qq(
@@ -157,10 +155,14 @@ CNFParser->new()->parse(undef,qq(
 ));
 
 
-my $cnf = CNFParser->new("./old/databaseAnonsTest.cnf");
+my $cnf = CNFParser->new("./old/databaseAnonsTest.cnf",{ENABLE_WARNINGS=>0});
 my $find = $cnf->anon('GET_SUB_URL',CNFParser->META);
 die "Failed finding GET_SUB_URL" if not $find;
-die "Mismatched found in GET_SUB_URL" if $find ne 'https://www.THE_ONE.acme.com/$$$2$$$';
+die "Mismatched found in GET_SUB_URL:$find" if $find ne 'https://www.THE_ONE.acme.com/$$$2$$$';
+die "GET_URL is:".$cnf->anon()->{GET_URL} if $cnf->anon('GET_URL') ne 'https://www.THE_ONE.acme.com/$$$2$$$';
+die "Missing template property" if not $cnf->anon('MyTemplate');
+
+
 
 # Let's try som JSON crap, lol.
 $find = $cnf->anon('GET_SUB_URL',CNFParser->META_TO_JSON);
index 73d96275e635a82b61d266c4d97e31532ee6c252..89b9a7639ed9ddbdbd6c85de672c9c2b069cc763 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
 
index 2d93a3b47be805d2886e81af84f8809fb0ad35b3..7bcd58786d8a1d10b8c17553f43aad2f5ef81b32 100644 (file)
@@ -1,7 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use feature 'say';
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 2817e85b4ed32f69472d1ce3520755a10cce3c0a..d72e9dae0b3317a035563bad7f2021f701f054c8 100644 (file)
@@ -1,5 +1,4 @@
 use warnings; use strict;
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 0dc49b06dced67ac7f56a17ee2fc2a8e46bf9aad..ba509876247f47742d241e6179058270a0107ede 100644 (file)
@@ -1,7 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use feature 'say';
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 84dba6a2a662c763bbc8eb48ba166ccece680231..76631e2712c2c722d67f1a2cd5a107b74c3db701 100644 (file)
@@ -1,7 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use feature 'say';
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index a3158325e3cf6c7d9867dce71b61e7286b93583b..dce37f3fbbc792abba86d086417109414bb1e176 100644 (file)
@@ -3,7 +3,6 @@ use warnings; use strict;
 use Syntax::Keyword::Try;
 #no critic "eval"
 use lib "system/modules";
-use lib "tests";
 
 require CNFParser;
 require TestManager;
index 5b9ed6e020b831f50d7dada7a777b0f9f23511ea..91af1a26663d951c870306207bdeef671188f09c 100644 (file)
@@ -4,7 +4,6 @@ use Syntax::Keyword::Try;
 use Benchmark;
 use File::stat;
 
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index d3f506ccc8e44397a48067f7c91108fdf7d6c8ff..355c51c43dfd1682223e8e94f9822406817bf32a 100644 (file)
@@ -3,7 +3,6 @@ use warnings; use strict;
 use Syntax::Keyword::Try;
 use Math::Cartesian::Product;
 
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 2f00f8bc8242ec8363b1bd779651565d9c20a57c..51e50c533b1aace53fb54887bfc91a847c314227 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
 
index f707565871df373a2f2e63a94707eb8a861c20fe..12d651256863fe47e88de6894638f8d36c8b8471 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict; 
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
 
index 8d6640a91f032954a2da3b68051554af45112406..dd96f238c94bbb89db7b7c5bc6ea20e03c909936 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
 
index cc41a6702da3aaf6373c359961fbdbffa54ae937..d111a448aa2d44463e8954607f385442af648b68 100644 (file)
@@ -1,7 +1,6 @@
+#!/usr/bin/env perl
 use warnings; use strict;
-
-use lib "tests";
-use lib "system/modules";
+use lib::relative ('.','../system/modules');
 
 require TestManager;
 require CNFParser;
index ebd16832eb9da78abe4ef0805b2f8bf19e966e87..72daa78f92c899c6f18594c9f450b9e0990f6d41 100644 (file)
@@ -2,8 +2,6 @@
 use warnings; use strict;
 use Syntax::Keyword::Try;
 use Benchmark;
-
-use lib "tests";
 use lib "system/modules";
 
 
index 5fb020ff48191e0b14790e045f63973f7d6661b9..c2e9af27652422034cff4099fcef632d67a4c508 100644 (file)
@@ -1,9 +1,7 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use Syntax::Keyword::Try;
-
-use lib "tests";
-use lib "system/modules";
+use lib::relative ('.','../system/modules');
 
 require TestManager;
 require CNFParser;
@@ -12,27 +10,30 @@ require ExtensionSamplePlugin;
 my $test = TestManager -> new($0);
 my $cnf;
 
-my $plugin = ExtensionSamplePlugin->new({Language=>'English',DateFormat=>'US'});
+#my $plugin = ExtensionSamplePlugin->new({Language=>'English',DateFormat=>'US'});
 
 try{
     ###
     # Test instance creation.
     #
-    die $test->failed() if not $cnf = CNFParser->new('./tests/extensions.cnf',{DO_ENABLED=>1,HAS_EXTENSIONS=>1});
+    die $test->failed() if not $cnf = CNFParser->new('./tests/testExtensions.cnf',
+                {DO_ENABLED=>1,HAS_EXTENSIONS=>1,'%LOG'=>{enabled=>1, console=>1}}
+    );
     $test->case("Passed new instance CNFParser for:".$cnf->{CNF_CONTENT});
     #
     $test-> nextCase();
     #
 
     my %data = %{$cnf->data()};
-    $test->evaluate("Data hash has two keys?", scalar keys %data, 2);
-
     my @table = sort keys %data;
-    $test->evaluate("First table has 28 entries?",  scalar( @{$data{$table[0]}} ), 28);
+    $test->isDefined("%data is defined?",\%data);
+    $test->isDefined("@table is defined?",@table);
+    $test->evaluate("Data hash has two keys?", 2, scalar keys %data);    
+    $test->evaluate("First table has 28 entries?",  scalar @{$data{$table[0]}}, 28);
     $test->evaluate("Second table has 28 entries?", scalar( @{$data{$table[1]}} ), 28);
     $test->evaluate("First table has 2 as first value?",  $data{$table[0]}[0], 2);
     $test->evaluate("Second table has 9 as first value?", $data{$table[1]}[0], 9);
-    $test->isDefined("SOME_CONSTANCE",$cnf->{'$SOME_CONSTANCE'}); #<---- Deprecated old convention signifier prefixed upercase as VAR ins. converts.
+    $test->isDefined("SOME_CONSTANCE",$cnf->{'$SOME_CONSTANCE'}); #<---- Deprecated old convention signifier prefixed uppercase as VAR ins. converts.
                                                                   #----> to use $cnf->{SOME_CONSTANCE} in the code for the future.
 
 
index f9d92bcb61b09a9fb7d870f4cac37d5197bee88f..3dca149f2f07ba5d57865b85b2e72b779c309b35 100644 (file)
@@ -1,5 +1,4 @@
 use warnings; use strict;
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index ecf9efd90d70da4d17f6c0b2b512dddea01e0f92..9ef902485bf1a8306a61d1e17ee3e39951620ee2 100644 (file)
@@ -1,9 +1,5 @@
 use warnings; use strict;
-
 use lib "system/modules";
-use lib "tests";
-
-
 require TestManager;
 require CNFParser;
 require MarkdownPlugin;
index 9cb640831366fb552bb5c35af36f84e12afb6fc8..538fea23cce8534d27f557962bc19efcf5fbacfb 100644 (file)
@@ -1,6 +1,5 @@
 #!/usr/bin/env perl
 use warnings; use strict;
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index b888a862adcdd4655fd3fbf8c453cbc472b1cdbe..f1a01bada68d5183f7b8ac46adc11ba536f34415 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict; 
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 6e61358332d9ad786ce3ae39a7212f075448f60d..302672737d4810eb99a78372c0cb37834a54d6f2 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict; 
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index b5728e89c53a18b07c646d6e00939b2c132d94df..7c05d5d3ecd797164f34c8a47e06d29a96ecab9e 100644 (file)
@@ -1,6 +1,4 @@
 use warnings; use strict;
-
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 8ba009972fea372a285e040ef45af9b944ae7f0f..89de324cccfbde7f5e663e3b729893fda5b25a7c 100644 (file)
@@ -1,6 +1,5 @@
 #!/usr/bin/env perl
 use warnings; use strict;
-use lib "tests";
 use lib "system/modules";
 #use lib "system/modules";
 
index fc6bb14a1eba294bdc27e8a998ab61c7ebae200c..2b0273ec944c8d37b6f1953476a8b89223b7bcaf 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict; 
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 use PerlKeywords qw(%KEYWORDS %FUNCTIONS &matchForCSS &CAP &span_to_html);
 
index 01a10894ad68e75f96f9910469b5d22c24465fca..78f260d9ce7d44268bd312a147c902ae99f81156 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 use Date::Manip;
 
index 6208e9b5917a21543ef976d7aca75358b6c18e47..276d53165280cc196dbe2a99614812b5dbd96f25 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict; 
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 4966c3b24bef9e480d527222c62950d5247db742..95c2a485f45fcd30175e7ae00e0ac7834f3625d2 100644 (file)
@@ -2,14 +2,8 @@
 use warnings; use strict;
 use Syntax::Keyword::Try;
 use Benchmark;
-
-# use lib::relative 'system/modules';
-
-
-use lib "tests";
 use lib "system/modules";
 
-
 require TestManager;
 require CNFParser;
 require CNFSQL;
index d2e79971d03f56f508065972a20e1b581e3170ea..03858f2b721e8c0e58a60a0d8f5abd94acf9efd3 100644 (file)
@@ -2,7 +2,6 @@
 use warnings; use strict;
 use Syntax::Keyword::Try;
 use Benchmark;
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 2b1fd949795fb8cdbbdcef807acd46ef082a74f7..aa037bca29dd85a15f0f45a85126f4b49022ced1 100644 (file)
@@ -3,7 +3,6 @@ use 5.28.0;
 use warnings; use strict;
 use Syntax::Keyword::Try;
 use Benchmark;
-use lib "tests";
 use lib 'system/modules';
 
 require TestManager;
index 171fd133d3335c541e7057bad79ecee38ee81f08..724c07fae665717196f209eb3905e37386e0c9f7 100644 (file)
@@ -3,13 +3,8 @@ use warnings; use strict;
 use Syntax::Keyword::Try;
 use Benchmark;
 
-use lib::relative 'system/modules';
-
-
-use lib "tests";
-use lib "system/modules";
-
-
+use lib::relative '../system/modules';
+#use lib "system/modules";
 require TestManager;
 require CNFParser;
 require CNFSQL;
index b14b1e3b6f2998b295121be5248d3ad112b97714..a2d94d28217423ff906b4aa762326a7296d24c00 100644 (file)
@@ -2,11 +2,7 @@
 use warnings; use strict;
 use Syntax::Keyword::Try;
 use Benchmark;
-
-
-use lib "tests";
 use lib "system/modules";
-
 require TestManager;
 require CNFParser;
 require CNFSQL;
similarity index 97%
rename from tests/testSQL map_macro.pl
rename to tests/testSQL_map_macro.pl
index 9f7fdaf385fa2d88fbcb34127f0723d55e3604e8..048383c471953380ddf9f3846486e31614824cd4 100644 (file)
@@ -2,11 +2,7 @@
 use warnings; use strict;
 use Syntax::Keyword::Try;
 use Benchmark;
-
-use lib "tests";
-use lib 'system/modules';
-# use lib "system/modules";
-
+use lib::relative ('.','../system/modules');
 
 require TestManager;
 require CNFParser;
index 3ab73ada070295f06b3aaffd7c6f3d4afb5d0999..38910dbd538fa867c21e453d6ff54ee9fb11023d 100644 (file)
@@ -1,8 +1,6 @@
 use warnings; use strict;
-
 use feature 'say';
 use lib "system/modules";
-use lib "tests";
 
 require TestManager;
 require ShortLink;
index 99aa5ec9ee1596a96264b09ddf4d7dd9c4f98357..d4e72ece3ef3a228803f21344a5c4bb3f58b6cc4 100644 (file)
@@ -1,11 +1,7 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
-#use lib "system/modules";
-
 
 require TestManager;
 require CNFParser;
index addb5628ad94868f7a9743b148e7f80c2c45c2b2..c8a56e200b3c76af9038e00eebdb8b13ef3a555c 100644 (file)
@@ -1,11 +1,8 @@
 #!/usr/bin/env perl
 use warnings; use strict; 
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
-
 require TestManager;
 require CNFParser;
 require CNFNode;
index bb1c09d18a28b11898ddc7796b6c5e30d0c5c273..548fd322569e2a56d913d2dba523278a3c0b0c95 100644 (file)
@@ -1,8 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 use Syntax::Keyword::Try;
-
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index a8dda893b3d5d9fd388f89c6b2ae91afb7d68f10..3cfd33e3fad4999dc7e7d53e0e980d4937b78bb5 100644 (file)
@@ -4,8 +4,7 @@ use Syntax::Keyword::Try;
 #no critic "eval"
 
 ###
-use lib "tests";
-use lib "local";
+
 use lib::relative "../system/modules";
     require CNFParser;
     require CNFDateTime;
@@ -16,98 +15,223 @@ use lib "system/modules";
 
 require TestManager;
 my $test = TestManager -> new($0)-> unsuited();
-my $cnf;
-
-try{
-    ###
-    # Test instance creation.
-    #
-    # die $test->failed() if not $cnf = CNFParser->blank({DEBUG=>1});
-    # $test->case("Passed new instance CNFParser.");
-    # #
-    # $test-> nextCase();
-    # #
-    $test->case("Initiate Curses UI.");
-
+my $cnf  = CNFParser->blank()->parse(undef,q{
+<<@<@DIRECTORIES>
+Documents, Pictures, Public, Music, 
+dev, dev_new, backups,
+.cinnamon, .config, .icons, .local, .vim, 
+.ssh, .themes, .fzf, .fonts 
+>>
+<<@<@DIRECTORIES>
+.themes, .vim, 
+.fzf
+.fonts 
+>>
+<<@<@DIRECTORIES_NON>
+ .vim 
+>>
+<<@<@EXCLUDES>
+.local/share/Steam, .local/share/flatpak, .local/share/Trash, .local/lib 
+*Cache*,
+.config/session,.config/Signal,.config/libreoffice,
+*google-chrome*,
+*cgisess_*,
+*cache*,
+*chromium*
+localperl
+.local/share/Trash 
+.local/share/pipx 
+*pgadmin4*
+*.vscode*
+.config/Code/logs/* 
+>>
+});
 
 use lib "/home/will/dev_new/web_imports_cloned/CPAN/Curses-UI-0.9609/lib";
 use Curses::UI;
-use Time::HiRes qw(usleep);
+#use Time::HiRes qw(usleep);
 use feature 'say';
+use File::Type;
+
+our $FT = File::Type->new();
+my @FILES; 
+my %EXCLUDE_RULES;
+my @EXCLUDE_KEYS;
+my ($title,$editor,$action,$progressbar,$buffer,$other);
+
+
+package FileCollected {
+    our ($total_cnt,$total_bytes) = (0,0);
+    sub new{
+        my $class = shift;
+        my $path  = shift;
+        my $mime  = $FT->mime_type($path);
+        my @stat  = stat $path;        
+        my $content_length = $stat[7]; $content_length = 0 if ! $content_length;
+        $total_cnt++;
+        $total_bytes += $content_length;
+        bless  {
+            path => $path,
+            mime => $mime,            
+            content_length => $content_length,
+            last_modified  => $stat[9],            
+        }, $class
+    }
+
+}
+
+sub isExcluded{
+    my $path = shift;
+    foreach my $exclude(@EXCLUDE_KEYS){
+        if($path =~  m/$exclude/){
+           return 1 if $EXCLUDE_RULES{$exclude} -> ($path,$exclude)
+        }
+    }
+    return 0
+}
 
+sub recurseDir{
+    my $dir = shift;   $! = 0;  # Reset error variable
+    my $HNDL_DIR;
+    if ( ! -d $dir){
+        say "Not valid directory or accessible: $dir";
+        return
+    }
+    opendir ($HNDL_DIR, $dir) or die "Fail to open directory: $dir";
+    my @listing = readdir($HNDL_DIR);
+    if ($!) {
+        die "Error reading directory: $!";
+    }
+    close ($HNDL_DIR);  undef $HNDL_DIR;
 
+    foreach my $node(@listing){
+        next if($node eq '..' || $node eq '.');
+        my $current = $dir . "/" . $node;    
+        if(!isExcluded($current)){
+            $action->text($current);  
+            $action->draw;
+            if(-d $current){
+                recurseDir($current)
+            }else{
+                $FILES[@FILES] = FileCollected -> new($current);
+                $buffer .= $current."\n" ;                               
+            }
+        }
+    }
+    
+    $editor->focus();    
+    $editor->text($buffer);
+    $editor->cursor_to_end();    
+    
+    $buffer ="";
+}
 
-   # Create the root object.
-    my $cui = new Curses::UI (
+sub pathStarts{
+    my $path = shift;
+    my $name = shift;    
+    return $path =~ m/^$name.*/m
+}
+sub pathEnds{
+    my $path = shift;
+    my $name = shift;
+    return $path =~ m/.+$name$/m
+}
+sub pathContains{
+    my $path = shift;
+    my $name = shift;
+    return $path =~ m/\/$name\//
+}
+
+
+sub _size_bytes{
+    my $size = shift;
+    if ($size < 1024) {
+        return $size . " bytes";
+    }
+    elsif ($size < (1024 * 1024)) {
+        return sprintf("%.2f KB", $size / 1024);
+    }
+    else {
+        return sprintf("%.2f MB", $size / (1024 * 1024));
+    }
+}
+
+try{
+
+    $test->case("Initiate Curses UI.");
+    my @DIRECTORIES = $cnf -> collection('@DIRECTORIES');
+    my @EXCLUDES = $cnf -> collection('@EXCLUDES');    
+    my ($cnt_root_dirs,$cnt_files) = (0,0);
+
+    foreach my $exclude(@EXCLUDES){
+        my @glob  = ($exclude =~ m/(^\*?)(.*?)(\**$)/ms);
+        my $start = $glob[0];
+        my $name  = $glob[1];
+        my $ends  = $glob[2];
+        if($start && $ends){
+           $EXCLUDE_RULES{$name} = \&pathContains;
+        }elsif($start && !$ends){
+           $EXCLUDE_RULES{$name} = \&pathStarts;
+        }elsif($ends){
+           $EXCLUDE_RULES{$name} = \&pathEnds;
+        }else{
+           $EXCLUDE_RULES{$name} = \&pathStarts; 
+        }
+    }
+    @EXCLUDE_KEYS = sort keys %EXCLUDE_RULES;
+
+    
+# Create the root object.
+    our $cui = new Curses::UI (
         -debug => $cnf->{DEBUG},
         -color_support => 1, -clear_on_exit => 0
     );
 
-
+    my $end=$cui->{-height}-4;
+    my $top=$cui->{-height}-8;
+    my $cur=$top;
+       $cui->status("Examining Files!");
+       $cui->keys_to_lowercase();    
+       $cui->set_binding(sub{$cui->mainloopExit;}, "\cC");
+       $cui->set_binding(sub{$cui->mainloopExit} , "\cQ");
 
     my ($x,$y,$pos)=(0,0,0);
     my $win = $cui->add('window_id', 'Window');
 
-    my $editor = $win->add(
-       'editor', 'TextEditor',
-       -border          => 1,
-       -padtop          => 0,  
-       -padbottom       => 3,
-       -showlines       => 0,
-       -sbborder        => 0,
-       -vscrollbar      => 1,
-       -hscrollbar      => 1,
-       -showhardreturns => 0,
-       -wrapping        => 0, # wrapping slows down the editor :-(
-       -text            => "Fetching..",
-);
-
-#     my $progressbar = $win->add(
-#             'myprogressbar', 'Progressbar',
-#             #-max       => 250,
-#             -pos       => 0,
-#             -fg => "blue",
-#             -bfg => "yellow",
-#             -y=>$cui->{-height}-4
-#     );
-#     my $action = $win->add(
-#             'myaction', 'Label',
-#             -fg => "red",
-#             -text      => 'Performing test...                     ',
-#             -pos       => 0,
-#             -y=>$cui->{-height}-1
-#     );
-# while($pos<101){
-#     $action->draw;
-# $progressbar->draw;
-# $progressbar->pos(++$pos);
-# usleep(rand(25000));
-# my $text = "Progress position  $pos   ";
-#    $action->text($text);
-# }
-# sleep(1);
+    my $max = @DIRECTORIES;
 
-    
-use File::Type;
- my $ft = File::Type->new();
-my $dir = $ENV{HOME};
-opendir DIR,$dir;
-my @dir = readdir(DIR);
-close DIR;
-
-my $max = @dir;
-my ($buffer,$other);
-$pos = 0;
-
-    my $action = $win->add(
-            'myaction', 'Label',
-            -fg => "red",
-            -text      => 'Listing files...                     ',
-            -pos       => 0,
-            -y=>$cui->{-height}-1
+    $title = $win->add(
+        'myaction2', 'Label',       
+        -text      => 'Listing files...                     ',
+        -width     => $cui->{-width},
+        -y=>0,
+        -x=>0,
+        -border         => 1,    
+    ); 
+
+
+    $editor = $win->add(
+        'editor', 'TextEditor',
+        -border         => 1,
+        -padtop                 => 3,  
+        -padbottom      => 4,
+        -showlines      => 0,
+        -sbborder       => 1,
+        -vscrollbar     => 1,
+        -hscrollbar     => 1,
+        -showhardreturns => 0,
+        -wrapping        => 0, # wrapping slows down the editor :-(
+        -text           => "Fetching..",
     );
-my $progressbar = $win->add(
-            'myprogressbar2', 'Progressbar',
+    $action = $win->add(
+        'myaction', 'Label',
+        -fg => "red",
+        -text      => 'Listing files...                     ',        
+        -width     => $cui->{-width}-1,
+        -y=>$cui->{-height}-1
+    );
+    $progressbar = $win->add(
+            'myprogressbar', 'Progressbar',
             -max       => $max,
             -pos       => 1,
             -fg => "red",
@@ -115,58 +239,35 @@ my $progressbar = $win->add(
             -y=>$cui->{-height}-4
     );
 
-my $end=$cui->{-height}-4;
-my $top=$cui->{-height}-8;
-my $cur=$top;
-$cui->keys_to_lowercase();
-foreach(@dir){
-    usleep(rand(5000));
-    $progressbar->draw;
-    $progressbar->pos($pos);
-    $action->draw;
-if (-f $dir . "/" . $_ ){
-    my $file =  "$dir/$_";
-    $action->text($file);
-    my $mime_type =  $ft->mime_type($file);
-    if($mime_type eq 'text/script' || $ft->checktype_filename($file) =~ /x-sh$/){
-        $buffer .=  $file. " type: ". $mime_type . "\n";
-        $editor->text($buffer);
-        # $win->add(
-        #     'myaction'.$pos, 'Label',
-        #     -fg => "yellow",
-        #     -text      => $file, 
-        #     -x=>0,
-        #     -y=>$cur++
-        #     )->draw;
-        #     if($cur>=$end){
-        #        $cur=$top;
-        #     }
-        $editor->cursor_to_end();
-    }else{
-        $other .= $ft->checktype_filename($file)."::$file\n";
-    }
-}
-# elsif(-d $dir . "/" . $_){
-# }
-$progressbar->pos(int(++$pos));
+foreach(@DIRECTORIES){
+        my $dir = $ENV{HOME} .'/'.$_;       
+        $progressbar->pos($pos++);
+        $progressbar->draw;   
+        $title->text("Listing:".$dir);
+        $title->draw;
+        sleep(1);     
+        recurseDir($dir);
+        $cnt_root_dirs++;
 }
 
 
-$cui->set_binding(sub{$cui->status("DONE! ctrl+Q")}, "\cC");
-$cui->set_binding(sub{$cui->mainloopExit} , "\cQ");
-$editor->focus();
-$cui->mainloop;
+$progressbar->pos($max);
+$progressbar->draw;  
 
+$action->text("Done Filtering, ctrl+q to quit!");
 
-$cui->leave_curses ();
-
-say $buffer;
 
-say $other;
 
-$cui->reset_curses ();
+$cui->status("DONE! ctrl+Q");
+$cui->mainloop;
 
 
+$cui->leave_curses ();
+$cui->reset_curses ();
+{
+    say "Number of files collected:" . $FileCollected::total_cnt;
+    say "Size  of files collected:" . _size_bytes($FileCollected::total_bytes);
+}
 
     #
     $test->done();
@@ -179,4 +280,6 @@ catch{
 
 #
 #  TESTING ANY POSSIBLE SUBS ARE FOLLOWING FROM HERE  #
-#
\ No newline at end of file
+#
+
+
index 284952549351da272c24a655d4e9113a031636d3..ad9fc844c827d9fa6250875fa06fda2b2006901c 100644 (file)
@@ -1,8 +1,5 @@
 #!/usr/bin/env perl
-use warnings;
-use strict;
-
-use lib "tests";
+use warnings; use strict;
 use lib "system/modules";
 
 require TestManager;
index 3ba23a7bbb08a4acbeb9502c7b6230e13ea74355..9e394f819b7e881daa5ecb5edc35c5480a48372e 100644 (file)
@@ -1,7 +1,6 @@
 #!/usr/bin/env perl
 use warnings; use strict;
 
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 93f9d02f59e5bb51916866e62758084aef69c3ef..8dbd8c379d1ce91f596940b7447d2c4e2cb1237a 100644 (file)
@@ -2,7 +2,6 @@
 use warnings; use strict;
 use Syntax::Keyword::Try;
 
-use lib "tests";
 use lib "system/modules";
 
 require TestManager;
index 0e690af90fa19473208ce94dae4b41eb0fa090e9..3942eefec12555d336e38108f53328d1a654a65e 100644 (file)
@@ -6,7 +6,6 @@ use Syntax::Keyword::Try;
 #no critic "eval"
 
 ###
-use lib "tests";
 use lib "local";
 use Config;
     $Config{useithreads} or