From 0145ec999c3a5e3d205e94221ce07f11e9fc3b35 Mon Sep 17 00:00:00 2001 From: Judson Date: Tue, 9 May 2017 09:39:20 -0700 Subject: Current round of tests pass, but filter function is failing to include when groups match in use. --- .../ruby-modules/bundler-env/assertions.nix | 24 +++++++++++++ .../development/ruby-modules/bundler-env/basic.nix | 7 ++-- .../ruby-modules/bundler-env/functions.nix | 3 +- .../development/ruby-modules/bundler-env/stubs.nix | 33 ++++++++++++++++++ pkgs/development/ruby-modules/bundler-env/test.nix | 40 ++++++---------------- 5 files changed, 74 insertions(+), 33 deletions(-) create mode 100644 pkgs/development/ruby-modules/bundler-env/assertions.nix create mode 100644 pkgs/development/ruby-modules/bundler-env/stubs.nix (limited to 'pkgs/development/ruby-modules/bundler-env') diff --git a/pkgs/development/ruby-modules/bundler-env/assertions.nix b/pkgs/development/ruby-modules/bundler-env/assertions.nix new file mode 100644 index 00000000000..3cf67d6f3eb --- /dev/null +++ b/pkgs/development/ruby-modules/bundler-env/assertions.nix @@ -0,0 +1,24 @@ +{ test, lib, ...}: +{ + equal = expected: actual: + if actual == expected then + (test.passed "= ${toString expected}") else + (test.failed "'${toString actual}'(${builtins.typeOf actual}) != '${toString expected}'(${builtins.typeOf expected})"); + + beASet = actual: + if builtins.isAttrs actual then + (test.passed "is a set") else + (test.failed "is not a set, was ${builtins.typeOf actual}: ${toString actual}"); + + haveKeys = expected: actual: + if builtins.all + (ex: builtins.any (ac: ex == ac) (builtins.attrNames actual)) + expected then + (test.passed "has expected keys") else + (test.failed "keys differ: expected [${lib.concatStringsSep ";" expected}] have [${lib.concatStringsSep ";" (builtins.attrNames actual)}]"); + + havePrefix = expected: actual: + if lib.hasPrefix expected actual then + (test.passed "has prefix '${expected}'") else + (test.failed "prefix '${expected}' not found in '${actual}'"); +} diff --git a/pkgs/development/ruby-modules/bundler-env/basic.nix b/pkgs/development/ruby-modules/bundler-env/basic.nix index 4557a7500f6..75fe7342344 100644 --- a/pkgs/development/ruby-modules/bundler-env/basic.nix +++ b/pkgs/development/ruby-modules/bundler-env/basic.nix @@ -20,7 +20,9 @@ , ... }@args: -with (import ./functions.nix { inherit lib ruby gemConfig groups; }); +with ( +builtins.trace "basic functions" +import ./functions.nix { inherit lib ruby gemConfig groups; }); let @@ -69,7 +71,8 @@ let if gemAttrs.type == "path" then pathDerivation gemAttrs else - buildRubyGem gemAttrs + builtins.trace (lib.showVal (gemAttrs.ruby or "def ruby")) + buildRubyGem gemAttrs ); envPaths = lib.attrValues gems ++ lib.optional (!hasBundler) bundler; diff --git a/pkgs/development/ruby-modules/bundler-env/functions.nix b/pkgs/development/ruby-modules/bundler-env/functions.nix index 21efcacff8a..4c1f6deb55b 100644 --- a/pkgs/development/ruby-modules/bundler-env/functions.nix +++ b/pkgs/development/ruby-modules/bundler-env/functions.nix @@ -1,4 +1,5 @@ { lib, ruby, groups, gemConfig, ... }: +builtins.trace (if ruby.stubbed or false then "functions has stubbed ruby" else "functions has live ruby") rec { filterGemset = gemset: lib.filterAttrs (name: attrs: platformMatches attrs && groupMatches attrs) gemset; @@ -44,7 +45,7 @@ rec { }; in res; - composeGemAttrs = gems: name: attrs: ((removeAttrs attrs ["source"]) // attrs.source // { + composeGemAttrs = gems: name: attrs: ((removeAttrs attrs ["source" "platforms"]) // attrs.source // { inherit ruby; gemName = name; gemPath = map (gemName: gems."${gemName}") (attrs.dependencies or []); diff --git a/pkgs/development/ruby-modules/bundler-env/stubs.nix b/pkgs/development/ruby-modules/bundler-env/stubs.nix new file mode 100644 index 00000000000..3585681478c --- /dev/null +++ b/pkgs/development/ruby-modules/bundler-env/stubs.nix @@ -0,0 +1,33 @@ +{ stdenv, lib, ruby, callPackage, ... }: +let + real = { + inherit (stdenv) mkDerivation; + }; + mkDerivation = {name, ...}@argSet: + derivation { + inherit name; + text = (builtins.toJSON (lib.filterAttrs ( n: v: builtins.any (x: x == n) ["name" "system"]) argSet)); + builder = stdenv.shell; + args = [ "-c" "echo $(<$textPath) > $out"]; + system = stdenv.system; + passAsFile = ["text"]; + }; + fetchurl = {url?"", urls ? [],...}: "fetchurl:${if urls == [] then url else builtins.head urls}"; + + stdenv' = stdenv // { + inherit mkDerivation; + stubbed = true; + }; + ruby' = ruby // { + stdenv = stdenv'; + stubbed = true; + }; +in + { + ruby = ruby'; + buildRubyGem = callPackage ../gem { + inherit fetchurl; + ruby = ruby'; + }; + stdenv = stdenv'; + } diff --git a/pkgs/development/ruby-modules/bundler-env/test.nix b/pkgs/development/ruby-modules/bundler-env/test.nix index cb06d1012d2..28e5dbe318a 100644 --- a/pkgs/development/ruby-modules/bundler-env/test.nix +++ b/pkgs/development/ruby-modules/bundler-env/test.nix @@ -5,44 +5,24 @@ nix-build -E 'with import { }; callPackage ./test.nix {}' --show-trace Confusingly, the ideal result ends with something like: error: build of ‘/nix/store/3245f3dcl2wxjs4rci7n069zjlz8qg85-test-results.tap.drv’ failed */ -{ writeText, lib, ruby, defaultGemConfig, callPackage }: +{ stdenv, writeText, lib, ruby, defaultGemConfig, callPackage }@defs: let test = import ./testing.nix; tap = import ./tap-support.nix; + stubs = import ./stubs.nix defs; + should = import ./assertions.nix { inherit test lib; }; - bundlerEnv = callPackage ./default.nix {}; - basicEnv = callPackage ./basic.nix {}; + basicEnv = callPackage ./basic.nix stubs; + bundlerEnv = callPackage ./default.nix stubs // { + inherit basicEnv; + }; testConfigs = { groups = ["default"]; gemConfig = defaultGemConfig; confFiles = "./testConfs"; }; - functions = (import ./functions.nix ({ inherit lib ruby; } // testConfigs)); - - should = { - equal = expected: actual: - if actual == expected then - (test.passed "= ${toString expected}") else - (test.failed "'${toString actual}'(${builtins.typeOf actual}) != '${toString expected}'(${builtins.typeOf expected})"); - - beASet = actual: - if builtins.isAttrs actual then - (test.passed "is a set") else - (test.failed "is not a set, was ${builtins.typeOf actual}: ${toString actual}"); - - haveKeys = expected: actual: - if builtins.all - (ex: builtins.any (ac: ex == ac) (builtins.attrNames actual)) - expected then - (test.passed "has expected keys") else - (test.failed "keys differ: expected [${lib.concatStringsSep ";" expected}] have [${lib.concatStringsSep ";" (builtins.attrNames actual)}]"); - - havePrefix = expected: actual: - if lib.hasPrefix expected actual then - (test.passed "has prefix '${expected}'") else - (test.failed "prefix '${expected}' not found in '${actual}'"); - }; + functions = (import ./functions.nix ({ inherit lib; ruby = stubs.ruby; } // testConfigs)); justName = bundlerEnv { name = "test"; @@ -66,9 +46,9 @@ let [ (should.haveKeys [ "name" "env" "postBuild" ]) { - name = should.equal "test-0.1.2"; + name = should.equal "test"; env = should.beASet; - postBuild = should.havePrefix "nananana"; + postBuild = should.havePrefix "/nix/store"; } ]) ]; -- cgit 1.4.1