fix move-range tests of moved-moved items
This commit is contained in:
		
							parent
							
								
									b63d22e7db
								
							
						
					
					
						commit
						44499cb9fe
					
				@ -164,6 +164,7 @@ export class ContentMove {
 | 
			
		||||
      if (adaptPriority || nextPrio < this.priority || (currMoved != null && nextPrio === this.priority && (currMoved.id.client < item.id.client || (currMoved.id.client === item.id.client && currMoved.id.clock < item.id.clock)))) {
 | 
			
		||||
        if (currMoved !== null) {
 | 
			
		||||
          this.overrides.add(currMoved)
 | 
			
		||||
          transaction._mergeStructs.push(start)
 | 
			
		||||
        }
 | 
			
		||||
        maxPriority = math.max(maxPriority, nextPrio)
 | 
			
		||||
        // was already moved
 | 
			
		||||
 | 
			
		||||
@ -195,6 +195,19 @@ export class YEvent {
 | 
			
		||||
              delta.push(lastOp)
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          /**
 | 
			
		||||
           * @param {Item} item
 | 
			
		||||
           */
 | 
			
		||||
          const isMovedByNew = item => {
 | 
			
		||||
            let moved = item.moved
 | 
			
		||||
            while (moved != null) {
 | 
			
		||||
              if (this.adds(moved)) {
 | 
			
		||||
                return true
 | 
			
		||||
              }
 | 
			
		||||
              moved = moved.moved
 | 
			
		||||
            }
 | 
			
		||||
            return false
 | 
			
		||||
          }
 | 
			
		||||
          for (let item = target._start; ;) {
 | 
			
		||||
            if (item === currMoveEnd && currMove) {
 | 
			
		||||
              item = currMove
 | 
			
		||||
@ -210,12 +223,12 @@ export class YEvent {
 | 
			
		||||
                const { start, end } = getMovedCoords(item.content, tr)
 | 
			
		||||
                currMove = item
 | 
			
		||||
                currMoveEnd = end
 | 
			
		||||
                currMoveIsNew = this.adds(item)
 | 
			
		||||
                currMoveIsNew = this.adds(item) || currMoveIsNew
 | 
			
		||||
                item = start
 | 
			
		||||
                continue // do not move to item.right
 | 
			
		||||
              }
 | 
			
		||||
            } else if (item.moved !== currMove) {
 | 
			
		||||
              if (!currMoveIsNew && item.countable && (!item.deleted || this.deletes(item)) && item.moved && !this.adds(item) && this.adds(item.moved) && (this.transaction.prevMoved.get(item) || null) === currMove) {
 | 
			
		||||
              if (!currMoveIsNew && item.countable && (!item.deleted || this.deletes(item)) && !this.adds(item) && isMovedByNew(item) && (this.transaction.prevMoved.get(item) || null) === currMove) {
 | 
			
		||||
                if (lastOp === null || lastOp.delete === undefined) {
 | 
			
		||||
                  packOp()
 | 
			
		||||
                  lastOp = { delete: 0 }
 | 
			
		||||
@ -237,8 +250,11 @@ export class YEvent {
 | 
			
		||||
                  packOp()
 | 
			
		||||
                  lastOp = { insert: [] }
 | 
			
		||||
                }
 | 
			
		||||
                // @todo push items instead (or splice..)
 | 
			
		||||
                lastOp.insert = lastOp.insert.concat(item.content.getContent())
 | 
			
		||||
                added.add(item)
 | 
			
		||||
                if (!currMoveIsNew) {
 | 
			
		||||
                  added.add(item)
 | 
			
		||||
                }
 | 
			
		||||
              } else {
 | 
			
		||||
                if (lastOp === null || lastOp.retain === undefined) {
 | 
			
		||||
                  packOp()
 | 
			
		||||
 | 
			
		||||
@ -563,10 +563,10 @@ const arrayTransactions = [
 | 
			
		||||
      return
 | 
			
		||||
    }
 | 
			
		||||
    const pos = prng.int32(gen, 0, yarray.length - 1)
 | 
			
		||||
    const len = prng.int32(gen, 1, math.min(1, yarray.length - pos))
 | 
			
		||||
    const len = prng.int32(gen, 1, math.min(3, yarray.length - pos))
 | 
			
		||||
    const _newPosAdj = prng.int32(gen, 0, yarray.length - len)
 | 
			
		||||
    // make sure that we don't insert in-between the moved range
 | 
			
		||||
    const newPos = _newPosAdj + (_newPosAdj > yarray.length - len ? len : 0)
 | 
			
		||||
    const newPos = _newPosAdj + (_newPosAdj > pos ? len : 0)
 | 
			
		||||
    const oldContent = yarray.toArray()
 | 
			
		||||
    yarray.moveRange(pos, pos + len - 1, newPos)
 | 
			
		||||
    const movedValues = oldContent.splice(pos, len)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user