@@ -755,6 +755,229 @@ describe('Test lib.js:', function() {
755
755
} ) ;
756
756
} ) ;
757
757
758
+ fdescribe ( 'validate' , function ( ) {
759
+
760
+ function assert ( shouldPass , shouldFail , valObject ) {
761
+ shouldPass . forEach ( function ( v ) {
762
+ var res = Lib . validate ( v , valObject ) ;
763
+ expect ( res ) . toBe ( true , JSON . stringify ( v ) + ' should pass' ) ;
764
+ } ) ;
765
+
766
+ shouldFail . forEach ( function ( v ) {
767
+ var res = Lib . validate ( v , valObject ) ;
768
+ expect ( res ) . toBe ( false , JSON . stringify ( v ) + ' should fail' ) ;
769
+ } ) ;
770
+ }
771
+
772
+ it ( 'should work for valType \'data_array\' where' , function ( ) {
773
+ var shouldPass = [ [ 20 ] , [ ] ] ,
774
+ shouldFail = [ 'a' , { } , 20 , undefined , null ] ;
775
+
776
+ assert ( shouldPass , shouldFail , {
777
+ valType : 'data_array'
778
+ } ) ;
779
+
780
+ assert ( shouldPass , shouldFail , {
781
+ valType : 'data_array' ,
782
+ dflt : [ 1 , 2 ]
783
+ } ) ;
784
+ } ) ;
785
+
786
+ it ( 'should work for valType \'enumerated\' where' , function ( ) {
787
+ assert ( [ 'a' , 'b' ] , [ 'c' , 1 , null , undefined , '' ] , {
788
+ valType : 'enumerated' ,
789
+ values : [ 'a' , 'b' ] ,
790
+ dflt : 'a'
791
+ } ) ;
792
+
793
+ assert ( [ 1 , '1' , 2 , '2' ] , [ 'c' , 3 , null , undefined , '' ] , {
794
+ valType : 'enumerated' ,
795
+ values : [ 1 , 2 ] ,
796
+ coerceNumber : true ,
797
+ dflt : 1
798
+ } ) ;
799
+
800
+ assert ( [ 'a' , 'b' , [ 1 , 2 ] ] , [ 'c' , 1 , null , undefined , '' ] , {
801
+ valType : 'enumerated' ,
802
+ values : [ 'a' , 'b' ] ,
803
+ arrayOk : true ,
804
+ dflt : 'a'
805
+ } ) ;
806
+ } ) ;
807
+
808
+ it ( 'should work for valType \'boolean\' where' , function ( ) {
809
+ var shouldPass = [ true , false ] ,
810
+ shouldFail = [ 'a' , 1 , { } , [ ] , null , undefined , '' ] ;
811
+
812
+ assert ( shouldPass , shouldFail , {
813
+ valType : 'boolean' ,
814
+ dflt : true
815
+ } ) ;
816
+
817
+ assert ( shouldPass , shouldFail , {
818
+ valType : 'boolean' ,
819
+ dflt : false
820
+ } ) ;
821
+ } ) ;
822
+
823
+ it ( 'should work for valType \'number\' where' , function ( ) {
824
+ var shouldPass = [ 20 , '20' , 1e6 ] ,
825
+ shouldFail = [ 'a' , [ ] , { } , null , undefined , '' ] ;
826
+
827
+ assert ( shouldPass , shouldFail , {
828
+ valType : 'number'
829
+ } ) ;
830
+
831
+ assert ( shouldPass , shouldFail , {
832
+ valType : 'number' ,
833
+ dflt : null
834
+ } ) ;
835
+
836
+ assert ( [ 20 , '20' ] , [ - 10 , '-10' , 25 , '25' ] , {
837
+ valType : 'number' ,
838
+ dflt : 20 ,
839
+ min : 0 ,
840
+ max : 21
841
+ } ) ;
842
+
843
+ assert ( [ 20 , '20' , [ 1 , 2 ] ] , [ 'a' , { } ] , {
844
+ valType : 'number' ,
845
+ dflt : 20 ,
846
+ arrayOk : true
847
+ } ) ;
848
+ } ) ;
849
+
850
+ it ( 'should work for valType \'integer\' where' , function ( ) {
851
+ assert ( [ 1 , 2 , '3' , '4' ] , [ 'a' , 1.321321 , { } , [ ] , null , 2 / 3 , undefined , null ] , {
852
+ valType : 'integer' ,
853
+ dflt : 1
854
+ } ) ;
855
+
856
+ assert ( [ 1 , 2 , '3' , '4' ] , [ - 1 , '-2' , 2.121 , null , undefined , [ ] , { } ] , {
857
+ valType : 'integer' ,
858
+ min : 0 ,
859
+ dflt : 1
860
+ } ) ;
861
+ } ) ;
862
+
863
+ it ( 'should work for valType \'string\' where' , function ( ) {
864
+
865
+ // This fails as the coerceFunction coerce all values
866
+ // (except when 'strict' is true) using String()
867
+ //
868
+ // Things like undefined, null, {}, [] should be considered valid!
869
+ //
870
+ // The question becomes how the change this while not
871
+ // scarifying perf??
872
+
873
+ assert ( [ '3' , '4' , 'a' ] , [ undefined , { } , [ ] , null ] , {
874
+ valType : 'string' ,
875
+ dflt : 'a'
876
+ } ) ;
877
+
878
+ assert ( [ '3' , '4' , 'a' ] , [ undefined , { } , [ ] , null , '' ] , {
879
+ valType : 'string' ,
880
+ dflt : 'a' ,
881
+ noBlank : true
882
+ } ) ;
883
+
884
+ assert ( [ '3' , '4' ] , [ undefined , 1 , { } , [ ] , null , '' ] , {
885
+ valType : 'string' ,
886
+ dflt : 'a' ,
887
+ strict : true ,
888
+ noBlank : true
889
+ } ) ;
890
+ } ) ;
891
+
892
+ it ( 'should work for valType \'color\' where' , function ( ) {
893
+ var shouldPass = [ 'red' , '#d3d3d3' , 'rgba(0,255,255,0.1)' ] ,
894
+ shouldFail = [ 1 , { } , [ ] , 'rgq(233,122,332,1)' , null , undefined ] ;
895
+
896
+ assert ( shouldPass , shouldFail , {
897
+ valType : 'color'
898
+ } ) ;
899
+ } ) ;
900
+
901
+ it ( 'should work for valType \'colorscale\' where' , function ( ) {
902
+ var good = [ [ 0 , 'red' ] , [ 1 , 'blue' ] ] ,
903
+ bad = [ [ 0.1 , 'red' ] , [ 1 , 'blue' ] ] ,
904
+ bad2 = [ [ 0 ] , [ 1 ] ] ,
905
+ bad3 = [ [ 'red' ] , [ 'blue' ] ] ,
906
+ bad4 = [ 'red' , 'blue' ] ;
907
+
908
+ // Fails at [], should be an easy fix though.
909
+
910
+ var shouldPass = [ 'Viridis' , 'Greens' , good ] ,
911
+ shouldFail = [ 'red' , 1 , undefined , null , { } , [ ] , bad , bad2 , bad3 , bad4 ] ;
912
+
913
+ assert ( shouldPass , shouldFail , {
914
+ valType : 'colorscale'
915
+ } ) ;
916
+ } ) ;
917
+
918
+ it ( 'should work for valType \'angle\' where' , function ( ) {
919
+ var shouldPass = [ 'auto' , '120' , 270 ] ,
920
+ shouldFail = [ { } , [ ] , 'red' , null , undefined , '' ] ;
921
+
922
+ assert ( shouldPass , shouldFail , {
923
+ valType : 'angle' ,
924
+ dflt : 0
925
+ } ) ;
926
+ } ) ;
927
+
928
+ it ( 'should work for valType \'subplotid\' where' , function ( ) {
929
+ var shouldPass = [ 'sp' , 'sp1' , 'sp4' ] ,
930
+ shouldFail = [ { } , [ ] , 'sp0' , 'spee1' , null , undefined ] ;
931
+
932
+ // This fails because coerceFunction depends on dflt
933
+ // having a length.
934
+ //
935
+ // Solution: don't use dflt as base string ->
936
+ // add other options to valObject
937
+
938
+ assert ( shouldPass , shouldFail , {
939
+ valType : 'subplotid' ,
940
+ dflt : 'sp'
941
+ } ) ;
942
+ } ) ;
943
+
944
+ it ( 'should work for valType \'flaglist\' where' , function ( ) {
945
+ var shouldPass = [ 'a' , 'b' , 'a+b' , 'b+a' , 'c' ] ,
946
+ shouldFail = [ { } , [ ] , 'red' , null , undefined , '' , 'a + b' ] ;
947
+
948
+ assert ( shouldPass , shouldFail , {
949
+ valType : 'flaglist' ,
950
+ flags : [ 'a' , 'b' ] ,
951
+ extras : [ 'c' ]
952
+ } ) ;
953
+ } ) ;
954
+
955
+ it ( 'should work for valType \'any\' where' , function ( ) {
956
+ var shouldPass = [ '' , '120' , null , false , { } , [ ] ] ,
957
+ shouldFail = [ undefined ] ;
958
+
959
+ assert ( shouldPass , shouldFail , {
960
+ valType : 'any'
961
+ } ) ;
962
+ } ) ;
963
+
964
+ it ( 'should work for valType \'info_array\' where' , function ( ) {
965
+ var shouldPass = [ [ 1 , 2 ] ] ,
966
+ shouldFail = [ { } , [ ] , [ 'aads' , null ] , 'red' , null , undefined , '' ] ;
967
+
968
+ // This fails. All array including [] are considered valid
969
+
970
+ assert ( shouldPass , shouldFail , {
971
+ valType : 'info_array' ,
972
+ items : [ {
973
+ valType : 'number' , dflt : - 20
974
+ } , {
975
+ valType : 'number' , dflt : 20
976
+ } ]
977
+ } ) ;
978
+ } ) ;
979
+ } ) ;
980
+
758
981
describe ( 'setCursor' , function ( ) {
759
982
760
983
beforeEach ( function ( ) {
0 commit comments