コード例 #1
0
func TestParseOptPortSpc(t *testing.T) {
	p := NewParseOptPortSpc()

	runTest(t, p, "empty", "", nil, 0)
	runTest(t, p, "no space", "p.1", nil, 0)
	runTest(t, p, "no match 2", "pt. ", nil, 0)
	runTest(t, p, "simple 1", "p ", data.NewPort("p", 0), 0)
	runTest(t, p, "simple 2", "pt.0\t", data.NewIdxPort("pt", 0, 0), 0)
	runTest(t, p, "long port name", "looooongPortName \t ", data.NewPort("looooongPortName", 0), 0)
	runTest(t, p, "name and index", "port.123 \t ", data.NewIdxPort("port", 123, 0), 0)
	runTest(t, p, "too large index", "port.9999999999 ", nil, 1)
}
コード例 #2
0
func TestParsePort(t *testing.T) {
	p := NewParsePort()

	runTest(t, p, "empty", "", nil, 1)
	runTest(t, p, "no match", ".1", nil, 1)
	runTest(t, p, "half match 1", "pt.", data.NewPort("pt", 0), 0)
	runTest(t, p, "half match 2", "pt_1", data.NewPort("pt", 0), 0)
	runTest(t, p, "simple 1", "p", data.NewPort("p", 0), 0)
	runTest(t, p, "simple 2", "pt.0", data.NewIdxPort("pt", 0, 0), 0)
	runTest(t, p, "long port name", "looooongPortName", data.NewPort("looooongPortName", 0), 0)
	runTest(t, p, "name and index", "port.123", data.NewIdxPort("port", 123, 0), 0)
	runTest(t, p, "too large index", "port.9999999999", nil, 1)
}
コード例 #3
0
func TestParseChainEnd(t *testing.T) {
	p := NewParseChainEnd()

	runTest(t, p, "empty", "", nil, 1)
	runTest(t, p, "no match 1", "-", nil, 1)
	runTest(t, p, "no match 3", " /* \n */ \t [Bla]>", nil, 1)
	runTest(t, p, "no ports, no type", "->",
		&data.Connection{FromPort: data.NewPort("", 0), ToPort: data.NewPort("", 2)}, 0)
	runTest(t, p, "no ports but a type", " \t [Bla]-> ",
		&data.Connection{DataType: "Bla", FromPort: data.NewPort("", 0), ToPort: data.NewPort("", 11)}, 0)
	runTest(t, p, "out-port and no type", " \r\n // blu \n \t -> \r\n outX.3",
		&data.Connection{FromPort: data.NewPort("", 0), ToPort: data.NewIdxPort("outX", 3, 21)}, 0)
	runTest(t, p, "out-port and type", "\n \t /* Bla */ [ \t Blu \t ]->  \t outX.7",
		&data.Connection{DataType: "Blu", FromPort: data.NewPort("", 0), ToPort: data.NewIdxPort("outX", 7, 31)}, 0)
}
コード例 #4
0
func (op *SemanticPort) InPort(dat interface{}) {
	md := dat.(*data.MainData)
	pd := md.ParseData
	nameRes := pd.SubResults[0]

	if pd.SubResults[1].Value == nil {
		md.ParseData.Result.Value = data.NewPort(nameRes.Text, nameRes.Pos)
	} else {
		val := pd.SubResults[1].Value
		idx64 := val.([]interface{})[1].(uint64)
		if idx64 > uint64(math.MaxInt32) {
			errPos := pd.SubResults[1].Pos + 1
			gparselib.AddError(errPos, "Ridiculous large port index "+strconv.FormatUint(idx64, 10), nil, pd)
			md.ParseData.Result.ErrPos = -1 // just a semantic error, no syntax error!
			md.ParseData.Result.Value = nil
		} else {
			md.ParseData.Result.Value = data.NewIdxPort(nameRes.Text, int(idx64), nameRes.Pos)
		}
	}
	op.outPort(md)
}