Compare commits
No commits in common. "9e9903429eb52aabfb247c079fcc29995b4ee51b" and "197dd79b34818ee27e4681c68b51656e83c55479" have entirely different histories.
9e9903429e
...
197dd79b34
4 changed files with 14 additions and 83 deletions
|
@ -6,9 +6,6 @@
|
|||
"authors": [
|
||||
"Nathan McCarty <thatonelutenist@stranger.systems>"
|
||||
],
|
||||
"depends": [
|
||||
"paths"
|
||||
],
|
||||
"provides": {
|
||||
"IUtils": "lib/IUtils.rakumod",
|
||||
"IUtils::IDEMode": "lib/IUtils/IDEMode.rakumod",
|
||||
|
@ -17,5 +14,5 @@
|
|||
"bin": {
|
||||
"iutils": "bin/iutils"
|
||||
},
|
||||
"resources": [ ]
|
||||
"resources": [ ],
|
||||
}
|
||||
|
|
26
bin/iutils
26
bin/iutils
|
@ -3,22 +3,12 @@ use v6.d;
|
|||
use IUtils;
|
||||
use IUtils::Comments;
|
||||
|
||||
#| Execute the tests in an idris project
|
||||
multi MAIN(
|
||||
"test",
|
||||
Str $project-path?, #= Base directory of the project, defaults to $*CWD
|
||||
) {
|
||||
# CD into the project path if needed
|
||||
chdir($project-path.IO.resolve: :completely) if $project-path;
|
||||
# Scan for our packages
|
||||
my @packages = scan-packages;
|
||||
# Collect tests
|
||||
my @tests;
|
||||
for @packages -> $package {
|
||||
# FIXME
|
||||
say 'Finding tests for ', $package.ipkg.relative;
|
||||
for $package.sources -> $source {
|
||||
say 'Scanning for tests in ', $source;
|
||||
}
|
||||
}
|
||||
my $contents = "/home/nathan/Projects/Idris/structures/test/src/Main.idr".IO.slurp;
|
||||
|
||||
say "\nTesting full flagged-expression:";
|
||||
say $contents ~~ &flagged-expression;
|
||||
when $contents ~~ &flagged-expression {
|
||||
say $<test-name>;
|
||||
say $<expression-name>;
|
||||
say $<flag><type>;
|
||||
}
|
||||
|
|
|
@ -3,42 +3,6 @@ unit module IUtils;
|
|||
|
||||
need IUtils::IDEMode;
|
||||
|
||||
use paths;
|
||||
|
||||
#| Structure representing the root of what idris considers a package directory,
|
||||
#| with the associated ipkg and source files. These can and will overlap within
|
||||
#| the same directory.
|
||||
class PackageInfo {
|
||||
has IO::Path:D $.ipkg is required;
|
||||
has IO::Path:D $.root is required;
|
||||
has IO::Path:D @.sources is required;
|
||||
}
|
||||
|
||||
#| Scan a particular ipkg for its associated sources
|
||||
sub scan-ipkg(IO::Path:D $ipkg --> PackageInfo:D) {
|
||||
my $contents = $ipkg.slurp;
|
||||
my $src-dir =
|
||||
($contents ~~
|
||||
/ 'sourcedir' \h* '=' \h*
|
||||
'"' $<value>=[<-["]>*] '"' /)<value>
|
||||
// "src";
|
||||
|
||||
my IO::Path:D @sources =
|
||||
paths($ipkg.parent.add($src-dir), :file(*.ends-with(".idr"))).map(*.IO);
|
||||
PackageInfo.new(ipkg => $ipkg, root => $ipkg.parent, sources => @sources)
|
||||
}
|
||||
|
||||
# TODO: Add some parsing of pack.toml to locate test packages and associate them
|
||||
# with their source ipkg
|
||||
|
||||
#| Scan $*CWD to locate ipkgs and their associated sources
|
||||
sub scan-packages(--> Array[PackageInfo:D]) is export {
|
||||
my PackageInfo:D @ipkgs =
|
||||
paths(:file(*.ends-with(".ipkg"))).map(*.IO.&scan-ipkg);
|
||||
return @ipkgs;
|
||||
}
|
||||
|
||||
|
||||
# Utility functions for pack
|
||||
|
||||
#| Invoke a pack command
|
||||
|
@ -60,34 +24,17 @@ sub pack-run(*@cmd) is export {
|
|||
|
||||
#| Build a package with pack
|
||||
sub pack-build($pkg) is export {
|
||||
pack-run 'build', $pkg
|
||||
pack-run 'build', $pkg;
|
||||
}
|
||||
|
||||
#| Test a package with pack
|
||||
sub pack-test($pkg) is export {
|
||||
pack-run 'build', $pkg
|
||||
pack-run 'build', $pkg;
|
||||
}
|
||||
|
||||
#| Clean a package with pack
|
||||
sub pack-clean($pkg) is export {
|
||||
pack-run 'clean', $pkg
|
||||
}
|
||||
|
||||
# Utility functions for idris
|
||||
|
||||
#| An error coming from the idris compiler
|
||||
class IdrisError is Exception {
|
||||
has Str $.out;
|
||||
has Str $.err;
|
||||
has Int $.exit-code;
|
||||
has Str $.command;
|
||||
|
||||
method message {
|
||||
qq:to/END/;
|
||||
Error running idris command: $.command
|
||||
Command exited with $.exit-code
|
||||
END
|
||||
}
|
||||
pack-run 'clean', $pkg;
|
||||
}
|
||||
|
||||
#| Invoke an idris command
|
||||
|
@ -96,10 +43,7 @@ sub idris-run(*@cmd) is export {
|
|||
my $out = $proc.out.slurp(:close);
|
||||
my $err = $proc.err.slurp(:close);
|
||||
unless $proc {
|
||||
IdrisError.new(
|
||||
out => $out, err => $err,
|
||||
exit-code => $proc.exitcode, command => @cmd.Str)
|
||||
.throw;
|
||||
($out, $err)
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
|
|
@ -10,5 +10,5 @@ my token name { <[\w \-]>+ }
|
|||
my regex flagged-expression is export {
|
||||
<&comment-start> \h* <flag> \h* <test-name=&name> \V* \v
|
||||
[<&comment-start> \V* \v]*
|
||||
<expression-name=&name> \h+ \: \V* \v
|
||||
$<expression-name>=<expression-name=&name> \h+ \: \V* \v
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue