Changeset 111551 in spip-zone


Ignore:
Timestamp:
Sep 11, 2018, 8:10:41 AM (8 months ago)
Author:
bystrano@…
Message:

On rend tout ça testable et on teste la fonction etendre_selection

window.massicot.runTests() dans la console javascript pour jouer les tests

Location:
_plugins_/massicot/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/massicot/trunk/formulaires/massicoter_image.html

    r104438 r111551  
    4141<script type="text/javascript">
    4242 $(function () {
    43    $('#formulaire_massicoter_image').formulaireMassicoterImage({
     43   window.massicot = $('#formulaire_massicoter_image').formulaireMassicoterImage({
    4444     zoom: #ENV{zoom,1},
    4545     messages: {
  • _plugins_/massicot/trunk/javascripts/formulaireMassicoterImage.js

    r111550 r111551  
    3030                round = Math.round,
    3131                max = Math.max,
    32                 min = Math.min;
     32                min = Math.min,
     33                tests = [];
     34
     35        tests.push(make_test(
     36                'Jouer les tests joue les tests',
     37                function () { return true; }
     38        ));
    3339
    3440        form_init();
    3541        GUI_init();
     42
    3643
    3744        /**
     
    8895                   remettre à la bonne échelle. */
    8996                if (dimensions_forcees) {
    90                         var echelle = (s.x2 - s.x1) * min(1, s.zoom) / largeur_forcee;
    91 
    92                         s.zoom = s.zoom / echelle;
    93 
    94                         s.x1 = round(s.x1 * s.zoom);
    95                         s.y1 = round(s.y1 * s.zoom),
    96 
    97                         s.x2 = s.x1 + largeur_forcee;
    98                         s.y2 = s.y1 + hauteur_forcee;
     97                        s = etendre_selection(s, { x: largeur_forcee, y: hauteur_forcee });
    9998                }
    10099
     
    107106                self.find('.dimensions').html((s.x2 - s.x1) + ' x ' + (s.y2 - s.y1));
    108107        }
     108
     109        function etendre_selection(s, dimensions) {
     110
     111                var echelle = (s.x2 - s.x1) / dimensions.x;
     112
     113                return {
     114                        x1: round(s.x1 / echelle),
     115                        x2: round(s.x1 / echelle) + dimensions.x,
     116                        y1: round(s.y1 / echelle),
     117                        y2: round(s.y1 / echelle) + dimensions.y,
     118                        zoom: s.zoom / echelle
     119                };
     120        }
     121
     122        tests.push(make_test_equals(
     123                'etendre la selection ne fait rien quand on est déjà aux bonnes dimensions',
     124                { x1: 100, x2: 200, y1: 0, y2: 50, zoom: 1},
     125                function () {
     126                        return etendre_selection(
     127                                { x1: 100, x2: 200, y1: 0, y2: 50, zoom: 1},
     128                                { x: 100, y: 50 }
     129                        );
     130                }
     131        ));
     132        tests.push(make_test_equals(
     133                'etendre la selection ne fait rien quand on est déjà aux bonnes dimensions',
     134                { x1: 100, x2: 200, y1: 0, y2: 50, zoom: 2},
     135                function () {
     136                        return etendre_selection(
     137                                { x1: 100, x2: 200, y1: 0, y2: 50, zoom: 2},
     138                                { x: 100, y: 50 }
     139                        );
     140                }
     141        ));
     142        tests.push(make_test_equals(
     143                'etendre la selection agrandit quand il le faut',
     144                { x1: 200, x2: 400, y1: 0, y2: 100, zoom: 0.5},
     145                function () {
     146                        return etendre_selection(
     147                                { x1: 100, x2: 200, y1: 0, y2: 50, zoom: 0.25},
     148                                { x: 200, y: 100 }
     149                        );
     150                }
     151        ));
     152        tests.push(make_test_equals(
     153                'etendre la selection agrandit quand il le faut',
     154                { x1: 200, x2: 400, y1: 0, y2: 100, zoom: 1},
     155                function () {
     156                        return etendre_selection(
     157                                { x1: 100, x2: 200, y1: 0, y2: 50, zoom: 0.5},
     158                                { x: 200, y: 100 }
     159                        );
     160                }
     161        ));
    109162
    110163        /**
     
    434487                );
    435488        }
     489
     490        /**
     491         * Fonctions utiles pour les tests.
     492         */
     493        self.runTests = function (test_index) {
     494
     495                if (test_index) {
     496                        tests[test_index].call(test_index);
     497                } else {
     498                        tests.forEach(function (test_func, index) {
     499                                test_func.call(index);
     500                        });
     501                }
     502        };
     503
     504        function make_test (msg, test_func) {
     505                return function () {
     506                        if (test_func.call()) {
     507                                console.log(this + ' OK: ' + msg);
     508                        } else {
     509                                console.error(this + ' ' + msg);
     510                        }
     511                };
     512        }
     513
     514        function make_test_equals(msg, left, right) {
     515                return function () {
     516
     517                        // On utilise des copies pour éviter les effets de bords
     518                        var left_val, right_val;
     519
     520                        if (left instanceof Function) {
     521                                left_val = left.call();
     522                        } else {
     523                                left_val = left;
     524                        }
     525                        if (right instanceof Function) {
     526                                right_val = right.call();
     527                        } else {
     528                                right_val = right;
     529                        }
     530
     531                        if ((left_val instanceof Object && right_val instanceof Object && isEquivalent(left_val, right_val))
     532                                || (left_val === right_val)) {
     533
     534                                console.log(this + ' OK: ' + msg);
     535                        } else {
     536                                console.error(this + ' ' + msg);
     537                                console.log(left_val);
     538                                console.log(right_val);
     539                        }
     540                };
     541        }
     542
     543        return self;
    436544};
     545
     546/**
     547 * Fonctions utilitaires
     548 */
     549
     550/* http://adripofjavascript.com/blog/drips/object-equality-in-javascript.html */
     551function isEquivalent(a, b) {
     552        // Create arrays of property names
     553        var aProps = Object.getOwnPropertyNames(a);
     554        var bProps = Object.getOwnPropertyNames(b);
     555
     556        // If number of properties is different,
     557        // objects are not equivalent
     558        if (aProps.length != bProps.length) {
     559                return false;
     560        }
     561
     562        for (var i = 0; i < aProps.length; i++) {
     563                var propName = aProps[i];
     564
     565                // If values of same property are not equal,
     566                // objects are not equivalent
     567                if (a[propName] !== b[propName]) {
     568                        return false;
     569                }
     570        }
     571
     572        // If we made it this far, objects
     573        // are considered equivalent
     574        return true;
     575}
Note: See TracChangeset for help on using the changeset viewer.