| Index: packages/charted/test.disabled/selection/selection_test.dart
 | 
| diff --git a/packages/charted/test.disabled/selection/selection_test.dart b/packages/charted/test.disabled/selection/selection_test.dart
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..af2f540ab95fd5bfcb12a5775213a9069ab90a60
 | 
| --- /dev/null
 | 
| +++ b/packages/charted/test.disabled/selection/selection_test.dart
 | 
| @@ -0,0 +1,321 @@
 | 
| +/*
 | 
| + * Copyright 2014 Google Inc. All rights reserved.
 | 
| + *
 | 
| + * Use of this source code is governed by a BSD-style
 | 
| + * license that can be found in the LICENSE file or at
 | 
| + * https://developers.google.com/open-source/licenses/bsd
 | 
| + */
 | 
| +
 | 
| +library charted.test.selection;
 | 
| +
 | 
| +import 'dart:html' show document, Element;
 | 
| +import 'package:unittest/unittest.dart';
 | 
| +import 'package:charted/selection/selection.dart';
 | 
| +
 | 
| +part 'selection_scope_test.dart';
 | 
| +
 | 
| +selectionTests() {
 | 
| +  testSelectionScope();
 | 
| +  testSelections();
 | 
| +}
 | 
| +
 | 
| +testSelections() {
 | 
| +  String markup = '<div class="charted-scope-root">'
 | 
| +            '<div class="charted-scope-inner">'
 | 
| +              '<div class="charted-scope-leaf"></div>'
 | 
| +              '<div class="charted-scope-leaf"></div>'
 | 
| +            '</div>'
 | 
| +          '</div>';
 | 
| +
 | 
| +  Element root;
 | 
| +  SelectionScope scope;
 | 
| +  Selection empty, single, multiple;
 | 
| +
 | 
| +  setup() {
 | 
| +    root = new Element.html(markup);
 | 
| +    document.documentElement.append(root);
 | 
| +    scope = new SelectionScope.selector('.charted-scope-root');
 | 
| +
 | 
| +    empty = scope.selectAll('.node');
 | 
| +    single = scope.select('.charted-scope-inner');
 | 
| +    multiple = scope.selectAll('.charted-scope-leaf');
 | 
| +  }
 | 
| +
 | 
| +  teardown() {
 | 
| +    root.remove();
 | 
| +  }
 | 
| +
 | 
| +  test('toCallback() creates a callback to return the given value', () {
 | 
| +    num value = 100;
 | 
| +    SelectionCallback<num> cb = toCallback(value);
 | 
| +    expect(cb(null, null, null), equals(value));
 | 
| +  });
 | 
| +
 | 
| +  test('toValueAccessor() creates an accessor to return the given value', () {
 | 
| +    num value = 100;
 | 
| +    SelectionValueAccessor<num> cb = toValueAccessor(value);
 | 
| +    expect(cb(null, null), equals(value));
 | 
| +  });
 | 
| +
 | 
| +  group('Selection created from scope', () {
 | 
| +    setUp(setup);
 | 
| +    tearDown(teardown);
 | 
| +
 | 
| +    test('has isEmpty=true when the selection is empty', () {
 | 
| +      expect(empty.isEmpty, equals(true));
 | 
| +      expect(single.isEmpty, equals(false));
 | 
| +      expect(multiple.isEmpty, equals(false));
 | 
| +    });
 | 
| +
 | 
| +    test('has length set to number of non-null elements', () {
 | 
| +      expect(empty.length, equals(0));
 | 
| +      expect(single.length, equals(1));
 | 
| +      expect(multiple.length, equals(2));
 | 
| +    });
 | 
| +
 | 
| +    test('has first=null when there selection is empty', () {
 | 
| +      expect(empty.first, equals(null));
 | 
| +    });
 | 
| +
 | 
| +    test('has first set to first non-null element in selection', () {
 | 
| +      expect(single.first.className, equals('charted-scope-inner'));
 | 
| +      expect(multiple.first.className, equals('charted-scope-leaf'));
 | 
| +    });
 | 
| +
 | 
| +    test('has exactly one group', () {
 | 
| +      expect(empty.groups.length, equals(1));
 | 
| +      expect(single.groups.length, equals(1));
 | 
| +      expect(multiple.groups.length, equals(1));
 | 
| +    });
 | 
| +  });
 | 
| +
 | 
| +  group('Selection created from another selection', () {
 | 
| +    Selection selection1, selection2, selection3;
 | 
| +
 | 
| +    setUp(() {
 | 
| +      setup();
 | 
| +      selection1 = empty.selectAll('.child-nodes');
 | 
| +      selection2 = single.selectAll('.child-nodes');
 | 
| +      selection3 = multiple.selectAll('.child-nodes');
 | 
| +    });
 | 
| +    tearDown(teardown);
 | 
| +
 | 
| +    test('has length set to number of non-null elements', () {
 | 
| +      expect(selection1.length, equals(0));
 | 
| +      expect(selection2.length, equals(0));
 | 
| +      expect(selection3.length, equals(0));
 | 
| +    });
 | 
| +
 | 
| +    test('has first=null when there selection is empty', () {
 | 
| +      expect(selection1.first, equals(null));
 | 
| +      expect(selection2.first, equals(null));
 | 
| +      expect(selection3.first, equals(null));
 | 
| +    });
 | 
| +
 | 
| +    test('has same number of groups as number of non-null elements '
 | 
| +        'in source selection', () {
 | 
| +      expect(selection1.groups.length, equals(empty.length));
 | 
| +      expect(selection2.groups.length, equals(single.length));
 | 
| +      expect(selection3.groups.length, equals(multiple.length));
 | 
| +    });
 | 
| +  });
 | 
| +
 | 
| +  group('Selection', () {
 | 
| +    setUp(setup);
 | 
| +    tearDown(teardown);
 | 
| +
 | 
| +    test('attr sets attribute to the specified value on selected', () {
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['height'], isNull);
 | 
| +      });
 | 
| +      multiple.attr('height', '10');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['height'], equals('10'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('attrWithCallBack sets attribute to the specified value '
 | 
| +         'on selected elements with callback', () {
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['height'], isNull);
 | 
| +      });
 | 
| +      multiple.attrWithCallback('height', (d, i, e) => '${i * 10}');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['height'], equals('${i * 10}'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +
 | 
| +    test('classed sets class to the specified value on selected', () {
 | 
| +      multiple.classed('new-class');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['class'], equals('charted-scope-leaf new-class'));
 | 
| +      });
 | 
| +      multiple.classed('new-class', false);
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['class'], equals('charted-scope-leaf'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('classedWithCallBack sets class to the specified value '
 | 
| +         'on selected elements with callback', () {
 | 
| +      multiple.classedWithCallback('new-class', (d, i, e) => i % 2 > 0);
 | 
| +      multiple.each((d, i, e) {
 | 
| +        if (i % 2 > 0) {
 | 
| +          expect(e.attributes['class'], equals('charted-scope-leaf new-class'));
 | 
| +        } else {
 | 
| +          expect(e.attributes['class'], equals('charted-scope-leaf'));
 | 
| +        }
 | 
| +      });
 | 
| +      multiple.classedWithCallback('new-class', (d, i, e) => i % 2 == 0);
 | 
| +      multiple.each((d, i, e) {
 | 
| +        if (i % 2 == 0) {
 | 
| +          expect(e.attributes['class'], equals('charted-scope-leaf new-class'));
 | 
| +        } else {
 | 
| +          expect(e.attributes['class'], equals('charted-scope-leaf'));
 | 
| +        }
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('style sets CSS style to specified value on selected', () {
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['style'], isNull);
 | 
| +      });
 | 
| +      multiple.style('height', '10px');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['style'], equals('height: 10px;'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('attrWithCallBack sets CSS style to the specified value '
 | 
| +         'on selected elements with callback', () {
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['style'], isNull);
 | 
| +      });
 | 
| +      multiple.styleWithCallback('height', (d, i, e) => '${i * 10}px');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['style'], equals('height: ${i * 10}px;'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('text sets text to specified value on selected', () {
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.text, '');
 | 
| +      });
 | 
| +      multiple.text('some text');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.text, equals('some text'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('textWithCallBack sets text to the specified value '
 | 
| +         'on selected elements with callback', () {
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.text, '');
 | 
| +      });
 | 
| +      multiple.textWithCallback((d, i, e) => 'text-${i}');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.text, equals('text-${i}'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('html sets inner html to specified value on selected', () {
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.innerHtml, '');
 | 
| +      });
 | 
| +      multiple.text('some html');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.innerHtml, equals('some html'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('htmlWithCallBack sets inner html to the specified value '
 | 
| +         'on selected elements with callback', () {
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.innerHtml, '');
 | 
| +      });
 | 
| +      multiple.htmlWithCallback((d, i, e) => 'html-${i}');
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.innerHtml, equals('html-${i}'));
 | 
| +      });
 | 
| +    });
 | 
| +
 | 
| +    test('append appends new child elements to selection', () {
 | 
| +      expect(multiple.selectAll('.appended').length, equals(0));
 | 
| +      multiple.append('div')..classed('appended');
 | 
| +      expect(multiple.selectAll('.appended').length, equals(multiple.length));
 | 
| +      multiple.append('div')..classed('appended');
 | 
| +      expect(multiple.selectAll('.appended').length,
 | 
| +          equals(multiple.length * 2));
 | 
| +    });
 | 
| +
 | 
| +    test('appendWithCallback appends new child elements '
 | 
| +         'to selection with callback', () {
 | 
| +      for (var i = 0; i < multiple.length; i++) {
 | 
| +        expect(multiple.selectAll('.appended-${i}').length, equals(0));
 | 
| +      }
 | 
| +      multiple.appendWithCallback((d, i, e) {
 | 
| +        Element newItem = new Element.tag('div')
 | 
| +                        ..className = 'appended-${i}';
 | 
| +        return newItem;
 | 
| +      });
 | 
| +      for (var i = 0; i < multiple.length; i++) {
 | 
| +        expect(multiple.selectAll('.appended-${i}').length, equals(1));
 | 
| +      }
 | 
| +    });
 | 
| +
 | 
| +    test('insert inserts new child elements to selection', () {
 | 
| +      expect(multiple.selectAll('.appended').length, equals(0));
 | 
| +      multiple.insert('div', before: '.appended')..classed('appended');
 | 
| +      expect(multiple.selectAll('.appended').length, equals(multiple.length));
 | 
| +      multiple.insert('div', before: '.appended')..classed('appended');
 | 
| +      expect(multiple.selectAll('.appended').length,
 | 
| +          equals(multiple.length * 2));
 | 
| +    });
 | 
| +
 | 
| +    test('insertWithCallback inserts new child elements '
 | 
| +         'to selection with callback', () {
 | 
| +      for (var i = 0; i < multiple.length; i++) {
 | 
| +        expect(multiple.selectAll('.appended-${i}').length, equals(0));
 | 
| +      }
 | 
| +      multiple.insertWithCallback((d, i, e) {
 | 
| +        Element newItem = new Element.tag('div')
 | 
| +                        ..className = 'appended-${i}';
 | 
| +        return newItem;
 | 
| +      }, beforeFn: (d, i, e) => multiple.selectAll('.appended-${i}').first);
 | 
| +      for (var i = 0; i < multiple.length; i++) {
 | 
| +        expect(multiple.selectAll('.appended-${i}').length, equals(1));
 | 
| +      }
 | 
| +    });
 | 
| +
 | 
| +    test('remove removes selected elements', () {
 | 
| +      Selection remove = scope.selectAll('.charted-scope-leaf');
 | 
| +      expect(remove.length, equals(2));
 | 
| +      remove.remove();
 | 
| +      remove = scope.selectAll('.charted-scope-leaf');
 | 
| +      expect(remove.length, equals(0));
 | 
| +    });
 | 
| +
 | 
| +    test('each visits each selected element in order', () {
 | 
| +      multiple.attrWithCallback('height', (d, i, e) => i * 10);
 | 
| +      int count = 0;
 | 
| +      multiple.each((d, i, e) {
 | 
| +        expect(e.attributes['height'], equals('${i * 10}'));
 | 
| +        count++;
 | 
| +      });
 | 
| +      expect(count, equals(multiple.length));
 | 
| +    });
 | 
| +
 | 
| +    test('data binds data to selected elements', () {
 | 
| +      List dataList = [1, 2];
 | 
| +      multiple.data(dataList);
 | 
| +      multiple.each((d, i, e) => expect(d, dataList[i]));
 | 
| +    });
 | 
| +
 | 
| +    test('dataWithCallback binds data to elements with callback', () {
 | 
| +      List dataList = [1, 2];
 | 
| +      multiple.dataWithCallback((d, i, e) => dataList);
 | 
| +      multiple.each((d, i, e) => expect(d, dataList[i]));
 | 
| +    });
 | 
| +  });
 | 
| +}
 | 
| 
 |