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