@@ -1014,6 +1014,160 @@ describe('compiler', function() {
1014
1014
instructions = boot . compile ( appdir . PATH ) ;
1015
1015
expect ( instructions . config ) . to . not . have . property ( 'modified' ) ;
1016
1016
} ) ;
1017
+
1018
+ describe ( 'for mixins' , function ( ) {
1019
+ function verifyMixinIsFoundViaMixinDirs ( sourceFile , mixinDirs ) {
1020
+ var appJS = appdir . writeFileSync ( sourceFile , '' ) ;
1021
+
1022
+ var instructions = boot . compile ( {
1023
+ appRootDir : appdir . PATH ,
1024
+ mixinDirs : mixinDirs
1025
+ } ) ;
1026
+
1027
+ expect ( instructions . mixins [ 0 ] . sourceFile ) . to . eql ( appJS ) ;
1028
+ }
1029
+
1030
+ it ( 'supports `mixinDirs` option' , function ( ) {
1031
+ verifyMixinIsFoundViaMixinDirs ( 'mixins/other.js' , [ './mixins' ] ) ;
1032
+ } ) ;
1033
+
1034
+ it ( 'resolves relative path in `mixinDirs` option' , function ( ) {
1035
+ verifyMixinIsFoundViaMixinDirs ( 'custom-mixins/vehicle.js' ,
1036
+ [ './custom-mixins' ] ) ;
1037
+ } ) ;
1038
+
1039
+ it ( 'resolves module relative path in `mixinDirs` option' , function ( ) {
1040
+ verifyMixinIsFoundViaMixinDirs ( 'node_modules/custom-mixins/vehicle.js' ,
1041
+ [ 'custom-mixins' ] ) ;
1042
+ } ) ;
1043
+
1044
+ describe ( 'name normalization' , function ( ) {
1045
+ var options ;
1046
+ beforeEach ( function ( ) {
1047
+ options = { appRootDir : appdir . PATH , mixinDirs : [ './mixins' ] } ;
1048
+
1049
+ appdir . writeFileSync ( 'mixins/foo.js' , '' ) ;
1050
+ appdir . writeFileSync ( 'mixins/time-stamps.js' , '' ) ;
1051
+ appdir . writeFileSync ( 'mixins/camelCase.js' , '' ) ;
1052
+ appdir . writeFileSync ( 'mixins/PascalCase.js' , '' ) ;
1053
+ appdir . writeFileSync ( 'mixins/space name.js' , '' ) ;
1054
+ } ) ;
1055
+
1056
+ it ( 'supports classify' , function ( ) {
1057
+ options . normalization = 'classify' ;
1058
+ var instructions = boot . compile ( options ) ;
1059
+
1060
+ var mixins = instructions . mixins ;
1061
+ var mixinNames = mixins . map ( getNameProperty ) ;
1062
+
1063
+ expect ( mixinNames ) . to . eql ( [
1064
+ 'CamelCase' , 'Foo' , 'PascalCase' , 'SpaceName' , 'TimeStamps'
1065
+ ] ) ;
1066
+ } ) ;
1067
+
1068
+ it ( 'supports dasherize' , function ( ) {
1069
+ options . normalization = 'dasherize' ;
1070
+ var instructions = boot . compile ( options ) ;
1071
+
1072
+ var mixins = instructions . mixins ;
1073
+ var mixinNames = mixins . map ( getNameProperty ) ;
1074
+
1075
+ expect ( mixinNames ) . to . eql ( [
1076
+ 'camel-case' , 'foo' , 'pascal-case' , 'space-name' , 'time-stamps'
1077
+ ] ) ;
1078
+ } ) ;
1079
+
1080
+ it ( 'supports custom function' , function ( ) {
1081
+ var normalize = function ( name ) { return name . toUpperCase ( ) ; } ;
1082
+ options . normalization = normalize ;
1083
+ var instructions = boot . compile ( options ) ;
1084
+
1085
+ var mixins = instructions . mixins ;
1086
+ var mixinNames = mixins . map ( getNameProperty ) ;
1087
+
1088
+ expect ( mixinNames ) . to . eql ( [
1089
+ 'CAMELCASE' , 'FOO' , 'PASCALCASE' , 'SPACE NAME' , 'TIME-STAMPS'
1090
+ ] ) ;
1091
+ } ) ;
1092
+
1093
+ it ( 'supports none' , function ( ) {
1094
+ options . normalization = 'none' ;
1095
+ var instructions = boot . compile ( options ) ;
1096
+
1097
+ var mixins = instructions . mixins ;
1098
+ var mixinNames = mixins . map ( getNameProperty ) ;
1099
+
1100
+ expect ( mixinNames ) . to . eql ( [
1101
+ 'camelCase' , 'foo' , 'PascalCase' , 'space name' , 'time-stamps'
1102
+ ] ) ;
1103
+ } ) ;
1104
+
1105
+ it ( 'supports false' , function ( ) {
1106
+ options . normalization = false ;
1107
+ var instructions = boot . compile ( options ) ;
1108
+
1109
+ var mixins = instructions . mixins ;
1110
+ var mixinNames = mixins . map ( getNameProperty ) ;
1111
+
1112
+ expect ( mixinNames ) . to . eql ( [
1113
+ 'camelCase' , 'foo' , 'PascalCase' , 'space name' , 'time-stamps'
1114
+ ] ) ;
1115
+ } ) ;
1116
+
1117
+ it ( 'defaults to classify' , function ( ) {
1118
+ var instructions = boot . compile ( options ) ;
1119
+
1120
+ var mixins = instructions . mixins ;
1121
+ var mixinNames = mixins . map ( getNameProperty ) ;
1122
+
1123
+ expect ( mixinNames ) . to . eql ( [
1124
+ 'CamelCase' , 'Foo' , 'PascalCase' , 'SpaceName' , 'TimeStamps'
1125
+ ] ) ;
1126
+ } ) ;
1127
+
1128
+ it ( 'throws error for invalid normalization format' , function ( ) {
1129
+ options . normalization = 'invalidFormat' ;
1130
+
1131
+ expect ( function ( ) { boot . compile ( options ) ; } )
1132
+ . to . throw ( / I n v a l i d n o r m a l i z a t i o n f o r m a t - " i n v a l i d F o r m a t " / ) ;
1133
+ } ) ;
1134
+ } ) ;
1135
+
1136
+ it ( 'overrides default mixin name, by `name` in JSON' , function ( ) {
1137
+ appdir . writeFileSync ( 'mixins/foo.js' , '' ) ;
1138
+ appdir . writeConfigFileSync ( 'mixins/foo.json' , { name : 'fooBar' } ) ;
1139
+
1140
+ var options = { appRootDir : appdir . PATH ,
1141
+ mixinDirs : [ './mixins' ]
1142
+ } ;
1143
+ var instructions = boot . compile ( options ) ;
1144
+
1145
+ expect ( instructions . mixins [ 0 ] . name ) . to . eql ( 'fooBar' ) ;
1146
+ } ) ;
1147
+
1148
+ it ( 'extends definition from JSON with same file name' , function ( ) {
1149
+ var appJS = appdir . writeFileSync ( 'mixins/foo-bar.js' , '' ) ;
1150
+
1151
+ appdir . writeConfigFileSync ( 'mixins/foo-bar.json' , {
1152
+ description : 'JSON file name same as JS file name' } ) ;
1153
+ appdir . writeConfigFileSync ( 'mixins/FooBar.json' , {
1154
+ description : 'JSON file name same as normalized name of mixin' } ) ;
1155
+
1156
+ var options = { appRootDir : appdir . PATH ,
1157
+ mixinDirs : [ './mixins' ] ,
1158
+ normalization : 'classify' } ;
1159
+ var instructions = boot . compile ( options ) ;
1160
+
1161
+ expect ( instructions . mixins ) . to . eql ( [
1162
+ {
1163
+ name : 'FooBar' ,
1164
+ description : 'JSON file name same as JS file name' ,
1165
+ sourceFile : appJS
1166
+ }
1167
+ ] ) ;
1168
+ } ) ;
1169
+
1170
+ } ) ;
1017
1171
} ) ;
1018
1172
1019
1173
describe ( 'for middleware' , function ( ) {
0 commit comments