Code coverage report for sc/classlib/Core/Nil.js

Statements: 100% (96 / 96)      Branches: 100% (4 / 4)      Functions: 100% (24 / 24)      Lines: 100% (96 / 96)      Ignored: none     

All files » sc/classlib/Core/ » Nil.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 1851     1   1 1   1 1 2     1 1     1 2     1 24     1   1 1   1 1     1 1     1   1 1   1     1     1     1     1 1 1   1 1 1   1 1 1 1 1 1 1 1 1 1   1 1     1 1 1 1 1   1     1     1   1   1     2 1   1 1       1 1     1 1   1     1 1     1     1 1     1   1     12     1     1     1 1     1 6     1   1   1     1     1 2 2 1   1     1   1 1 1       1   1 1     1 1      
SCScript.install(function(sc) {
  "use strict";
 
  require("./Object");
 
  var $ = sc.lang.$;
  var $nil = $.nil;
 
  sc.lang.klass.refine("Nil", function(builder, _) {
    builder.addMethod("__num__", function() {
      return 0;
    });
 
    builder.addMethod("__bool__", function() {
      return false;
    });
 
    builder.addMethod("__sym__", function() {
      return "nil";
    });
 
    builder.addMethod("toString", function() {
      return "nil";
    });
 
    builder.shouldUseLiterals("new");
 
    builder.addMethod("isNil", sc.TRUE);
    builder.addMethod("notNil", sc.FALSE);
 
    builder.addMethod("?", function($obj) {
      return $obj;
    });
 
    builder.addMethod("??", function($obj) {
      return $obj.value();
    });
 
    builder.addMethod("!?");
 
    builder.addMethod("asBoolean", sc.FALSE);
    builder.addMethod("booleanValue", sc.FALSE);
 
    builder.addMethod("push", {
      args: "function"
    }, function($function) {
      return $function.value();
    });
 
    builder.addMethod("appendStream", {
      args: "stream"
    }, function($stream) {
      return $stream;
    });
 
    builder.addMethod("pop");
    builder.addMethod("source");
    builder.addMethod("source_");
 
    builder.addMethod("rate");
    builder.addMethod("numChannels");
    builder.addMethod("isPlaying", sc.FALSE);
 
    builder.addMethod("do");
    builder.addMethod("reverseDo");
    builder.addMethod("pairsDo");
    builder.addMethod("collect");
    builder.addMethod("select");
    builder.addMethod("reject");
    builder.addMethod("detect");
    builder.addMethod("collectAs");
    builder.addMethod("selectAs");
    builder.addMethod("rejectAs");
 
    builder.addMethod("dependants", function() {
      return $("IdentitySet").new();
    });
 
    builder.addMethod("changed");
    builder.addMethod("addDependant");
    builder.addMethod("removeDependant");
    builder.addMethod("release");
    builder.addMethod("update");
 
    builder.addMethod("transformEvent", {
      args: "event"
    }, function($event) {
      return $event;
    });
 
    builder.addMethod("awake");
 
    builder.addMethod("play");
 
    builder.addMethod("nextTimeOnGrid", {
      args: "clock"
    }, function($clock) {
      if ($clock === $nil) {
        return $clock;
      }
      return $.Func(function() {
        return $clock.$("nextTimeOnGrid");
      });
    });
 
    builder.addMethod("asQuant", function() {
      return $("Quant").default();
    });
 
    builder.addMethod("swapThisGroup");
    builder.addMethod("performMsg");
 
    builder.addMethod("printOn", {
      args: "stream"
    }, function($stream) {
      $stream.putAll($.String("nil"));
      return this;
    });
 
    builder.addMethod("storeOn", {
      args: "stream"
    }, function($stream) {
      $stream.putAll($.String("nil"));
      return this;
    });
 
    builder.addMethod("matchItem", sc.TRUE);
 
    builder.addMethod("add", {
      args: "value"
    }, function($value) {
      return $.Array([ $value ]);
    });
 
    builder.addMethod("addAll", {
      args: "array"
    }, function($array) {
      return $array.asArray();
    });
 
    builder.addMethod("++", function($array) {
      return $array.asArray();
    });
 
    builder.addMethod("asCollection", function() {
      return $.Array();
    });
 
    builder.addMethod("remove");
 
    builder.addMethod("set");
 
    builder.addMethod("get", {
      args: "prevVal"
    }, function($prevVal) {
      return $prevVal;
    });
 
    builder.addMethod("addFunc", function() {
      var functions = _.toArray(arguments);
      if (functions.length <= 1) {
        return functions[0];
      }
      return $("FunctionList").new($.Array(functions));
    });
 
    builder.addMethod("removeFunc");
 
    builder.addMethod("replaceFunc");
    builder.addMethod("seconds_");
    builder.addMethod("throw");
 
    // TODO: implements handleError
 
    builder.addMethod("archiveAsCompileString", sc.TRUE);
 
    builder.addMethod("asSpec", function() {
      return $("ControlSpec").new();
    });
 
    builder.addMethod("superclassesDo");
    builder.addMethod("shallowCopy");
  });
});