text: // Copyright 2017 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  var ApiTest = ApiTest || {};
  
  ApiTest.getSysInfo = function() {
    test('Message handler integration test', function(done) {
      function checkConst(constVal) {
        if (!Number.isInteger(constVal.counterMax)) {
          throw `result.const.counterMax is invalid : ${counterMax}`;
        }
      }
  
      function isCounter(number) {
        return Number.isInteger(number) && number >= 0;
      }
  
      function checkCpu(cpu) {
        return isCounter(cpu.user) && isCounter(cpu.kernel) &&
            isCounter(cpu.idle) && isCounter(cpu.total);
      }
  
      function checkCpus(cpus) {
        if (!Array.isArray(cpus)) {
          throw 'result.cpus is not an Array.';
          return;
        }
        for (let i = 0; i < cpus.length; ++i) {
          if (!checkCpu(cpus[i])) {
            throw `result.cpus[${i}] : ${JSON.stringify(cpus[i])}`;
          }
        }
      }
  
      function isMemoryByte(number) {
        return typeof number === 'number' && number >= 0;
      }
  
      function checkMemory(memory) {
        if (!memory || typeof memory !== 'object' ||
            !isMemoryByte(memory.available) || !isMemoryByte(memory.total) ||
            !isMemoryByte(memory.swapFree) || !isMemoryByte(memory.swapTotal) ||
            !isCounter(memory.pswpin) || !isCounter(memory.pswpout)) {
          throw `result.memory is invalid : ${JSON.stringify(memory)}`;
        }
      }
  
      function checkZram(zram) {
        if (!zram || typeof zram !== 'object' ||
            !isMemoryByte(zram.comprDataSize) ||
            !isMemoryByte(zram.origDataSize) ||
            !isMemoryByte(zram.memUsedTotal) || !isCounter(zram.numReads) ||
            !isCounter(zram.numWrites)) {
          throw `result.zram is invalid : ${JSON.stringify(zram)}`;
        }
      }
  
      cr.sendWithPromise('getSysInfo').then(function(result) {
        try {
          checkConst(result.const);
          checkCpus(result.cpus);
          checkMemory(result.memory);
          checkZram(result.zram);
          done();
        } catch (err) {
          done(new Error(err));
        }
      });
    });
  
    mocha.run();
  };
  