| Index: third_party/pkg/angular/test/angular_spec.dart
|
| diff --git a/third_party/pkg/angular/test/angular_spec.dart b/third_party/pkg/angular/test/angular_spec.dart
|
| index 69b427b7297c55f014dc7d500a2311df2cbbf9cf..26c023deb145520cf9c7b24a43666ddbe8088eb4 100644
|
| --- a/third_party/pkg/angular/test/angular_spec.dart
|
| +++ b/third_party/pkg/angular/test/angular_spec.dart
|
| @@ -1,7 +1,10 @@
|
| library angular_spec;
|
|
|
| +import 'dart:mirrors';
|
| +
|
| import '_specs.dart';
|
| import 'package:angular/utils.dart';
|
| +import 'package:angular/tools/symbol_inspector/symbol_inspector.dart';
|
|
|
| main() {
|
| describe('angular.dart unittests', () {
|
| @@ -40,4 +43,232 @@ main() {
|
| }).toThrow('Unknown function type, expecting 0 to 5 args.');
|
| });
|
| });
|
| +
|
| + describe('symbols', () {
|
| + it('should not export unknown symbols from animate', () {
|
| + LibraryInfo libraryInfo;
|
| + try {
|
| + libraryInfo = getSymbolsFromLibrary("angular.animate");
|
| + } on UnimplementedError catch (e) {
|
| + return; // Not implemented, quietly skip.
|
| + }
|
| +
|
| + var ALLOWED_NAMES = [
|
| + "angular.animate.AbstractNgAnimate",
|
| + "angular.animate.AnimationLoop",
|
| + "angular.animate.AnimationModule",
|
| + "angular.animate.AnimationOptimizer",
|
| + "angular.animate.CssAnimate",
|
| + "angular.animate.CssAnimationMap",
|
| + "angular.animate.NgAnimate",
|
| + "angular.animate.NgAnimateChildren",
|
| + "angular.animate.CssAnimation",
|
| + "angular.animate.AnimationFrame",
|
| + "angular.animate.AnimationList",
|
| + "angular.animate.LoopedAnimation"
|
| + ];
|
| + assertSymbolNamesAreOk(ALLOWED_NAMES, libraryInfo);
|
| +
|
| + });
|
| +
|
| + it('should not export unknown symbols from angular', () {
|
| + // Test is failing? Add new symbols to the "ALLOWED_NAMES" list below.
|
| + // But make sure that you intend to export the symbol!
|
| + // Questions? Talk to @jbdeboer
|
| +
|
| + // There is a bug at the intersection of the angular library,
|
| + // dart2js and findLibrary(). http://dartbug.com/18302
|
| + try {
|
| + currentMirrorSystem().findLibrary(const Symbol("angular"));
|
| + } catch (e) {
|
| + return;
|
| + }
|
| +
|
| + LibraryInfo libraryInfo;
|
| + try {
|
| + libraryInfo = getSymbolsFromLibrary("angular");
|
| + } on UnimplementedError catch (e) {
|
| + return; // Not implemented, quietly skip.
|
| + }
|
| +
|
| + var ALLOWED_NAMES = [
|
| + "angular.app.AngularModule",
|
| + "angular.app.Application",
|
| + "angular.core.annotation.ShadowRootAware",
|
| + "angular.core.annotation_src.AttachAware",
|
| + "angular.core.annotation_src.Component",
|
| + "angular.core.annotation_src.Controller",
|
| + "angular.core.annotation_src.Decorator",
|
| + "angular.core.annotation_src.DetachAware",
|
| + "angular.core.annotation_src.Directive",
|
| + "angular.core.annotation_src.DirectiveAnnotation",
|
| + "angular.core.annotation_src.Formatter",
|
| + "angular.core.annotation_src.Injectable",
|
| + "angular.core.annotation_src.NgAttr",
|
| + "angular.core.annotation_src.NgCallback",
|
| + "angular.core.annotation_src.NgOneWay",
|
| + "angular.core.annotation_src.NgOneWayOneTime",
|
| + "angular.core.annotation_src.NgTwoWay",
|
| + "angular.core.dom_internal.Animate",
|
| + "angular.core.dom_internal.Animation",
|
| + "angular.core.dom_internal.AnimationResult",
|
| + "angular.core.dom_internal.BoundViewFactory",
|
| + "angular.core.dom_internal.BrowserCookies",
|
| + "angular.core.dom_internal.Compiler",
|
| + "angular.core.dom_internal.Cookies",
|
| + "angular.core.dom_internal.DirectiveMap",
|
| + "angular.core.dom_internal.ElementProbe",
|
| + "angular.core.dom_internal.EventHandler",
|
| + "angular.core.dom_internal.Http",
|
| + "angular.core.dom_internal.HttpBackend",
|
| + "angular.core.dom_internal.HttpDefaultHeaders",
|
| + "angular.core.dom_internal.HttpDefaults",
|
| + "angular.core.dom_internal.HttpInterceptor",
|
| + "angular.core.dom_internal.HttpInterceptors",
|
| + "angular.core.dom_internal.HttpResponse",
|
| + "angular.core.dom_internal.HttpResponseConfig",
|
| + "angular.core.dom_internal.LocationWrapper",
|
| + "angular.core.dom_internal.NgElement",
|
| + "angular.core.dom_internal.NoOpAnimation",
|
| + "angular.core.dom_internal.NullTreeSanitizer",
|
| + "angular.core.dom_internal.RequestErrorInterceptor",
|
| + "angular.core.dom_internal.RequestInterceptor",
|
| + "angular.core.dom_internal.Response",
|
| + "angular.core.dom_internal.ResponseError",
|
| + "angular.core.dom_internal.TemplateCache",
|
| + "angular.core.dom_internal.UrlRewriter",
|
| + "angular.core.dom_internal.View",
|
| + "angular.core.dom_internal.ViewCache",
|
| + "angular.core.dom_internal.ViewFactory",
|
| + "angular.core.dom_internal.ViewPort",
|
| + "angular.core_internal.CacheStats",
|
| + "angular.core_internal.ExceptionHandler",
|
| + "angular.core_internal.Interpolate",
|
| + "angular.core_internal.RootScope",
|
| + "angular.core_internal.Scope",
|
| + "angular.core_internal.ScopeDigestTTL",
|
| + "angular.core_internal.ScopeEvent",
|
| + "angular.core_internal.ScopeStats",
|
| + "angular.core_internal.ScopeStatsConfig",
|
| + "angular.core_internal.ScopeStatsEmitter",
|
| + "angular.core_internal.VmTurnZone",
|
| + "angular.core.parser.dynamic_parser.ClosureMap",
|
| + "angular.core.parser.Parser",
|
| + "angular.directive.AHref",
|
| + "angular.directive.ContentEditable",
|
| + "angular.directive.DecoratorFormatter",
|
| + "angular.directive.InputCheckbox",
|
| + "angular.directive.InputDateLike",
|
| + "angular.directive.InputNumberLike",
|
| + "angular.directive.InputRadio",
|
| + "angular.directive.InputSelect",
|
| + "angular.directive.InputTextLike",
|
| + "angular.directive.NgAttribute",
|
| + "angular.directive.NgBaseCss",
|
| + "angular.directive.NgBind",
|
| + "angular.directive.NgBindHtml",
|
| + "angular.directive.NgBindTemplate",
|
| + "angular.directive.NgBindTypeForDateLike",
|
| + "angular.directive.NgBooleanAttribute",
|
| + "angular.directive.NgClass",
|
| + "angular.directive.NgClassEven",
|
| + "angular.directive.NgClassOdd",
|
| + "angular.directive.NgCloak",
|
| + "angular.directive.NgControl",
|
| + "angular.directive.NgEvent",
|
| + "angular.directive.NgFalseValue",
|
| + "angular.directive.NgForm",
|
| + "angular.directive.NgHide",
|
| + "angular.directive.NgIf",
|
| + "angular.directive.NgInclude",
|
| + "angular.directive.NgModel",
|
| + "angular.directive.NgModelConverter",
|
| + "angular.directive.NgModelEmailValidator",
|
| + "angular.directive.NgModelMaxLengthValidator",
|
| + "angular.directive.NgModelMaxNumberValidator",
|
| + "angular.directive.NgModelMinLengthValidator",
|
| + "angular.directive.NgModelMinNumberValidator",
|
| + "angular.directive.NgModelNumberValidator",
|
| + "angular.directive.NgModelPatternValidator",
|
| + "angular.directive.NgModelRequiredValidator",
|
| + "angular.directive.NgModelUrlValidator",
|
| + "angular.directive.NgNonBindable",
|
| + "angular.directive.NgNullControl",
|
| + "angular.directive.NgNullForm",
|
| + "angular.directive.NgPluralize",
|
| + "angular.directive.NgRepeat",
|
| + "angular.directive.NgShow",
|
| + "angular.directive.NgSource",
|
| + "angular.directive.NgStyle",
|
| + "angular.directive.NgSwitch",
|
| + "angular.directive.NgSwitchDefault",
|
| + "angular.directive.NgSwitchWhen",
|
| + "angular.directive.NgTemplate",
|
| + "angular.directive.NgTrueValue",
|
| + "angular.directive.NgUnless",
|
| + "angular.directive.NgValidator",
|
| + "angular.directive.NgValue",
|
| + "angular.directive.OptionValue",
|
| + "angular.formatter_internal.Currency",
|
| + "angular.formatter_internal.Date",
|
| + "angular.formatter_internal.Filter",
|
| + "angular.formatter_internal.Json",
|
| + "angular.formatter_internal.LimitTo",
|
| + "angular.formatter_internal.Lowercase",
|
| + "angular.formatter_internal.Arrayify",
|
| + "angular.formatter_internal.Number",
|
| + "angular.formatter_internal.OrderBy",
|
| + "angular.formatter_internal.Stringify",
|
| + "angular.formatter_internal.Uppercase",
|
| + "angular.introspection.ngDirectives",
|
| + "angular.introspection.ngInjector",
|
| + "angular.introspection.ngProbe",
|
| + "angular.introspection.ngQuery",
|
| + "angular.introspection.ngScope",
|
| + "angular.routing.NgBindRoute",
|
| + "angular.routing.ngRoute",
|
| + "angular.routing.NgRouteCfg",
|
| + "angular.routing.NgRoutingHelper",
|
| + "angular.routing.NgRoutingUsePushState",
|
| + "angular.routing.NgView",
|
| + "angular.routing.RouteInitializer",
|
| + "angular.routing.RouteInitializerFn",
|
| + "angular.routing.RouteProvider",
|
| + "angular.routing.RouteViewFactory",
|
| + "angular.routing.RoutingModule",
|
| + "angular.watch_group.PrototypeMap",
|
| + "angular.watch_group.ReactionFn",
|
| + "angular.watch_group.Watch",
|
| + "change_detection.AvgStopwatch",
|
| + "change_detection.FieldGetterFactory",
|
| + "di.CircularDependencyError",
|
| + "di.FactoryFn",
|
| + "di.Injector",
|
| + "di.InvalidBindingError",
|
| + "di.Module",
|
| + "di.NoProviderError",
|
| + "di.ObjectFactory",
|
| + "di.TypeFactory",
|
| + "di.Visibility",
|
| + "route.client.Routable",
|
| + "route.client.Route",
|
| + "route.client.RouteEnterEvent",
|
| + "route.client.RouteEnterEventHandler",
|
| + "route.client.RouteEvent",
|
| + "route.client.RouteHandle",
|
| + "route.client.RouteImpl",
|
| + "route.client.RouteLeaveEvent",
|
| + "route.client.RouteLeaveEventHandler",
|
| + "route.client.RoutePreEnterEvent",
|
| + "route.client.RoutePreEnterEventHandler",
|
| + "route.client.Router",
|
| + "route.client.RouteStartEvent",
|
| + "url_matcher.UrlMatch",
|
| + "url_matcher.UrlMatcher"
|
| + ];
|
| +
|
| + assertSymbolNamesAreOk(ALLOWED_NAMES, libraryInfo);
|
| + });
|
| + });
|
| }
|
| +
|
|
|