158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/**
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * Test whether given model is valid.
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @param {Object} model
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * @return {boolean} Model is valid or not.
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) */
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)var modelIsValid = function(model) {
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Model object must contain 'name' and 'id'.
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (!('name' in model) || !('id' in model))
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)   return false;
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Model object cant contain 'children' and 'size' together.
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if ('children' in model && 'size' in model ||
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    !('children' in model) && !('size' in model))
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return false;
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Model object must contain 'subs' and 'template' both or neither.
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if ('subs' in model && !('template' in model) ||
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    !('subs' in model) && 'template' in model)
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return false;
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // If model contains children, every child also must be valid.
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if ('children' in model) {
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return model.children.reduce(function(previous, current) {
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      return previous && modelIsValid(current);
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    }, true);
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return true;
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test title format is file-name:function-name.
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)test('profiler:parseTemplate_', function() {
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  stop();
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  $.getJSON('../data/sample.json', function(data) {
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    start();
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    var profiler = new Profiler(data);
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    var models = profiler.parseTemplate_();
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    equal(models.length, data.snapshots.length);
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    models.forEach(function(model) {
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      ok(modelIsValid(model));
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    });
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    inspect(models, 'models generated by profile:\n');
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  });
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)});
49