@Override
        public void invoke(LyteContext context) {
          LyteValue value = context.apply();
          LyteContext testContext = new LyteContext(value, context.scope, new LyteStack());
          Set<String> properties = value.getProperties();
          LyteObject result = new LyteObject();

          if (!value.is("object")) {
            throw new LyteError("Cannot test an object of type " + value.typeOf() + "!");
          }

          for (String property : properties) {
            if (property.startsWith("__") || !value.getProperty(property).is("block")) {
              continue;
            }

            try {
              LyteBlock test = (LyteBlock) value.getProperty(property);
              test.invoke(testContext);
              result.setProperty(property, SUCCESS);
            } catch (Exception e) {
              result.setProperty(property, new LyteString(e.getMessage()));
            }
          }
          // Inject the print results function
          result.setProperty(printResults.fullname, printResults);
          context.push(result);
        }
 @Override
 public void invoke(LyteObject self, LyteContext context) {
   LyteValue result;
   for (String property : self.getProperties()) {
     if (property.equals(this.fullname)) {
       continue;
     } else if ((result = self.getProperty(property)).equals(SUCCESS)) {
       System.out.println("Test \"" + property + "\" Passed!");
     } else {
       System.out.println("Test \"" + property + "\" Failed Because \"" + result + "\"");
     }
   }
 }