Пример #1
0
  describe('host attacher relationship', function() {

    var xml = require('../../fixtures/bpmn/import/boundaryEvent.bpmn');

    beforeEach(bootstrapViewer(xml));


    it('should wire boundary event', inject(function(elementRegistry) {

      // when
      var boundaryEventShape = elementRegistry.get('BoundaryEvent_1'),
          boundaryEvent = boundaryEventShape.businessObject;

      var taskShape = elementRegistry.get('Task_1'),
          task = taskShape.businessObject;

      // assume
      expect(boundaryEvent.attachedToRef).to.eql(task);

      // then
      expect(boundaryEventShape.host).to.eql(taskShape);

      expect(taskShape.attachers).to.exist;
      expect(taskShape.attachers).to.contain(boundaryEventShape);
    }));

  });
Пример #2
0
  describe('lanes + flow elements', function() {

    var xml = require('./lane-flowNodes.bpmn');

    beforeEach(bootstrapViewer(xml));


    it('should import flowElements as children of Participant', inject(function(elementRegistry) {

      // when
      var participantShape = elementRegistry.get('Participant_Lane'),
          taskShape = elementRegistry.get('Task'),
          sequenceFlowElement = elementRegistry.get('SequenceFlow');

      // then
      expect(taskShape.parent).to.eql(participantShape);
      expect(sequenceFlowElement.parent).to.eql(participantShape);
    }));


    it('should wire FlowElement#lanes', inject(function(elementRegistry) {

      // when
      var taskShape = elementRegistry.get('Task'),
          task = taskShape.businessObject,
          laneShape = elementRegistry.get('Lane'),
          lane = laneShape.businessObject;

      // then
      expect(task.get('lanes')).to.eql([ lane ]);
    }));

  });
Пример #3
0
  describe('#off', function() {

    let decisionTableViewer;

    beforeEach(bootstrapViewer(simpleXML, {
      container: testContainer
    }));

    beforeEach(function() {
      decisionTableViewer = getDecisionTable();
    });

    it('should remove listener', function() {

      // given
      const listener = () => {
        return 'bar';
      };

      decisionTableViewer.on('foo', listener);

      // when
      decisionTableViewer.off('foo', listener);

      // then
      const result = decisionTableViewer.get('eventBus').fire('foo');

      expect(result).to.not.exist;
    });

  });
Пример #4
0
  it('should add random ID suffix to marker ID', function(done) {

    var xml = require('../../fixtures/bpmn/simple.bpmn');
    bootstrapViewer(xml).call(this, function(err) {

      inject(function(canvas) {
        var svg = canvas._svg;
        var markers = svg.querySelectorAll('marker');

        expect(markers[0].id).to.match(/^sequenceflow-end-white-black-[A-Za-z0-9]+$/);
      })();

      done(err);
    });
  });
Пример #5
0
  it('should render adhoc sub process', function(done) {
    var xml = require('../../fixtures/bpmn/draw/activity-markers-simple.bpmn');

    bootstrapViewer(xml).call(this, function(err) {

      inject(function(elementRegistry) {

        var callActivityGfx = elementRegistry.getGraphics('AdHocSubProcess');

        // make sure the + marker is shown
        expect(domQuery('[data-marker=adhoc]', callActivityGfx)).to.exist;

        done(err);
      })();
    });

  });
Пример #6
0
  it('should render call activity', function(done) {
    var xml = require('../../fixtures/bpmn/draw/call-activity.bpmn');

    bootstrapViewer(xml).call(this, function(err) {

      inject(function(elementRegistry) {

        var callActivityGfx = elementRegistry.getGraphics('CallActivity');

        // make sure the + marker is shown
        expect(domQuery('[data-marker=sub-process]', callActivityGfx)).to.exist;

        done(err);
      })();
    });

  });
Пример #7
0
  describe('#attachTo', function() {

    let decisionTableViewer;

    beforeEach(bootstrapViewer(simpleXML, {
      container: testContainer
    }));

    beforeEach(function() {
      decisionTableViewer = getDecisionTable();
    });


    it('should attach', function() {

      // given
      const container = domify('<div></div>');

      // when
      decisionTableViewer.attachTo(container);

      // then
      expect(decisionTableViewer._container.parentNode).to.equal(container);
    });


    it('should fire on attach', function() {

      // given
      const container = domify('<div></div>');

      const spy = sinon.spy();

      decisionTableViewer.on('attach', spy);

      // when
      decisionTableViewer.attachTo(container);

      // then
      expect(spy).to.have.been.called;
    });

  });
Пример #8
0
  describe('lanes + flow elements / missing flowNodeRef', function() {

    var xml = require('./lane-missing-flowNodeRef.bpmn');

    beforeEach(bootstrapViewer(xml));


    it('should import flowElements as children of Participant', inject(function(elementRegistry) {

      // when
      var participantShape = elementRegistry.get('Participant_Lane'),
          taskShape = elementRegistry.get('Task');

      // then
      // task is part of participant, as no lane was assigned
      expect(taskShape.parent).to.eql(participantShape);
    }));

  });
Пример #9
0
describe('environment - mocking', function() {

  var diagramXML = require('../../fixtures/bpmn/simple.bpmn');

  var mockEvents, bootstrapCalled;

  beforeEach(bootstrapViewer(diagramXML, {
    modules: Viewer.prototype._modules
  }, function() {
    mockEvents = new Events();

    bootstrapCalled = true;

    return {
      eventBus: mockEvents
    };
  }));

  afterEach(function() {
    bootstrapCalled = false;
  });


  it('should use spy', inject(function(eventBus) {

    expect(eventBus).to.eql(mockEvents);
    expect(bootstrapCalled).to.be.true;
  }));


  it('should reparse bootstrap code', inject(function(eventBus) {

    expect(bootstrapCalled).to.be.true;
  }));


  it('should inject bpmnjs', inject(function(bpmnjs) {

    expect(bpmnjs).to.exist;
  }));

});
Пример #10
0
  it('should properly render colored markers', function(done) {

    var xml = require('../../fixtures/bpmn/draw/colors.bpmn');
    bootstrapViewer(xml).call(this, function(err) {

      inject(function(canvas) {
        var svg = canvas._svg;
        var markers = svg.querySelectorAll('marker');

        expect(markers).to.have.length(5);
        expect(markers[0].id).to.match(/^sequenceflow-end-white-black-[A-Za-z0-9]{25}$/);
        expect(markers[1].id).to.match(/^sequenceflow-end-yellow-blue-[A-Za-z0-9]{25}$/);
        expect(markers[2].id).to.match(/^association-end-white-black-[A-Za-z0-9]{25}$/);
        expect(markers[3].id).to.match(/^messageflow-end-white-black-[A-Za-z0-9]{25}$/);
        expect(markers[4].id).to.match(/^messageflow-start-white-black-[A-Za-z0-9]{25}$/);
      })();

      done(err);
    });
  });
Пример #11
0
  describe('#detach', function() {

    let decisionTableViewer;

    beforeEach(bootstrapViewer(simpleXML, {
      container: testContainer
    }));

    beforeEach(function() {
      decisionTableViewer = getDecisionTable();
    });


    it('should detach', function() {

      // when
      decisionTableViewer.detach();

      // then
      expect(decisionTableViewer._container.parentNode).to.not.exist;
    });


    it('should fire on attach', function() {

      // given
      const spy = sinon.spy();

      decisionTableViewer.on('detach', spy);

      // when
      decisionTableViewer.detach();

      // then
      expect(spy).to.have.been.called;
    });

  });
Пример #12
0
  describe('#destroy', function() {

    let decisionTableViewer;

    beforeEach(bootstrapViewer(simpleXML, {
      container: testContainer
    }));

    beforeEach(function() {
      decisionTableViewer = getDecisionTable();
    });


    it('should destroy', function() {

      // when
      decisionTableViewer.destroy();

      // then
      expect(decisionTableViewer._container.parentNode).to.not.exist;
    });

  });
Пример #13
0
  describe('#on', function() {

    let decisionTableViewer;

    beforeEach(bootstrapViewer(simpleXML, { container: testContainer }));

    beforeEach(function() {
      decisionTableViewer = getDecisionTable();
    });

    it('should add listener', function() {

      // when
      decisionTableViewer.on('foo', () => {
        return 'bar';
      });

      // then
      const result = decisionTableViewer.get('eventBus').fire('foo');

      expect(result).to.eql('bar');
    });

  });
Пример #14
0
 it('should render data objects', function(done) {
   var xml = require('../../fixtures/bpmn/draw/data-objects.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #15
0
    describe('default colors', function() {

      var defaultFillColor = 'red',
          defaultStrokeColor = 'lime';

      // TODO(philippfromme): remove once PhantomJS is not used anymore
      var hexValues = {
        blue: '#0000ff',
        lime: '#00ff00',
        red: '#ff0000',
        yellow: '#ffff00'
      };

      beforeEach(bootstrapViewer(xml,{
        bpmnRenderer: {
          defaultFillColor: defaultFillColor,
          defaultStrokeColor: defaultStrokeColor
        }
      }));

      function expectFillColor(element, color) {
        expect([ color, hexValues[ color ]]).to.include(element.style.fill);
      }

      function expectStrokeColor(element, color) {
        expect([ color, hexValues[ color ]]).to.include(element.style.stroke);
      }

      /**
       * Expect colors depending on element type.
       *
       * @param {djs.model.base} element - Element.
       * @param {SVG} gfx - Graphics of element.
       * @param {String} fillColor - Fill color to expect.
       * @param {String} strokeColor - Stroke color to expect.
       */
      function expectColors(element, gfx, fillColor, strokeColor) {
        var djsVisual = domQuery('.djs-visual', gfx);

        var circle, path, polygon, polyline, rect, text;

        if (element.labelTarget) {
          text = domQuery('text', djsVisual);

          expectFillColor(text, strokeColor);
        } else if (element.waypoints) {
          path = domQuery('path', djsVisual);
          polyline = domQuery('polyline', djsVisual);

          expectStrokeColor(path || polyline, strokeColor);
        } else if (isAny(element, [ 'bpmn:StartEvent', 'bpmn:EndEvent' ])) {
          circle = domQuery('circle', djsVisual);

          expectFillColor(circle, fillColor);
          expectStrokeColor(circle, strokeColor);
        } else if (isAny(element, [ 'bpmn:Task', 'bpmn:SubProcess', 'bpmn:Particpant' ])) {
          rect = domQuery('rect', djsVisual);
          text = domQuery('text', djsVisual);

          expectFillColor(rect, fillColor);
          expectStrokeColor(rect, strokeColor);
          expectFillColor(text, strokeColor);
        } else if (isAny(element, [ 'bpmn:Gateway' ])) {
          polygon = domQuery('polygon', djsVisual);

          expectFillColor(polygon, fillColor);
          expectStrokeColor(polygon, strokeColor);
        }
      }


      it('should render default colors without overriding', inject(function(canvas, elementRegistry) {
        var rootElement = canvas.getRootElement();

        elementRegistry.forEach(function(e) {
          if (e === rootElement) {
            return;
          }

          var gfx = elementRegistry.getGraphics(e),
              di = getDi(e),
              fillColor = di.get('bioc:fill'),
              strokeColor = di.get('bioc:stroke');

          if (fillColor || strokeColor) {
            expectColors(e, gfx, fillColor, strokeColor);
          } else {
            expectColors(e, gfx, defaultFillColor, defaultStrokeColor);
          }
        });
      }));

    });
Пример #16
0
 it('should render boundary events with correct z-index', function(done) {
   var xml = require('../../fixtures/bpmn/draw/boundary-event-z-index.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #17
0
 it('should render boundary events without flowNodeRef', function(done) {
   var xml = require('../../fixtures/bpmn/draw/boundary-event-without-refnode.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #18
0
  describe('basics', function() {

    var xml = require('../../fixtures/bpmn/import/process.bpmn');

    beforeEach(bootstrapViewer(xml));


    it('should wire root element', inject(function(elementRegistry, canvas) {

      // when
      var processElement = elementRegistry.get('Process_1');
      var subProcessShape = elementRegistry.get('SubProcess_1');

      // then
      expect(subProcessShape.parent).to.eql(processElement);
      expect(canvas.getRootElement()).to.eql(processElement);

      expect(is(processElement, 'bpmn:Process')).to.be.true;
    }));


    it('should wire parent child relationship', inject(function(elementRegistry) {

      // when
      var subProcessShape = elementRegistry.get('SubProcess_1');
      var startEventShape = elementRegistry.get('StartEvent_1');

      // then
      expect(startEventShape.type).to.equal('bpmn:StartEvent');
      expect(startEventShape.parent).to.eql(subProcessShape);

      expect(subProcessShape.children.length).to.equal(4);
    }));


    it('should wire label relationship', inject(function(elementRegistry) {

      // when
      var startEventShape = elementRegistry.get('StartEvent_1');
      var label = startEventShape.label;

      // then
      expect(label).to.exist;
      expect(label.id).to.equal(startEventShape.id + '_label');

      expect(label.labelTarget).to.eql(startEventShape);
    }));


    it('should wire businessObject', inject(function(elementRegistry) {

      // when
      var subProcessShape = elementRegistry.get('SubProcess_1');
      var startEventShape = elementRegistry.get('StartEvent_1');

      var subProcess = subProcessShape.businessObject,
          startEvent = startEventShape.businessObject;

      // then
      expect(subProcess).to.exist;
      expect(is(subProcess, 'bpmn:SubProcess')).to.be.true;

      expect(startEvent).to.exist;
      expect(is(startEvent, 'bpmn:StartEvent')).to.be.true;
    }));


    it('should wire shape di', inject(function(elementRegistry) {

      // when
      var subProcessShape = elementRegistry.get('SubProcess_1');

      var subProcess = subProcessShape.businessObject;
      var subProcessDi = subProcess.di;

      // then
      expect(subProcessDi).to.exist;
      expect(subProcessDi.bpmnElement).to.eql(subProcess);
    }));


    it('should wire connection di', inject(function(elementRegistry) {

      // when
      var sequenceFlowElement = elementRegistry.get('SequenceFlow_1');

      var sequenceFlow = sequenceFlowElement.businessObject;
      var sequenceFlowDi = sequenceFlow.di;

      // then
      expect(sequenceFlowDi).to.exist;
      expect(sequenceFlowDi.bpmnElement).to.eql(sequenceFlow);
    }));

  });
Пример #19
0
 it('should render boundary event only once if referenced incorrectly via flowNodeRef (robustness)', function(done) {
   var xml = require('../../fixtures/bpmn/draw/boundary-event-with-refnode.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #20
0
 it('should render event subprocesses (collapsed)', function(done) {
   var xml = require('../../fixtures/bpmn/draw/event-subprocesses-collapsed.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #21
0
 it('should render colors without warnings and errors', function(done) {
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #22
0
 it('should render conditional flow (typed task)', function(done) {
   var xml = require('../../fixtures/bpmn/draw/conditional-flow-typed-task.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #23
0
 it('should render xor gateways blank and with X', function(done) {
   var xml = require('../../fixtures/bpmn/draw/xor.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #24
0
 it('should render gateway event if attribute is missing in XML', function(done) {
   var xml = require('../../fixtures/bpmn/draw/gateway-type-default.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #25
0
 it('should render activity markers (combination)', function(done) {
   var xml = require('../../fixtures/bpmn/draw/activity-markers-combination.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #26
0
 it('should render association markers', function(done) {
   var xml = require('../../fixtures/bpmn/draw/associations.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #27
0
 it('should render conditional default flows', function(done) {
   var xml = require('../../fixtures/bpmn/draw/conditional-flow-default.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #28
0
 it('should render events (interrupting)', function(done) {
   var xml = require('../../fixtures/bpmn/draw/events-interrupting.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #29
0
 it('should render NO conditional flow (gateway)', function(done) {
   var xml = require('../../fixtures/bpmn/draw/conditional-flow-gateways.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });
Пример #30
0
 it('should render flow markers', function(done) {
   var xml = require('../../fixtures/bpmn/flow-markers.bpmn');
   bootstrapViewer(xml).call(this, checkErrors(done));
 });